• 相机跟随的方式- 通过键盘控制相机旋转


    创建4个空物体,将相机放到最子层

    1:y控制左右旋转

    2:z控制上下旋转

    3:照着主角

    4:z修改相机缩放

    主相机用来做震动之类的其他功能

    下边的脚本添加到 1 上.

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class CameraCtrl : MonoBehaviour {
    
        [SerializeField]
        Transform CameraUpAndDown;
        [SerializeField]
        Transform CameraZoonContainer;
        [SerializeField]
        Transform CameraContainer;
    
        public static CameraCtrl _instance;
    
    
        void Awake() {
            _instance = this;
            Init();
        }
    
        void Init()
        {
            CameraUpAndDown.localEulerAngles = new Vector3(0, 0, Mathf.Clamp(CameraUpAndDown.localEulerAngles.z, 35, 80));
        }
        /// <summary>
        /// 设置摄像机旋转
        /// </summary>
        /// <param name="type">0=左 1=右</param>
        public void SetCameraRotate(int type)
        {
            transform.Rotate(0, 100 * Time.deltaTime * (type == 0 ? -1 : 1), 0);
        }
    
        /// <summary>
        /// 设置摄像机上下
        /// </summary>
        /// <param name="type">0=上,1=下</param>
        public void SetCameraUpAndDown(int type)
        {
            CameraUpAndDown.Rotate(0, 0, Time.deltaTime * 30 * (type == 0 ? -1 : 1));
            CameraUpAndDown.localEulerAngles = new Vector3(0, 0, Mathf.Clamp(CameraUpAndDown.localEulerAngles.z, 1, 40));
        }
    
        /// <summary>
        /// 设置摄像机缩放
        /// </summary>
        /// <param name="type">0=拉近,1=拉远</param>
        public void SetCamerZoon(int type)
        {
            CameraContainer.Translate(new Vector3(0,0,Time.deltaTime * 5*(type ==0?-1:1)));
            CameraContainer.transform.localPosition = new Vector3(0, 0, Mathf.Clamp(CameraContainer.transform.localPosition.z, -5, 0));
        }
    
    
        public void AutoLookAt(Vector3 pos)
        {
            CameraZoonContainer.LookAt(pos);
        }
    }

    这个方法可以添加到主角上,在Update中调用

    void AutoFllow()
        {
    
            CameraCtrl._instance.transform.position = transform.position;
            CameraCtrl._instance.AutoLookAt(transform.position);
    
            if (Input.GetKey(KeyCode.A))
            {
                CameraCtrl._instance.SetCameraRotate(0);
            }
            else if (Input.GetKey(KeyCode.D))
            {
                CameraCtrl._instance.SetCameraRotate(1);
            }
            else if (Input.GetKey(KeyCode.W))
            {
                CameraCtrl._instance.SetCameraUpAndDown(0);
            }
            else if (Input.GetKey(KeyCode.S))
            {
                CameraCtrl._instance.SetCameraUpAndDown(1);
            }
            else if (Input.GetKey(KeyCode.Q))
            {
                CameraCtrl._instance.SetCamerZoon(0);
            }
            else if (Input.GetKey(KeyCode.E))
            {
                CameraCtrl._instance.SetCamerZoon(1);
            }
        }
    本博客所有内容均为原创,转载请注明出处.
  • 相关阅读:
    Mongdb 简单增删改查
    mongdb的安装
    VO,DO,DTO,PO,POJO,EJB
    JavaScript是如何工作的:事件循环和异步编程的崛起+ 5种使用 async/await 更好地编码方式!
    判断DataTale中判断某个字段中包含某个数据
    查询表中某个字段的值出现次数大于1的数据
    判断对象数组中是否含有某个对象。
    C# datatable 重新排序
    jquery 验证大于0的整数
    jQuery 心跳请求
  • 原文地址:https://www.cnblogs.com/what-lee/p/9333763.html
Copyright © 2020-2023  润新知