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

Rotate camera based on mouse postitions around a object 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);
    }

}

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

The value will be in the range -1...1 for keyboard and joystick input. If the axis is setup to be delta mouse movement, the mouse delta is multiplied by the axis sensitivity and the range is not -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);
}

可能有些语法错误,我没有检查。