2 回答
TA贡献1841条经验 获得超3个赞
你正在使用Vector2
位置,所以我假设你的游戏是 2D 的。如果是这样,我相信您需要使用Physics
类的 2D 版本(请参阅此处):
void FixedUpdate() {
Vector2 diff = (PlayerMovement.playerTransform.position - transform.position).Normalized;
RaycastHit2D hit = Physics2D.Raycast(transform.position, diff);
Debug.DrawRay(transform.position, diff, Color.white, 0.01f, true);
if (hit.collider != null) {
Debug.Log("Raycast hit: " + hit.collider.gameObject.name);
if (hit.transform.tag == "Player") {
float rotZ = Mathf.Atan2(diff.y, diff.x) * Mathf.Rad2Deg;
transform.rotation = Quaternion.Euler(0f, 0f, rotZ);
}
}
}
TA贡献1842条经验 获得超21个赞
对于您正在使用的 Ray 构造函数,方向应该是 Vector3:
https://docs.unity3d.com/ScriptReference/Ray.html
但是在您的代码中,您传递的是 Vector2。如果是 2D 游戏,您应该使用不同的构造函数:
https://docs.unity3d.com/ScriptReference/Ray2D-ctor.html
除此之外,正如他们已经在评论中指出的那样,您需要在 Physics.Raycast 中传递 Ray 的 maxDistance 参数:
ray 射线 的起点和方向。
hitInfo 如果返回 true,hitInfo 将包含有关碰撞器被击中位置的更多信息。(另见:RaycastHit)。
maxDistance 光线应检查碰撞的最大距离。
如果要使用图层,则需要一个额外的参数:
layerMask 一个图层蒙版,用于在投射光线时选择性地忽略碰撞器。
https://docs.unity3d.com/ScriptReference/Physics.Raycast.html
- 2 回答
- 0 关注
- 141 浏览
添加回答
举报