【发布时间】:2021-01-23 09:46:01
【问题描述】:
我正在制作一个太空探索游戏,我试图让一个箭头围绕玩家旋转,指向关卡中心的太阳。这是为了让游戏更具可读性。 “箭头”现在只是一个带有球体的圆柱体 - 球体代表箭头点。围绕玩家的旋转是有效的,但我无法让它始终指向太阳。如此处的图片所示,箭头指向的方向几乎与我想要的方向相反。
我使用的代码如下
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) 等。 希望一些聪明的头脑可以提供帮助。提前致谢。
【问题讨论】:
-
Transform.LookAt 将对象的 Z 轴朝向目标旋转。你能显示箭头的世界坐标和局部坐标吗?
-
好的,这可以解释很多。我的游戏中没有使用 z 轴。要上传图片
-
箭头的坐标取决于玩家的坐标。箭头始终位于玩家和太阳“之间”。 Z轴始终为0
-
您可以将圆柱体和球体对象编辑为沿箭头的 +z 轴。
标签: c# unity3d quaternions raycasting