物件以相對現在角度的方式 Rotate, X 軸 及 Y 軸
#define CalculateAngle
// Calculate the angle relative to camera viewport
using UnityEngine;
using System.Collections;
public class RotateCube : MonoBehaviour
{
public float speed = 10f;
public bool flipX = false, flipY = false;
private Vector3 lastPosition;
#if CalculateAngle
public Camera camera;
void Awake()
{
camera = (camera == null) ? Camera.main : camera;
}
#endif
void OnMouseDown()
{
lastPosition = Input.mousePosition;
}
void OnMouseDrag()
{
Vector3 diff = -speed * Time.deltaTime * (Input.mousePosition - lastPosition);
diff = new Vector3((flipY?diff.y:-diff.y),(flipX?diff.x:-diff.x), 0f);
#if !CalculateAngle
transform.Rotate(diff, Space.World);
#else
Vector3 objUp = transform.InverseTransformDirection(camera.transform.TransformDirection(Vector3.up));
Vector3 objRight = transform.InverseTransformDirection(camera.transform.TransformDirection(Vector3.right));
transform.rotation *= Quaternion.AngleAxis(diff.y, objUp) * Quaternion.AngleAxis(diff.x, objRight);
#endif
lastPosition = Input.mousePosition;
}
}