• 镜头跟随玩家移动


    using UnityEngine;
    using System.Collections;
    
    /// <summary>
    /// 相机跟随玩家
    /// </summary>
    public class FollowPlayer : MonoBehaviour
    {
        private Transform player;
        private Vector3 offsetPosition;
        private float smothing = 5f;
        public float distance = 0;
        public float scrollSpeed = 2;
        private bool isRotaing=false;
        public float RorateSpeed = 1f;
        // Use this for initialization
        void Start()
        {
            player = GameObject.FindGameObjectWithTag("Player").transform;
            transform.LookAt(player);
            offsetPosition = transform.position - player.position;
        }
    
        // Update is called once per frame
        void Update()
        {
           
            Vector3 targetCampos = player.position + offsetPosition;
            //使用插值到达平滑视觉
            transform.position = Vector3.Lerp(transform.position,targetCampos,smothing*Time.deltaTime);
            //处理视野旋转
            RotateView();
            ScrollView();
        }
    
    
        /// <summary>
        /// 镜头拉近拉远
        /// </summary>
        void ScrollView()
        {
            //print(Input.GetAxis("Mouse ScrollWheel"));//向后 返回负值(拉远视野),向前返回正直(拉近视野)
            //offsetPosition.magnitude  返回向量的长度(只读)。
            distance = offsetPosition.magnitude;
            distance += Input.GetAxis("Mouse ScrollWheel")*scrollSpeed;
    
            //距离限制
            distance = Mathf.Clamp(distance,4,14);
         
            //offsetPosition.normalized  返回向量的长度为1(只读)。
            offsetPosition = offsetPosition.normalized * distance;
        }
    
        /// <summary>
        /// 旋转视角
        /// </summary>
        void RotateView()
        {
         //   Input.GetAxis("Mouse X");//得到鼠标在X水平方向滑动
         //   Input.GetAxis("Mouse Y");//得到鼠标在Y水平方向滑动
            if (Input.GetMouseButtonDown(0))
            {
                isRotaing = true;
            }
            if (Input.GetMouseButtonUp(0))
            {
                isRotaing = false;
            }
    
            if (isRotaing)
            {
                transform.RotateAround(player.position, player.up, RorateSpeed * Input.GetAxis("Mouse X"));  //左右
    
                Vector3 originalPos = transform.position;
                Quaternion originalRotation = transform.rotation;
                transform.RotateAround(player.position, transform.right, -RorateSpeed * Input.GetAxis("Mouse Y"));//上下
                float x = transform.eulerAngles.x;
                if(x<10 || x > 80)//当超出范围我们将属性 归为原来得
                {
                    transform.position = originalPos;
                    transform.rotation = originalRotation;
                }
                offsetPosition = transform.position - player.position;
            }
          
        }   
    }
  • 相关阅读:
    如何调用ActiveX网页中的JavaScript函数
    VC++开发的ActiveX如何加入安全机制,避免IE中提示“在此页上的ActiveX控件和本页上的其他部分的交互可能不安全,你想允许这种交互吗?”
    ActiveX多线程回调JavaScript
    JavaScript脚本如何访问VC++开发的ActiveX中的方法
    ActiveX异步回调JavaScript
    com/atl套间编程中如何实现定时invoke容器中的方法
    VC++开发的ActiveX如何通过JavaScript脚本和EOS应用交互
    thread wrapper
    最新Mysql中文帮助
    如何避免重复的http请求
  • 原文地址:https://www.cnblogs.com/rongweijun/p/6379770.html
Copyright © 2020-2023  润新知