Unity 5:如何在相对于相机轴的3d空间中旋转对象

时间:2015-11-25 16:42:09

标签: unity3d unity3d-5

我试图编写一个非常简单的3D模型查看器,允许用户在x和y轴上单击并拖动以旋转对象。我所包含的代码示例所面临的问题是,当我旋转某些东西时,比如关于y轴,然后尝试围绕x轴旋转,我发现对象围绕对象旋转#39 ; s x轴而不是相机视角的x轴。

我有效地尝试模拟沿z轴旋转的东西,尽管是通过两个动作。

public Transform obj;

private Vector3 screenPoint;
private Vector3 offset;

//public float minX = 270.0f;
//public float maxX = 360.0f;

//public float minY = -90.0f;
//public float maxY = 90.0f;

public float sensX = 100.0f;
public float sensY = 100.0f;

float rotationY = 0.0f;
float rotationX = 0.0f;

float posX = 0.0f;
float posY = 0.0f;

void Update() {

    if (Input.GetMouseButton(0)) {
        rotationX += Input.GetAxis("Mouse X") * sensX * Time.deltaTime;
        //rotationX = Mathf.Clamp(rotationX, minX, maxX);

        rotationY += Input.GetAxis("Mouse Y") * sensY * Time.deltaTime;
        //rotationY = Mathf.Clamp(rotationY, minY, maxY);

        Quaternion q = Quaternion.Euler(rotationY, -rotationX, 0);
        transform.rotation = q;
    }

    if (Input.GetMouseButton(1)) {
        posX += Input.GetAxis("Mouse X") * 25.0f * Time.deltaTime;
        posY += Input.GetAxis("Mouse Y") * 25.0f * Time.deltaTime;
        transform.position = new Vector3(posX, posY, 0);
    }
}

1 个答案:

答案 0 :(得分:1)

如果您想围绕z轴旋转,可以尝试使用transform.RotateAround功能。这将允许您指定一个点(作为createHash),一个旋转轴(再次作为Vector3),以及旋转的程度。此函数可以修改转换的Vector3position元素。