如何使2D精灵在垂直于相机的同时朝特定点旋转?

时间:2018-03-30 01:20:43

标签: c# unity3d rotation quaternions

所以我正在创建一个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不起作用。非常感谢。

2 个答案:

答案 0 :(得分:1)

如果您不想单独旋转蠕虫以面向目标,我将假设您只希望它在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;

以下是面向球的立方体行为的示例。

E1

E2

E3

答案 1 :(得分:0)

当我在团结中进行游戏开发时,我遇到了同样的问题。您无法使用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