zoukankan      html  css  js  c++  java
  • 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;
            }
        }
    }
  • 相关阅读:
    使用FolderBrowserDialog组件选择文件夹
    使用OpenFileDialog组件打开多个文
    使用OpenFileDialog组件打开对话框
    获取弹出对话框的相关返回值
    PAT 甲级 1139 First Contact (30 分)
    PAT 甲级 1139 First Contact (30 分)
    PAT 甲级 1138 Postorder Traversal (25 分)
    PAT 甲级 1138 Postorder Traversal (25 分)
    PAT 甲级 1137 Final Grading (25 分)
    PAT 甲级 1137 Final Grading (25 分)
  • 原文地址:https://www.cnblogs.com/sy-liu/p/13971042.html
Copyright © 2011-2022 走看看