1 using UnityEngine;
2 using System.Collections;
3
4 /// MouseLook rotates the transform based on the mouse delta.
5 /// Minimum and Maximum values can be used to constrain the possible rotation
6
7 /// To make an FPS style character:
8 /// - Create a capsule.
9 /// - Add the MouseLook script to the capsule.
10 /// -> Set the mouse look to use LookX. (You want to only turn character but not tilt it)
11 /// - Add FPSInputController script to the capsule
12 /// -> A CharacterMotor and a CharacterController component will be automatically added.
13
14 /// - Create a camera. Make the camera a child of the capsule. Reset it's transform.
15 /// - Add a MouseLook script to the camera.
16 /// -> Set the mouse look to use LookY. (You want the camera to tilt up and down like a head. The character already turns.)
17 [AddComponentMenu("Camera-Control/Mouse Look")]
18 public class MouseLook : MonoBehaviour {
19 //3个枚举
20 // 这个表示当前控制模式,分别是
21 // MouseXAndY上下左右旋转
22 // MouseX只能左右旋转
23 // MouseY只能上下旋转
24 public enum RotationAxes { MouseXAndY = 0, MouseX = 1, MouseY = 2 }
25 public RotationAxes axes = RotationAxes.MouseXAndY;
26
27 // 这俩是左右上下旋转时候的灵敏度
28 public float sensitivityX = 15F;
29 public float sensitivityY = 15F;
30
31 // 左右旋转的最大角度
32 public float minimumX = -360F;
33 public float maximumX = 360F;
34
35 //上下旋转最大角度
36 public float minimumY = -60F;
37 public float maximumY = 60F;
38
39 float rotationY = 0F;
40
41 void Update ()
42 {
43 //如果是上下左右旋转的模式
44 if (axes == RotationAxes.MouseXAndY)
45 {
46 // 根据鼠标X轴计算摄像机 Y轴旋转角度
47 float rotationX = transform.localEulerAngles.y + Input.GetAxis("Mouse X") * sensitivityX;
48
49 // 根据鼠标Y轴计算摄像机x轴旋转角度
50 rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
51
52 // 检查上下旋转角度不超过 minimumY和maximumY
53 rotationY = Mathf.Clamp (rotationY, minimumY, maximumY);
54
55 // 设置摄像机旋转角度
56 transform.localEulerAngles = new Vector3(-rotationY, rotationX, 0);
57 }
58 else if (axes == RotationAxes.MouseX)//如果只是左右旋转
59 {
60 transform.Rotate(0, Input.GetAxis("Mouse X") * sensitivityX, 0);
61 }
62 else//如果只是上下旋转
63 {
64 rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
65 rotationY = Mathf.Clamp (rotationY, minimumY, maximumY);
66
67 transform.localEulerAngles = new Vector3(-rotationY, transform.localEulerAngles.y, 0);
68 }
69 }
70
71 void Start ()
72 {
73 // 冻结刚体的旋转功能
74 // Make the rigid body not change rotation
75 if (GetComponent<Rigidbody>())
76 GetComponent<Rigidbody>().freezeRotation = true;
77 }
78 }