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;
            }
        }
    }
  • 相关阅读:
    操作 Java 数组的 12 个最佳方法
    详解 JavaScript 中 splice() 方法
    Java 读取 .properties 配置文件的几种方式
    表单中单选、多选、选择框值的获取及表单的序列化
    一个调出上下文菜单的实例
    跨浏览器的事件侦听器和事件对象
    动态加载js和css
    php语言实现的7种基本的排序方法
    CORS(跨源资源共享)实战
    ubuntu中LAMP环境搭建及ubuntu语言和输入法设置
  • 原文地址:https://www.cnblogs.com/sy-liu/p/13971042.html
Copyright © 2011-2022 走看看