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;
            }
        }
    }
  • 相关阅读:
    windows 核心编程 第2章 U n i c o d e
    在一个类内不可以定义自身类的对象,为什么定义自身类的静态对象又是正确的
    将JPG图片绘制在对话框背景上:(这段代码绝对可以执行)
    小技巧给CEdit设置字体
    惠普 升级两年保修
    DoModal返回1,对话框不能显示,今天碰到项目在用unicode编码,和多字符编码时候出现的
    MFC 绘图
    CString类所有成员函数详解
    mysql 一些问题
    错误:不能实例化抽象类
  • 原文地址:https://www.cnblogs.com/sy-liu/p/13971042.html
Copyright © 2011-2022 走看看