unity3d簡單的相機跟隨及視野旋轉縮放


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     }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM