Unity摄像机跟随

在Unity中摄像机跟随游戏对象移动一般有下列几种方式:

 

①.把摄像机设成player的子物体; 一般不推荐这种用法;

②.通过脚本获取玩家的位置,然后让摄像头跟随移动;

 1 using System.Collections;
 2 using System.Collections.Generic;
 3 using UnityEngine;
 4 public class CameraMoveScript:MonoBehaviour{
 5         
 6        public float distanceX;     //X轴
 7        public float distanceY;     //Y轴
 8        public float speed;         //速度
 9         
10        private Vector3 targetPosition;    // 摄像头要移动的位置;
11        private Vector3 offset;     //用于接受向量;
12       
13        Transform player;   // 玩家,被跟随者;
14        
15     void Start(){
16        player=GameObject.FindWithTag("Player").transfrom;      //  通过被标签找到被跟随者;
17        // 得到当前场景中摄像头需要跟随物体的偏移量(向量);
18        offset=transform.position-player.position;     //  摄像头位置-玩家位置,得到向量;
19        
20        }
21        // 摄像头跟随的代码必须写在LateUpdate中,防止空帧;  因为要先player先动,等player动了以后,摄像头跟随移动;
22     void LateUpdate(){
23        //  因为摄像头是在player背后,所以用减法得到摄像头的位置;
24        transformPosition=player.position+Vector3.up*distanceY-Vector3.forward*distanceX;
25        
26        //  利用Lerp线性插值来实现缓动;
27        transform.position=Vector3.Lerp(transform.position,targetPosition,Time.deltaTime*speed);
28        //  让摄像头一直盯着玩家;
29        transform.LookAt(player);
30        //  玩家位置+偏移量;
31        transform.position=player.position+offset;
32        }
33 }

可以将上述代码进行合并这样代码显得跟加的简洁:

 1 using System.Collections;
 2 using System.Collections.Generic;
 3 using UnityEngine;
 4 public class CameraMoveScript:MonoBehaviour{
 5         
 6        public float distanceX;     //X轴
 7        public float distanceY;     //Y轴
 8        public float speed;         //速度
 9         
10        private Vector3 targetPosition;    // 摄像头要移动的位置;
11        private Vector3 offset;     //用于接受向量;
12       
13        Transform player;   // 玩家,被跟随者;
14        
15     void Start(){
16        player=GameObject.FindWithTag("Player").transfrom;      //  通过被标签找到被跟随者;
17        // 得到当前场景中摄像头需要跟随物体的偏移量(向量);
18        offset=transform.position-player.position;     //  摄像头位置-玩家位置,得到向量;
19        
20        }
21        // 摄像头跟随的代码必须写在LateUpdate中,防止空帧;  因为要先player先动,等player动了以后,摄像头跟随移动;
22 
23     void LateUpdate(){
24              // 通过Lerp线性插值来设置摄像头的缓动;
25              transform.position=Vector3.Lerp(transform.position,player.position+offset,Time.deltaTime*speed); // 可以不用speed来设置速度,直接跟定死;
26              transform.LooAt(player);
27        }
28 }
29   

 

posted @ 2017-04-17 16:57  不思量自难忘  阅读(969)  评论(0编辑  收藏  举报