資源簡介
這篇代碼主要是實現攝像機在場景中圍繞某個物體進行移動,主要是通過鼠標進行線性平移、旋轉、鏡頭的拉伸。
代碼片段和文件信息
using?UnityEngine;
using?System.Collections;
using?UnityEngine.EventSystems;
public?class?MoveCamera?:?MonoBehaviour
{
????public?static?bool?isMouseMove?=?true;
????public?static?bool?isUseEvent?=?true;
????public?static?bool?isLookDown?=?false;
????//觀察目標
????public?Transform?Target;
????//觀察距離
????public?static?float?Distance?=?100f;
????//旋轉速度
????private?float?SpeedX?=?150;
????private?float?SpeedY?=?100;
????//角度限制
????private?float?MinLimitY?=?5;
????private?float?MaxLimitY?=?180;
????public?static?Vector3?offset;
????//旋轉角度
????public?static?float?mX?=?0.0F;
????public?static?float?mY?=?0.0F;
????//鼠標縮放距離最值
????private?float?MaxDistance?=?500;
????private?float?MinDistance?=?1.5F;
????//鼠標縮放速率
????private?float?ZoomSpeed?=?20F;
????//是否啟用差值
????public?bool?isNeedDamping?=?true;
????//速度
????public?static?float?Damping?=?10F;
????//?public?float?moveSpeed?=?20f;
????public?static?Quaternion?mRotation;
????void?Start()
????{
????????//初始化旋轉角度
????????mX?=?-9.532309E-05f;
????????mY?=?26.659f;
????????offset?=?new?Vector3(12.5f?-0.8f?-26.5f);
????????mRotation?=?new?Quaternion(0.2f?0.0f?0.0f?1.0f);
????????//mX?=?51.345f;
????????//?mY?=?17.781f;
????}
????bool?IsHitUI()
????{
????????bool?res?=?true;
????????Ray?ray?=?Camera.main.ScreenPointToRay(Input.mousePosition);
????????RaycastHit?hit;
????????Debug.Log(EventSystem.current.IsPointerOverGameobject());
????????Debug.Log(Physics.Raycast(ray?out?hit));
????????if?(!Physics.Raycast(ray?out?hit)?&&?EventSystem.current.IsPointerOverGameobject())
????????{
????????????Debug.Log(hit.transform.name);
????????????if?(hit.transform.name?!=?“Rotate“?&&?hit.transform.name?!=?“Rest“)
????????????{
????????????????Debug.Log(hit.transform.name);
????????????????res?=?false;
????????????}
????????}
????????return?res;
????}
????void?LateUpdate()
????{
????????if?(isUseEvent?==?true)
????????{
????????????if?(EventSystem.current.IsPointerOverGameobject())
????????????{
????????????????return;
????????????}
????????}
????????if?(isMouseMove?==?true)
????????{
????????????//鼠標右鍵旋轉
????????????if?(Target?!=?null?&&?Input.GetMouseButton(0))
????????????{
????????????????if?(isLookDown?==?false)
????????????????{
????????????????????//獲取鼠標輸入
????????????????????mX?+=?Input.GetAxis(“Mouse?X“)?*?SpeedX?*?0.009F;
????????????????????mY?-=?Input.GetAxis(“Mouse?Y“)?*?SpeedY?*?0.009F;
????????????????????//范圍限制
????????????????????mY?=?ClampAngle(mY?MinLimitY?MaxLimitY);
????????????????????//Debug.Log(mX);
????????????????????//Debug.Log(mY);
????????????????????//計算旋轉
????????????????????//我們可以通過Quaternion.Euler()方法將一個Vector3類型的值轉化為一個四元數
????????????????????//,進而通過修改Transform.Rotation來實現相同的目的
????????????????????mRotation?=?Quaternion.Euler(mY?mX?0);
????????????????????//根據是否插值采取不同的角度計算方式
????????????????????if?(isNeedDamping)
????????????????????{
????????????????????????transform.rotation?=?Quater
評論
共有 條評論