unity實現拖拽
阿新 • • 發佈:2019-02-10
using System.Collections; using UnityEngine; public class king : MonoBehaviour { // Use this for initialization void Start () { } // Update is called once per frame void Update () { } //下面的函式是當滑鼠觸碰到碰撞體或者剛體時呼叫,我的碰撞體設定是mesh collider,然後別忘了,給這個collider新增物理材質 //值得注意的是世界座標系轉化為螢幕座標系,Z軸是不變的 IEnumerator OnMouseDown() { //將物體由世界座標系轉化為螢幕座標系 ,由vector3 結構體變數ScreenSpace儲存,以用來明確螢幕座標系Z軸的位置 Vector3 ScreenSpace = Camera.main.WorldToScreenPoint(transform.position); //完成了兩個步驟,1由於滑鼠的座標系是2維的,需要轉化成3維的世界座標系,2只有三維的情況下才能來計算滑鼠位置與物體的距離,offset即是距離 Vector3 offset = transform.position-Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x,Input.mousePosition.y,ScreenSpace.z)); Debug.Log("down"); //當滑鼠左鍵按下時 while(Input.GetMouseButton(0)) { //得到現在滑鼠的2維座標系位置 Vector3 curScreenSpace = new Vector3(Input.mousePosition.x,Input.mousePosition.y,ScreenSpace.z); //將當前滑鼠的2維位置轉化成三維的位置,再加上滑鼠的移動量 Vector3 CurPosition = Camera.main.ScreenToWorldPoint(curScreenSpace)+offset; //CurPosition就是物體應該的移動向量賦給transform的position屬性 transform.position = CurPosition; //這個很主要 yield return new WaitForFixedUpdate(); } } }