Unity摄像机(Camera)跟随对象移动
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Unity摄像机(Camera)跟随对象移动普通跟随:
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; }
}
}。