【问题标题】:Unity3d: Rotate a gameobject towards forward vector of another gameobjectUnity3d:将游戏对象旋转到另一个游戏对象的前向向量
【发布时间】:2019-07-09 19:49:32
【问题描述】:
        BackCube.position = cameraEye.position - cameraEye.forward * 2;

        float back = cameraEye.position.z - 2f;
        BackCube.position = new Vector3(BackCube.position.x, BackCube.position.y, back);

        var lookPosBack = cameraEye.position - BackCube.position;
        lookPosBack.y = 0;
        var rotationBack = Quaternion.LookRotation(lookPosBack);
        BackCube.rotation = Quaternion.Slerp(BackCube.rotation, rotationBack, 1);

所以,我希望我的BackCubecameraEye 的前向矢量旋转。上面的代码着眼于cameraEye,而不是cameraEye 的前向向量。我希望两个指向对方的前向向量彼此相距 2 个单位。我只能控制BackCube

【问题讨论】:

  • BackCube 是游戏对象、变换还是其他东西?您的代码中有BackCube.transformBackCube.position,所以很难说。 cameraEye 怎么样?
  • 对不起!修复!两者都是Transform
  • 如果您可以使用场景编辑器安排一些您想要的结果示例,并在问题中附上一些屏幕截图,以帮助解决问题。
  • 你的解释有点令人困惑,看你的代码......我知道你希望立方体被放置在 cameraEye 的对面,它们的前向指向对方......那为什么您是否将立方体 camerEye.forward * 2f 置于 cameraEye 位置而不是置于前面?
  • 我会简单地使用BackCube.position = cameraEye.position + cameraEye.forward * 2; BackCube.LookAt(cameraEye);,而不是它们相隔2个单位并互相看着......

标签: c# unity3d vector rotation quaternions


【解决方案1】:

这行得通!

Vector3 direction = Vector3.ProjectOnPlane(cameraEye.forward, Vector3.up);


BackCube.transform.position = cameraEye.position - direction.normalized * 2;


var lookPosBack = cameraEye.position - BackCube.position;
lookPosBack.y = 0;
var rotationBack = Quaternion.LookRotation(lookPosBack);
BackCube.rotation = Quaternion.Slerp(BackCube.rotation, rotationBack, 1);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-23
    相关资源
    最近更新 更多