• unity 调整摄像机视角完整脚本


     脚本作为组件挂在摄像机上即可,调用接口开关IsControlMove,控制是否启用;

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.EventSystems;
    
    public class CameraMove : MonoBehaviour {
    
        //public Transform target;
        public Vector3 target;
        private Vector3 offset;
        private bool IsControlMove; 
        private Vector3 _position = Vector3.zero;
        private Quaternion _rotation = Quaternion.identity;
        private float _xAngles = 0.0f;
        private float _yAngles = 0.0f; 
        private float m_xAngles = 0.0f;
        private float m_yAngles = 0.0f;     
        private float m_xSpeed = 100f;
        private float m_ySpeed = 100f;
        //Limit
        private float m_xMinValue = -15f; 
        private float m_xMaxValue = 15;
        private float m_yMinValue = -15;
        private float m_yMaxValue = 15;
        private float m_limitChangeTime = 3.0f;
    	void Awake ()
    	{ 
            //Init
            Vector3 myCameraAngles = transform.eulerAngles;
    	    _xAngles = myCameraAngles.y;
    	    _yAngles = myCameraAngles.x;
            _position = transform.position;
            _rotation = transform.rotation;
            m_xAngles = myCameraAngles.y;
            m_yAngles = myCameraAngles.x;
    	    offset = transform.position - target;
    	}
        void LateUpdate () {
            if (IsControlMove)
            { 
                if (Application.platform == RuntimePlatform.WindowsEditor)
                { 
                    if (Input.GetMouseButton(0) && !EventSystem.current.IsPointerOverGameObject())
                    {
                        CameraChange();
                    }
                    if (Input.GetMouseButtonUp(0))
                    {
                        InitDataOfCamera();
                    }
                }
                else if (Application.platform == RuntimePlatform.Android ||
                         Application.platform == RuntimePlatform.IPhonePlayer)
                {
                    if (Input.touchCount == 1)
                    {
                        if (Input.touches[0].phase == TouchPhase.Moved)
                        {
                            //Move
                            CameraChange();
                        }
                    }
                    if (Input.touches[0].phase == TouchPhase.Ended && Input.touches[0].phase != TouchPhase.Canceled)
                    {
                        InitDataOfCamera();
                    }
                }
            }
    	}
        public void CameraChange()
        {
            m_xAngles -= Input.GetAxis("Mouse X") * m_xSpeed * 0.02f;
            m_xAngles = Mathf.Clamp(m_xAngles, m_xMinValue, m_xMaxValue);
            m_yAngles += Input.GetAxis("Mouse Y") * m_ySpeed * 0.02f;
            m_yAngles = Mathf.Clamp(m_yAngles, m_yMinValue, m_yMaxValue);
            var rotation = Quaternion.Euler(m_yAngles, m_xAngles, 0);
            Vector3 position = rotation * offset + target;
            transform.rotation = rotation;
            transform.position = position;
        }
        /// <summary>
        /// Init Data
        /// </summary>
         public void InitDataOfCamera()
        {
            m_xAngles = _xAngles;
            m_yAngles = _yAngles;
            transform.position = Vector3.Lerp(transform.position, _position, m_limitChangeTime);
            transform.rotation = Quaternion.Slerp(transform.rotation, _rotation, m_limitChangeTime);
        }
        public void OnCameraControl(bool value)
        {
            IsControlMove = value;
        }
    }
    

      

    不积跬步,无以至千里;不积小流,无以成江海。
  • 相关阅读:
    第五章 面向方面编程___通知类型
    从 C++ 到ObjectiveC
    iPhone/Mac ObjectiveC内存管理教程和原理剖析(三)@property (retain)和@synthesize的默认实现
    两个操作字符串的方法:读取指定位置的字符和找出某个字符串的位置
    SQLITE3使用总结
    iphone中如何进行多线程编程
    sqlite数据库在IOS中的运用
    重载、覆盖、隐藏
    (转)c/c++ 内存管理
    iPhone/Mac ObjectiveC内存管理教程和原理剖析(四)系统自动创建新的autorelease pool
  • 原文地址:https://www.cnblogs.com/allyh/p/8996695.html
Copyright © 2020-2023  润新知