如何使 2D 精灵在垂直于相机的情况下朝向特定点旋转?
How to make a 2D sprite rotate towards a specific point while facing perpendicular to the camera?
所以我正在创建一个 2D 项目。我希望我的 2D 精灵(一条蠕虫)在我的游戏平面中沿特定点(例如足球精灵)的方向旋转。我尝试使用 LookRotation
但问题是蠕虫没有垂直于相机,所以它在 2D 视图中不可见。我的游戏在X/Y位面。
我运行的时候是这样的;
Image 1(注意到蠕虫不可见了吗?)
这是3D视图;
Image 2
这是代码;
Vector3 relativePos = target.transform.position - worm.transform.position;
Quaternion rotation = Quaternion.LookRotation (relativePos);
worm.transform.rotation = rotation;
另外,改变向上的方向,比如设置为 vector3.forward
是行不通的。非常感谢。
如果您不想单独旋转蠕虫以面对目标,我会假设您只想让它在 Z 轴上旋转。我复制了你的代码,将其更改为仅跟随 Z 轴,它看起来有点像目标。我不知道这是否是您想要的行为,但如果它在此处就是代码。
Vector3 relativePos = target.transform.position - worm.transform.position;
Quaternion rotation = Quaternion.LookRotation(relativePos);
rotation.x = worm.transform.rotation.x;
rotation.y = worm.transform.rotation.y;
worm.transform.rotation = rotation;
这是一个立方体面对球的行为示例。
我在unity做游戏开发的时候遇到了同样的问题。您不能使用 3d Vector 来完成此操作。这是因为它会转向面对玩家,蠕虫会旋转 90 度,从而切入场景。
这是我通常用于自上而下游戏的代码:
var dir = WorldPos - transform.position;
var angle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg;
transform.rotation = Quaternion.AngleAxis(angle, Vector3.forward);
编辑:
我忘了提这个,但是 WorldPos
来自 ScreenToWorldPoint
所以我正在创建一个 2D 项目。我希望我的 2D 精灵(一条蠕虫)在我的游戏平面中沿特定点(例如足球精灵)的方向旋转。我尝试使用 LookRotation
但问题是蠕虫没有垂直于相机,所以它在 2D 视图中不可见。我的游戏在X/Y位面。
我运行的时候是这样的; Image 1(注意到蠕虫不可见了吗?)
这是3D视图; Image 2
这是代码;
Vector3 relativePos = target.transform.position - worm.transform.position;
Quaternion rotation = Quaternion.LookRotation (relativePos);
worm.transform.rotation = rotation;
另外,改变向上的方向,比如设置为 vector3.forward
是行不通的。非常感谢。
如果您不想单独旋转蠕虫以面对目标,我会假设您只想让它在 Z 轴上旋转。我复制了你的代码,将其更改为仅跟随 Z 轴,它看起来有点像目标。我不知道这是否是您想要的行为,但如果它在此处就是代码。
Vector3 relativePos = target.transform.position - worm.transform.position;
Quaternion rotation = Quaternion.LookRotation(relativePos);
rotation.x = worm.transform.rotation.x;
rotation.y = worm.transform.rotation.y;
worm.transform.rotation = rotation;
这是一个立方体面对球的行为示例。
我在unity做游戏开发的时候遇到了同样的问题。您不能使用 3d Vector 来完成此操作。这是因为它会转向面对玩家,蠕虫会旋转 90 度,从而切入场景。
这是我通常用于自上而下游戏的代码:
var dir = WorldPos - transform.position;
var angle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg;
transform.rotation = Quaternion.AngleAxis(angle, Vector3.forward);
编辑:
我忘了提这个,但是 WorldPos
来自 ScreenToWorldPoint