zoukankan      html  css  js  c++  java
  • 镜头跟随玩家移动

    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;
            }
          
        }   
    }
  • 相关阅读:
    dubbo+zookeeper注册服务报错问题:No service registed on zookeeper
    悲观锁和乐观锁的区别,它们是怎么实现
    cookie和session的区别,分布式环境怎么保存用户状态
    深入理解Java接口和抽象类
    Java中堆内存和栈内存详解
    Java基础梳理(一)
    Spring的@Transactional注解详细用法
    SpringBoot学习笔记(一)基础
    项目实体类使用@Data注解,但是项目业务类中使用getA(),setA()方法报错,eclipse中配置lombok
    有依赖的背包问题-购物单
  • 原文地址:https://www.cnblogs.com/rongweijun/p/6379770.html
Copyright © 2011-2022 走看看