【问题标题】:rotate Object towards another in Unity3D在 Unity3D 中将对象向另一个方向旋转
【发布时间】:2015-11-17 14:47:26
【问题描述】:

我已经从this question 获得了这个功能。我改变了旋转的符号:

 void rotateBotConnector()
{
    Vector3 diff = (player.transform.position - botConnector.transform.position).normalized;
    float rot_z = Mathf.Atan2(diff.y, diff.x) * Mathf.Rad2Deg;
    botConnector.transform.localRotation = Quaternion.Euler(0f, 0f, -(rot_z - 90f));
}

但问题是,现在我的对象在 XZ 平面上跟随玩家,但是当旋转达到一定程度时,向左或向右,对象停止向我的玩家旋转。

为了更好的理解:http://imgur.com/vWaqc31

【问题讨论】:

  • 您是在 2D 还是 3D 中尝试这样做?
  • “物体停止向我的玩家旋转”到底是什么意思?我不明白
  • imgur.com/vWaqc31我的意思是这样,我只想在z轴上旋转我的对象
  • 您不需要从最后一行删除-90f 吗?而不是.....Quaternion.Euler(0f, 0f, -(rot_z - 90f)); 这个Quaternion.Euler(0f, 0f, -(rot_z));

标签: unity3d rotation quaternions


【解决方案1】:

为什么不直接使用:

var target : Transform;

transform.LookAt(Vector3(target.transform.position.x, target.transform.position.y, transform.position.z);

这似乎比使用 euler 容易得多。这样,您可以查看目标的 x 和 y,但要转换您的 z。

我也不是欧拉方面的专家,但它似乎仅限于 90 度转弯,我认为这可能是原因:

Quaternion.Euler(0f, 0f, -(rot_z - 90f));

【讨论】:

  • 谢谢,在我修复了从搅拌机到统一的旋转之后,这很有效
  • 没问题!顺便说一句,我是从answers.unity3d.com/questions/232753/… 那里得到的。简单的谷歌搜索“transform.LookAt 问题”。
【解决方案2】:

除非您绝对需要通过角度旋转,否则您可能更愿意操纵对象的前向矢量,这样更容易理解逻辑:

void rotateBotConnector()
{
    Vector3 targetForwad = botConnector.transform.position - player.transform.position;
    targetForward.y= 0f;
    targetForward.Normalize(); // <-- this is very expensive function try avoid using it whenever possible
    botConnector.forward = Vector3.Lerp(botConnector.forward, targetForward, Time.deltaTime));
}

再一次,如果您的 CPU 周期不足,您可能想尝试计算角度而不是矢量。但在大多数情况下,这是可以的。 (代码需要拼写检查)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 2021-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多