【问题标题】:Unity camera rotationunity 相机旋转
【发布时间】:2014-05-27 12:47:26
【问题描述】:

我的场景中有一台摄像机,我正在使用第三方设备进行控制。如果我旋转设备,将其向前倾斜等,我的相机会复制相同的动作。然而,我一直在研究如何始终确保我的相机面向前方并向前移动,尽管它的 Y 旋转。

例如,我的相机从 0,0,0 点开始,具有相同的旋转值。如果我将我的相机旋转 90 度(任一侧)并向前移动我的相机,我的视图现在会向一侧移动。我怎样才能得到它,以便我的相机所面对的地方就是我的前进方向?

到目前为止,这是我的代码:

private void MoveForward()
{
    Debug.Log("yaw: " + yaw + " pitch: " + pitch + " roll: " + roll);

    if( pitch > maxPitch.x && pitch < maxPitch.y && reversePitch == false) 
    {
        camera.rigidbody.AddForce(0, 0,-pitch);
    //  camera.transform.position += new Vector3(0,0, -pitch);
    }
    else if ( pitch > maxPitch.x && pitch < maxPitch.y && reversePitch == true)
    {
        camera.rigidbody.AddForce(0, 0, pitch);
    //  camera.transform.position += new Vector3(0,0, pitch);
    }
    else
    {
        camera.rigidbody.velocity = Vector3.zero;
    //  camera.transform.position = new Vector3(0,0,0);
    }
}

private void MoveSideways()
{
    if( roll > maxRoll.x && roll < maxRoll.y && reverseRoll == false)
    {
        camera.rigidbody.AddForce( roll, 0, 0);

    }
    else if ( roll < maxRoll.x && roll > maxRollNegative && reverseRoll == false)
    {
        camera.rigidbody.AddForce( roll, 0 ,0);
    }
    else if( roll > maxRoll.x && roll < maxRoll.y && reverseRoll == true)
    {
        camera.rigidbody.AddForce( -roll, 0, 0);
    }
    else if ( roll < maxRoll.x && roll > maxRollNegative && reverseRoll == true)
    {
        camera.rigidbody.AddForce( -roll, 0 ,0);
    }
    else
    {
        camera.rigidbody.velocity = Vector3.zero;
    }
}


private void RotateAround()
{
    if(reverseYaw == true)
    {
        target = Quaternion.Euler(0, yaw,0);
    }
    else
    {
        target = Quaternion.Euler(0, -yaw,0);
    }

    transform.rotation = Quaternion.Slerp(camera.transform.rotation, target, Time.time *rotationSpeed);

}

【问题讨论】:

    标签: c# camera rotation unity3d


    【解决方案1】:

    发生这种情况是因为Rigidbody.AddForce 采用了世界空间向量,但您却给了它一个局部空间向量。使用Transform.TransformDirection 将向量从本地空间转换为世界空间。

    Vector3 force = transform.TransformDirection(0, 0, pitch);
    camera.rigidbody.AddForce(force);
    

    【讨论】:

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