当一个游戏对象围绕移动的玩家旋转时,如何将它指向另一个游戏对象?
How do I point a gameobject towards another one, while it's rotating around a moving player?
我正在制作一个 space 探索游戏,我试图让一个箭头围绕玩家旋转,指向关卡中心的太阳。这是为了让游戏更具可读性。
“箭头”现在只是一个上面有球体的圆柱体——球体代表箭头点。围绕玩家的旋转正在发挥作用,但我无法让它始终指向太阳。如图所示,箭头指向的方向几乎与我想要的方向相反。
我使用的代码如下
playerPos = transform.position;
sunPos = sun.transform.position;
// Cast ray from player to sun
Ray ray = new Ray(playerPos, sunPos - playerPos);
RaycastHit hitInfo;
if (Physics.Raycast(ray, out hitInfo, 400, mask))
Debug.DrawLine(ray.origin, sunPos, Color.green);
Debug.Log("Distance" + hitInfo.distance);
// Rotate arrow around player.
arrow.transform.position = playerPos + ray.direction.normalized*2;
// Point arrow towards sun. This is not working
arrow.transform.rotation = Quaternion.FromToRotation(gameObject.transform.position, sunPos);
除了Quaternion.FromToRotation之外,我还尝试过使用 LookAt,这也给了我奇怪的结果。 (我尝试了所有不同的向上方向,即 LookAt(sun, Vector3.left) 和 (sun, Vector3.back) 等。
希望有聪明的头脑可以提供帮助。提前致谢。
理论
你可以使用
Quaternion.FormToRotation
它通过提供方向向量和“0”向量来创建四元数(处理游戏对象旋转的东西)。有了这些信息,它就会知道如何旋转你的变换。
例子
我会做类似的事情:
Vector3 direction = sunPos - playerPos;
transform.rotation = Quaternion.FromToRotation(direction, Vector3.right);
Vector3.right = (1f,0f,0f) 并且您应该使用箭头的标准方向。例如,如果箭头没有旋转指向上方 (0f,1f,0f),则应使用 Vector3.up insteed.
正如我在评论中所说,您不需要光线投射。 (也许您稍后在代码中需要它)
Vector3 delta = sunPos - playerPos;
Vector3 direction = delta.normalized;
float distance = delta.magnitude;
我正在制作一个 space 探索游戏,我试图让一个箭头围绕玩家旋转,指向关卡中心的太阳。这是为了让游戏更具可读性。 “箭头”现在只是一个上面有球体的圆柱体——球体代表箭头点。围绕玩家的旋转正在发挥作用,但我无法让它始终指向太阳。如图所示,箭头指向的方向几乎与我想要的方向相反。
我使用的代码如下
playerPos = transform.position;
sunPos = sun.transform.position;
// Cast ray from player to sun
Ray ray = new Ray(playerPos, sunPos - playerPos);
RaycastHit hitInfo;
if (Physics.Raycast(ray, out hitInfo, 400, mask))
Debug.DrawLine(ray.origin, sunPos, Color.green);
Debug.Log("Distance" + hitInfo.distance);
// Rotate arrow around player.
arrow.transform.position = playerPos + ray.direction.normalized*2;
// Point arrow towards sun. This is not working
arrow.transform.rotation = Quaternion.FromToRotation(gameObject.transform.position, sunPos);
除了Quaternion.FromToRotation之外,我还尝试过使用 LookAt,这也给了我奇怪的结果。 (我尝试了所有不同的向上方向,即 LookAt(sun, Vector3.left) 和 (sun, Vector3.back) 等。 希望有聪明的头脑可以提供帮助。提前致谢。
理论
你可以使用
Quaternion.FormToRotation
它通过提供方向向量和“0”向量来创建四元数(处理游戏对象旋转的东西)。有了这些信息,它就会知道如何旋转你的变换。
例子
我会做类似的事情:
Vector3 direction = sunPos - playerPos;
transform.rotation = Quaternion.FromToRotation(direction, Vector3.right);
Vector3.right = (1f,0f,0f) 并且您应该使用箭头的标准方向。例如,如果箭头没有旋转指向上方 (0f,1f,0f),则应使用 Vector3.up insteed.
正如我在评论中所说,您不需要光线投射。 (也许您稍后在代码中需要它)
Vector3 delta = sunPos - playerPos;
Vector3 direction = delta.normalized;
float distance = delta.magnitude;