根据对象Unity3D周围的鼠标位置旋转相机

时间:2015-02-08 18:16:29

标签: unity3d

好的,我到目前为止:

public class CameraScript : MonoBehaviour {

public void RotateCamera()
    {
        float x = 5 * Input.GetAxis("Mouse X");
        float y = 5 * -Input.GetAxis("Mouse Y");
        Camera.mainCamera.transform.parent.transform.Rotate (y,x,0);
    }

}

我的相机有一个父母,我根据鼠标位置旋转。唯一的问题是我只能用鼠标滑动来旋转对象。如果我只是单击对象旁边的,如何根据鼠标位置旋转我的相机附加的对象。提前谢谢!

1 个答案:

答案 0 :(得分:2)

  

键盘和操纵杆输入的值将在-1 ... 1范围内。   如果轴设置为delta鼠标移动,则鼠标delta为   乘以轴灵敏度,范围不是-1 ... 1。 Unity Document

注意:此link有用,请查看。

所以你需要改变这样的代码。

public void RotateCamera()
{
    Vector3 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition); // Gets mouse position to Unity World coordinate system
    Camera.mainCamera.transform.parent.transform.Rotate (mousePosition);
}

如果有问题你可以这样做

public void RotateCamera()
{
    Vector3 position = new Vector3(Input.mousePosition.x, Input.mousePosition.y,0);
    Vector3 mousePosition = Camera.main.ScreenToWorldPoint(position); // Gets mouse position to Unity World coordinate system
    Camera.mainCamera.transform.parent.transform.Rotate (mousePosition);
}

另外一个选项是rotateTowards

public float speed=10; //any value > 0
public void RotateCamera()
{
    Vector3 targetDir = Camera.main.ScreenToWorldPoint(Input.mousePosition) - Camera.mainCamera.transform.parent.transform.position;
    float step = speed * Time.deltaTime;
    Vector3 newDir = Vector3.RotateTowards(transform.forward, targetDir, step, 0.0F);
    Camera.mainCamera.transform.parent.transform.rotation =  Quaternion.LookRotation(newDir);
}

也许有些语法错误,我不会检查它们。