有没有办法仅在 Y 轴上使用 Quaternion.LookRotation() 来旋转游戏对象?
Is there a way to rotate gameobject using Quaternion.LookRotation() on Y axis only?
所以,我正在处理 Unity 项目。我有一个迫击炮,它倾向于玩家游戏对象。我想旋转它以便它跟随玩家移动。
我在更新方法中想出了这个简单的代码:
Vector3 directionToFace = _player.position - transform.position;
directionToFace.y = 0;
Debug.DrawRay(transform.position, directionToFace, Color.green); // for visualization
transform.rotation = Quaternion.LookRotation(directionToFace);
但是将 y 设置为 0 会将 x 轴的旋转限制为 0,但我希望我的迫击炮向前倾斜一点。我试过将 y 设置为许多不同的值,但两个物体之间的距离决定了迫击炮倾斜的程度。是的,我知道我可以使它成为一个空游戏对象的子对象并将脚本应用于父对象,但是如果有任何其他方法可以在我的代码中解决此问题...您的帮助将不胜感激。
我唯一的想法是计算两个游戏对象之间的距离并相应地更改 directionToFace.y 的值。但是我将不得不在检查员中获得分配给迫击炮的局部旋转,然后使用毕达哥拉斯定理计算值......但我不想折磨自己那么多:D
希望我理解你的问题!我发现可以通过在您的代码后添加这一行来使您的 gameObject 向前倾斜
transform.rotation = Quaternion.Euler(xOffset,transform.rotation.eulerAngles.y, transform.rotation.eulerAngles.z);
其中 xOffset 是您希望游戏对象倾斜的量,也可以用类似的方式为 z 添加一个显式值。
如果这不是你的意思,请告诉我。
所以,我正在处理 Unity 项目。我有一个迫击炮,它倾向于玩家游戏对象。我想旋转它以便它跟随玩家移动。 我在更新方法中想出了这个简单的代码:
Vector3 directionToFace = _player.position - transform.position;
directionToFace.y = 0;
Debug.DrawRay(transform.position, directionToFace, Color.green); // for visualization
transform.rotation = Quaternion.LookRotation(directionToFace);
但是将 y 设置为 0 会将 x 轴的旋转限制为 0,但我希望我的迫击炮向前倾斜一点。我试过将 y 设置为许多不同的值,但两个物体之间的距离决定了迫击炮倾斜的程度。是的,我知道我可以使它成为一个空游戏对象的子对象并将脚本应用于父对象,但是如果有任何其他方法可以在我的代码中解决此问题...您的帮助将不胜感激。
我唯一的想法是计算两个游戏对象之间的距离并相应地更改 directionToFace.y 的值。但是我将不得不在检查员中获得分配给迫击炮的局部旋转,然后使用毕达哥拉斯定理计算值......但我不想折磨自己那么多:D
希望我理解你的问题!我发现可以通过在您的代码后添加这一行来使您的 gameObject 向前倾斜
transform.rotation = Quaternion.Euler(xOffset,transform.rotation.eulerAngles.y, transform.rotation.eulerAngles.z);
其中 xOffset 是您希望游戏对象倾斜的量,也可以用类似的方式为 z 添加一个显式值。
如果这不是你的意思,请告诉我。