• CameraControl


    using UnityEngine;
    using System.Collections;
    using System.Collections.Generic;
    
    public class CameraControl : MonoBehaviour
    {
        public Transform center;
        private Vector3 Center;
    
        //ScrollWheel
        private int MouseWheelSensitivity = 2;
        private int MouseZoomMin = 1;         
        private int MouseZoomMax = 200;         
        public float normalDistance = 6;     
        private Vector3 normalized;
        private Vector3 temp = new Vector3(0,0,0);
    
        //Rotation
        private float xSpeed = 250.0f;
        private float ySpeed = 120.0f;
        private int yMinLimit = 0;
        private int yMaxLimit = 80;
        public bool needDamping = false; //调整摄像机
        private float damping = 5.0f;
    
        private float x = 0.0f;
        private float y = 0.0f;
    
        private float movingSpeed = 0.5f;
    
        private Quaternion rotation = Quaternion.Euler(new Vector3(30f, 0f, 0f));
     
        void Start()
        {
            Center = center.position;
    
            float z = center.transform.position.z - normalDistance;
            //transform.position = rotation * new Vector3(transform.position.x, transform.position.y, z);
            transform.LookAt(center);
    
            var angles = transform.eulerAngles;
            x = angles.y;
            y = angles.x;
        }
    
        void LateUpdate()
        {
            Center = center.position;
            //左键旋转
            if (Input.GetMouseButton(0)) RotationCamera();
            //滚轮缩放
            else if (Input.GetAxis("Mouse ScrollWheel") != 0) MouseWheel();
            //中键平移
            //else if (Input.GetMouseButton(2)) HVMoveCamera();
        }
         float ClampAngle(float angle, float min, float max)
        {
            if (angle < -360)
                angle += 360;
            if (angle > 360)
                angle -= 360;
            return Mathf.Clamp(angle, min, max);
        }
         public void RotationCamera()
        {
            x += Input.GetAxis("Mouse X") * xSpeed * 0.02f;
            y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02f;
    
            y = ClampAngle(y, yMinLimit, yMaxLimit);
    
            var rotation = Quaternion.Euler(y, x, 0);
            var position = rotation * new Vector3(0.0f, 0.0f, -normalDistance) + Center;
            if (needDamping)
            {
                transform.rotation = Quaternion.Lerp(transform.rotation, rotation, Time.deltaTime * damping);
                transform.position = Vector3.Lerp(transform.position, position, Time.deltaTime * damping);
            }
            else
            {
                transform.rotation = rotation;
                transform.position = position;
            }  
        }
         public void MouseWheel()
         {
             normalized = (Center - transform.position).normalized;
             if (normalDistance >= MouseZoomMin && normalDistance <= MouseZoomMax)
             {
                 normalDistance -= Input.GetAxis("Mouse ScrollWheel") * MouseWheelSensitivity;
                 temp = Input.GetAxis("Mouse ScrollWheel") * MouseWheelSensitivity * normalized;
             }
             if (normalDistance < MouseZoomMin)
             {
                 normalDistance = MouseZoomMin;
                 temp.Set(0, 0, 0);
             }
             if (normalDistance > MouseZoomMax)
             {
                 normalDistance = MouseZoomMax;
                 temp.Set(0, 0, 0);
             }
             transform.position += temp;
         }
         public void HVMoveCamera()
         {
             x = Input.GetAxis("Mouse X") * movingSpeed;
             y = Input.GetAxis("Mouse Y") * movingSpeed;
             rotation = Quaternion.Euler(0, transform.rotation.eulerAngles.y, 0);
             transform.position = rotation * new Vector3(x, 0, y) + transform.position;
         }
        //模拟单击事件
         public void TranslateCamera(Vector3 cen)
         {
             x = cen.x;
             y = cen.y;
             y = ClampAngle(y, yMinLimit, yMaxLimit);
    
             var rotation = Quaternion.Euler(y, x, 0);
             var position = rotation * new Vector3(0.0f, 0.0f, -normalDistance) + Center;
             if (needDamping)
             {
                 transform.rotation = Quaternion.Lerp(transform.rotation, rotation, Time.deltaTime * damping);
                 transform.position = Vector3.Lerp(transform.position, position, Time.deltaTime * damping);
             }
             else
             {
                 transform.rotation = rotation;
                 transform.position = position;
             }  
         }
    }
  • 相关阅读:
    前端笔记-css sprite,font+html,font+css
    Python基础教程(第2版•修订版)代码清单2-3 勘误
    Python基础教程(第2版•修订版)代码清单2-3 勘误
    程序员健康Tips
    程序员健康Tips
    WAMP安装,期间提示丢失VCRUNTIME140.dll
    WAMP安装,期间提示丢失VCRUNTIME140.dll
    安装Vmware时竟然也会报错,错误信息见图
    安装Vmware时竟然也会报错,错误信息见图
    无符号数tips
  • 原文地址:https://www.cnblogs.com/greyhh/p/6736835.html
Copyright © 2020-2023  润新知