溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

[Unity3d]鼠標旋轉縮放拖動模型

發布時間:2020-07-20 18:48:33 來源:網絡 閱讀:555 作者:蓬萊仙羽 欄目:游戲開發

實現鼠標旋轉拖動縮放模型,非常不錯的代碼:

using UnityEngine; using System.Collections;  public class MouseControl : MonoBehaviour {      //目標物體     public Transform target;     private int MouseWheelSensitivity = 1; //放大倍數的快慢     private int MouseZoomMin = 1; //最小倍數     private int MouseZoomMax = 5; //最大倍數     //默認距離     private float normalDistance = 3;       private Vector3 normalized;      //拖拽的移動速度     private float xSpeed = 250.0f;     private float ySpeed = 120.0f;      //拖拽的高度限制     private int yMinLimit = -20;     private int yMaxLimit = 80;      //角度     private float x = 0.0f;     private float y = 0.0f;          //記錄目標物體的坐標     private Vector3 screenPoint;     private Vector3 offset;      //圍繞x旋轉30°     private Quaternion rotation = Quaternion.Euler(new Vector3(30f, 0f, 0f));      //目標的3D坐標     private Vector3 CameraTarget;      //打印歐拉角:繞各個軸旋轉的角度,順時針為正方向     public void Awake()     {         print(transform.eulerAngles.x);         print(transform.eulerAngles.y);         print(transform.eulerAngles.z);     }      void Start()     {         //找到目標飛機的3d坐標         CameraTarget = target.position;          //目標飛機的z-3,距離攝像機更近了         float z = target.transform.position.z - normalDistance;         //給當前相機給定位,現在的3D坐標乘以30°         transform.position = rotation * new Vector3(transform.position.x, transform.position.y, z);          //將視角轉向物體         transform.LookAt(target);          //記錄各個軸偏離的角度         var angles = transform.eulerAngles;         x = angles.y;         y = angles.x;     }      void OnGUI()     {         GUI.Label(new Rect(10,10,300,30),"左擊:旋轉;滾輪:縮放;中擊:拖拽");     }      void Update()     {         //如果左擊了,旋轉         if (Input.GetMouseButton(0))         {             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) + CameraTarget;              transform.rotation = rotation;             transform.position = position;          }         //滾輪縮放         else if (Input.GetAxis("Mouse ScrollWheel") != 0)         {             //攝像機3d坐標-物體的3d坐標             normalized = (transform.position - CameraTarget).normalized;              if (normalDistance >= MouseZoomMin && normalDistance <= MouseZoomMax)             {                 normalDistance -= Input.GetAxis("Mouse ScrollWheel") * MouseWheelSensitivity;             }             if (normalDistance < MouseZoomMin)             {                 normalDistance = MouseZoomMin;             }             if (normalDistance > MouseZoomMax)             {                 normalDistance = MouseZoomMax;             }             //改變攝像機的遠近             transform.position = normalized * normalDistance;         }         //案件按下 記錄鼠標的         else if (Input.GetMouseButtonDown(2))         {             //將目標物體的坐標轉化成平面坐標             screenPoint = Camera.main.WorldToScreenPoint(target.transform.position);             //計算鼠標的3維坐標跟物體的3維坐標的差值             offset = target.transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z));         }          //中鍵拖拽,改變飛機的坐標,每幀調用         if (Input.GetMouseButton(2))         {             //鼠標的平面坐標             Vector3 curScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z);             //鼠標轉移的3d空間坐標值             Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenPoint) + offset;             //改變鼠標的3D空間坐標             target.transform.position = curPosition;         }         //朝向,每動一幀都要改變朝向         transform.LookAt(CameraTarget);     }      //控制旋轉的角度,如果旋轉的角度大于360或者小于360都要加上或者減去對應的角度     static float ClampAngle(float angle, float min, float max)     {         if (angle < -360)             angle += 360;         if (angle > 360)             angle -= 360;         return Mathf.Clamp(angle, min, max);     } }


[Unity3d]鼠標旋轉縮放拖動模型

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女