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;
            }
        }
    }
  • 相关阅读:
    PHP设计模式
    PHP设计模式
    PHP 23种设计模式
    MySQL 中的共享锁和排他锁的用法
    PHP_MySQL高并发加锁事务处理
    Connection: close和Connection: keep-alive有什么区别
    罗辑思维首席架构师:Go微服务改造实践
    真诚与尊重是技术团队的管理要点
    10种常见的软件架构模式
    百亿级微信红包的高并发资金交易系统设计方案
  • 原文地址:https://www.cnblogs.com/sy-liu/p/13971042.html
Copyright © 2011-2022 走看看