• unity摄像机脚本


    直接挂载在摄像机上面即可

    1.摄像机自由平移

    using UnityEngine;
    using System.Collections;
    
    /// <summary>
    /// 摄像机视角自由移动
    /// </summary>
    public class CameraFreeMove : MonoBehaviour
    {
        public float moveSpeed = 10; // 设置相机移动速度    
        void Update()
        {
            // 当按住鼠标右键的时候    
            if (Input.GetMouseButton(0))
            {
                // 获取鼠标的x和y的值,乘以速度和Time.deltaTime是因为这个可以是运动起来更平滑    
                float h = Input.GetAxis("Mouse X") * moveSpeed * Time.deltaTime;
                float v = Input.GetAxis("Mouse Y") * moveSpeed * Time.deltaTime;
                // 设置当前摄像机移动,y轴并不改变    
                // 需要摄像机按照世界坐标移动,而不是按照它自身的坐标移动,所以加上Spance.World  
                this.transform.Translate(v, 0, -h, Space.World);
            }
        }
    }

    2.使用鼠标滚轮和双指触摸进行缩放

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class CameraZoom : MonoBehaviour {
    
        public float maxDistance;//最大距离
        public float minDistance;//最小距离
        public float scaleSpeed;//缩放速度
        public float mouseSpeed;//缩放速度
        private Touch oldTouch1;  //上次触摸点1(手指1)  
        private Touch oldTouch2;  //上次触摸点2(手指2)  
    
        // Use this for initialization
        void Start () {
            //FairyGUI.GObject a;
            //a.visible = false;
        }
        
        // Update is called once per frame
        void Update () {
            ZoomCamera();
            MouseZoomCamera();
        }
    
        /// <summary>
        /// 手势屏幕缩放
        /// </summary>
        private void ZoomCamera()
        {
            //至少得要2个触摸点 
            if (Input.touchCount < 2)
            {
                return;
            }
    
            //多点触摸, 放大缩小  
            Touch newTouch1 = Input.GetTouch(0);
            Touch newTouch2 = Input.GetTouch(1);
    
            //第2点刚开始接触屏幕, 只记录,不做处理  
            if (newTouch2.phase == TouchPhase.Began)
            {
                oldTouch2 = newTouch2;
                oldTouch1 = newTouch1;
                return;
            }
    
            //计算老的两点距离和新的两点间距离,变大要放大模型,变小要缩放模型  
            float oldDistance = Vector2.Distance(oldTouch1.position, oldTouch2.position);
            float newDistance = Vector2.Distance(newTouch1.position, newTouch2.position);
    
            //两个距离之差,为正表示放大手势, 为负表示缩小手势  
            float offset = newDistance - oldDistance;
    
            Vector3 originalPos = transform.position;
            Quaternion originalRotation = transform.rotation;
            transform.position += offset * transform.forward * scaleSpeed * Time.deltaTime;
    
            //临时判断值
            float cameraY = transform.position.y;
            if (cameraY < minDistance || cameraY > maxDistance)
            {
                transform.position = originalPos;
                transform.rotation = originalRotation;
            }
    
            //重新计算
            cameraY = transform.position.y;
    
            //记住最新的触摸点,下次使用  
            oldTouch1 = newTouch1;
            oldTouch2 = newTouch2;
        }
    
        /// <summary>
        /// 鼠标滚轮缩放
        /// </summary>
        private void MouseZoomCamera()
        {
            //获取滚轮的值
            float mouseScroll = Input.GetAxis("Mouse ScrollWheel");
            if (Mathf.Abs(mouseScroll) > 0)
            {
                //print("hua");
                Vector3 originalPos = transform.position;
                Quaternion originalRotation = transform.rotation;
    
                transform.position += mouseScroll * transform.forward * mouseSpeed * Time.deltaTime;
                //临时判断值
                float cameraY = transform.position.y;
                if (cameraY < minDistance || cameraY > maxDistance)
                {
                    transform.position = originalPos;
                    transform.rotation = originalRotation;
                }
    
                //cameraY = transform.position.y;
                //print(distance.magnitude);
            }
        }
    }
  • 相关阅读:
    Windows下载Vim
    分享:分享几个程序员使用的网站
    分享:C语言大礼包(PDF)
    将vscode打造成强大的C/C++ IDE
    最适合做C/C++开发的IDE
    bzoj 2244
    bzoj 1492
    bzoj 3262
    bzoj 1176
    bzoj 2961
  • 原文地址:https://www.cnblogs.com/sanyejun/p/7850702.html
Copyright © 2020-2023  润新知