普通跟隨:
using System.Collections; using UnityEngine; public class FollowCamera : MonoBehaviour { public Transform player; public Vector3 offset; public void Awake() { //攝像機和要跟蹤的對象之間的偏移量 offset = transform.position - player.position; } public void LateUpdate() { transform.position = player.position + offset; } }
如果攝像機在游戲過程中為了看到更多的場景需要拉遠攝像機則上面的代買就不適用了可以用下面的代碼:
using UnityEngine; /// <summary> /// 跟蹤角色的攝像機控制器 /// </summary> public class PlayerCamera : MonoBehaviour { [SerializeField] [Header("設定的攝像機的位置")] private Vector3 cameraInitPosition = new Vector3(0, 21.55f, -29.67f); [SerializeField] [Header("玩家初始化位置")] private Vector3 playerInitCenterPosition = new Vector3(-4, 0, -12); [SerializeField] [Header("每次放大的偏移量")] public float zoomOut = 10; [SerializeField] [Header("攝像機拉遠速度")] private float zoomOutSpeed = 0.5f; private Transform player; private bool enableFollow; private Vector3 playeroffset; private Vector3 zoomoutDirection; [HideInInspector] public float baseDistance; public void InitCamera(Transform player) { this.player = player; //由於攝像機擁有旋轉角度需要根據旋轉角度來確定拉遠的方向 zoomoutDirection = Quaternion.Euler(transform.eulerAngles) * Vector3.back; playeroffset = cameraInitPosition - playerInitCenterPosition; transform.position = player.position + playeroffset; baseDistance = Vector3.Distance(transform.position, player.position); enableFollow = true; } public void SetEnableZoomOut() { enableZoomout = true; zoomOutTotal = 0f; } private bool enableZoomout; private float zoomOutTotal; public void LateUpdate() { if (enableZoomout && zoomOutTotal < zoomOut) { zoomOutTotal += zoomOutSpeed; playeroffset += zoomoutDirection * zoomOutSpeed; if (zoomOutTotal >= zoomOut) { enableZoomout = false; zoomOutTotal = 0f; } } if (enableFollow) { transform.position = player.position + playeroffset; } } }
