1、實現相機跟隨主角運動
一種簡單的方法是把Camera直接拖到Player下面作為Player的子物體,另一種方法是取得Camera與Player的偏移向量,並據此設置Camera位置,便能實現簡單的相機跟隨了。
這里我們選取第二種方法,首先給Camera添加一個腳本,取名為FollowPlayer,腳本很簡單不做說明了
1 public class FollowPlayer : MonoBehaviour { 2 3 private Transform player; 4 private Vector3 offsetPosition; 5 6 // Use this for initialization 7 void Start () { 8 player = GameObject.FindGameObjectWithTag(“Player”).transform; 9 offsetPosition = transform.position - player.position; 10 transform.LookAt(player.position); 11 } 12 13 // Update is called once per frame 14 void Update () { 15 transform.position = offsetPosition + player.position; 16 17 }
2、視野的縮放
鼠標滾輪向前拉近視野,向后視野變遠。原理是設置一個變量distance為偏移向量的模,鼠標滾輪滑動改變distance的值,然后根據distance設置Camera的位置
其中scrollSpeed為定義的一個float變量用於調整縮放的速度
1 private float distance; 2 3 private void ScrollView() 4 { 5 distance = offsetPosition.magnitude; 6 //向前滑動拉近 向后滑動拉遠 7 distance -= Input.GetAxis("Mouse ScrollWheel") * scrollSpeed; 8 distance = Mathf.Clamp(distance, MinDistance, MaxDistance); 9 offsetPosition = offsetPosition.normalized * distance; 10 } 11 12 //然后在Update里面調用ScrollView方法
3、視野旋轉
采用transform.RotateAround方法,讓Camera根據Player的位置旋轉
1 private void RotateView() 2 { 3 //鼠標右鍵按下可以旋轉視野 4 if (Input.GetMouseButtonDown(1)) 5 isRotating = true; 6 if (Input.GetMouseButtonUp(1)) 7 isRotating = false; 8 9 if (isRotating) 10 { 11 Vector3 originalPosition = transform.position; 12 Quaternion originalRotation = transform.rotation; 13 transform.RotateAround(player.position, player.up, rotateSpeed * Input.GetAxis("Mouse X")); 14 transform.RotateAround(player.position, transform.right, -rotateSpeed * Input.GetAxis("Mouse Y")); 15 float x = transform.eulerAngles.x; 16 //旋轉的范圍為10度到80度 17 if (x < 10 || x > 80) 18 { 19 transform.position = originalPosition; 20 transform.rotation = originalRotation; 21 } 22 23 } 24 25 offsetPosition = transform.position - player.position; 26 }