1,unity自身带有鼠标动画,但是效果有限,进过改进,可以实现右键点击旋转,且有一定弹性限制
2,这个脚本很实用
3,unity中劲量不要实用中文注释
1using UnityEngine; 2 3public class MouseFollowRotation : MonoBehaviour { 4 5 public Transform target; 6 public float xSpeed=200, ySpeed=200, mSpeed=10; 7 public float yMinLimit=-50, yMaxLimit=50; 8 public float distance=2, minDistance=2, maxDistance=30; 9 10 //bool needDamping = false; 11 public bool needDamping =true; 12 float damping = 5.0f; 13 14 public float x = 0.0f; 15 public float y = 0.0f; 16 17 18 public void SetTarget( GameObject go ) 19 20 21 { 22 target = go.transform; 23 } 24 // Use this for initialization 25 void Start () { 26 Vector3 angles = transform.eulerAngles; 27 x = angles.y; 28 y = angles.x; 29 } 30 31 // Update is called once per frame 32 void LateUpdate () 33 { 34 35 36 if (target) 37 { 38 //use the light button of mouse to rotate the camera 39 if( Input.GetMouseButton(1) ) 40 { 41 x += Input.GetAxis("Mouse X") * xSpeed * 0.02f; 42 y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02f; 43 44 y = ClampAngle(y, yMinLimit, yMaxLimit); 45 46 //print(Input.GetAxis("Mouse X")); 47 //print( Input.GetAxis("Mouse Y")); 48// print(x); 49// print(y); 50 } 51 52 distance -= Input.GetAxis("Mouse ScrollWheel")*mSpeed; 53 distance = Mathf.Clamp(distance, minDistance, maxDistance); 54 55 Quaternion rotation = Quaternion.Euler(y, x, 0.0f); 56 Vector3 disVector = new Vector3( 0.0f, 0.0f, -distance ); 57 Vector3 position = rotation * disVector + target.position; 58 //adjust the camera 59 if( needDamping ) 60 { 61 transform.rotation = Quaternion.Lerp(transform.rotation, rotation, Time.deltaTime*damping); 62 transform.position = Vector3.Lerp(transform.position, position, Time.deltaTime*damping); 63 } 64 else 65 { 66 transform.rotation = rotation; 67 transform.position = position; 68 } 69 70 } 71 } 72 73 static float ClampAngle (float angle, float min, float max) 74 { 75 if (angle < -360) 76 angle += 360; 77 if (angle > 360) 78 angle -= 360; 79 return Mathf.Clamp (angle, min, max); 80 } 81}