功能大概是這個樣子的,用鼠標的上下、左右移動來控制unity中某個物體的左右、上下轉轉柴钻。
public Camera cam;
void Update()
{
Vector3 fwd = cam.transform.forward;
fwd.Normalize();
if (Input.GetMouseButton(0))
{
Vector3 vaxis = Vector3.Cross(fwd, Vector3.right);
transform.Rotate(vaxis, -Input.GetAxis("Mouse X"), Space.World);
Vector3 haxis = Vector3.Cross(fwd, Vector3.up);
transform.Rotate(haxis, -Input.GetAxis("Mouse Y"), Space.World);
}
}
transform.Rotate()這個函數(shù)官方是這樣解釋的:
public void Rotate(Vector3 axis, float angle, Space relativeTo = Space.Self);
axis Axis to apply rotation to.
angle Degrees to rotation to apply.
relativeTo Rotation is local to object or World.
因為物體在不斷隨著鼠標的運動旋轉淮韭,所以旋轉時一定要在世界坐標中垢粮,否則我們看到的是物體繞著自身的軸轉轉。另外靠粪,我們看到的都是通過camera來看到的蜡吧,所以Rotate的第一個參數(shù)axis一定要是camera的某個軸向,左右方向的旋轉需要繞著camera的up方向占键,上下方向的旋轉需要繞著camera的right方向昔善。
這樣無論物體和camera初始的rotation是多少,都可以正確的實現(xiàn)旋轉啦畔乙。