01 | using UnityEngine; |
02 | using System.Collections; |
03 | // 直接放在相机上,控制相机的旋转和缩放 // |
04 | public class CameraContro : MonoBehaviour { |
05 | |
06 | public Transform target; |
07 | public float xSpeed=200, ySpeed=200, mSpeed=10; |
08 | public float yMinLimit=-50, yMaxLimit=50; |
09 | public float distance=7, minDistance=2, maxDistance=30; |
10 | |
11 | //bool needDamping = false; |
12 | public bool needDamping = true ; |
13 | float damping = 5.0f; |
14 | |
15 | public float x = 0.0f; |
16 | public float y = 0.0f; |
17 | |
18 | |
19 | public void SetTarget( GameObject go ) |
20 | |
21 | |
22 | { |
23 | target = go.transform; |
24 | } |
25 | // Use this for initialization |
26 | void Start () { |
27 | Vector3 angles = transform.eulerAngles; |
28 | x = angles.y; |
29 | y = angles.x; |
30 | } |
31 | |
32 | // Update is called once per frame |
33 | void LateUpdate () |
34 | { |
35 | |
36 | |
37 | if (target) |
38 | { |
39 | //use the light button of mouse to rotate the camera |
40 | if ( Input.GetMouseButton(0) ) |
41 | { |
42 | x += Input.GetAxis( "Mouse X" ) * xSpeed * 0.02f; |
43 | y -= Input.GetAxis( "Mouse Y" ) * ySpeed * 0.02f; |
44 | |
45 | y = ClampAngle(y, yMinLimit, yMaxLimit); |
46 | |
47 | //print(Input.GetAxis("Mouse X")); |
48 | //print( Input.GetAxis("Mouse Y")); |
49 | //print(x); |
50 | //print(y); |
51 | |
52 | //<a href="http://www.unitymanual.com" target="_blank" class="relatedlink">unity3d</a>教程手册:www.unitymanual.com |
53 | } |
54 | |
55 | |
56 | distance -= Input.GetAxis( "Mouse ScrollWheel" )*mSpeed; |
57 | distance = Mathf.Clamp(distance, minDistance, maxDistance); |
58 | |
59 | |
60 | Quaternion rotation = Quaternion.Euler(y, x, 0.0f); |
61 | Vector3 disVector = new Vector3( 0.0f, 0.0f, -distance ); |
62 | Vector3 position = rotation * disVector + target.position; |
63 | //adjust the camera |
64 | if ( needDamping ) |
65 | { |
66 | transform.rotation = Quaternion.Lerp(transform.rotation, rotation, Time.deltaTime*damping); |
67 | transform.position = Vector3.Lerp(transform.position, position, Time.deltaTime*damping); |
68 | } |
69 | else |
70 | { |
71 | transform.rotation = rotation; |
72 | transform.position = position; |
73 | } |
74 | //Unity3D教程手册:www.unitymanual.com |
75 | |
76 | } |
77 | } |
78 | |
79 | static float ClampAngle ( float angle, float min, float max) |
80 | { |
81 | if (angle < -360) |
82 | angle += 360; |
83 | if (angle > 360) |
84 | angle -= 360; |
85 | return Mathf.Clamp (angle, min, max); |
86 | } |
87 | } |