Unity 實現手遊裡面滑輪搖桿控制移動
阿新 • • 發佈:2018-12-25
很多手遊裡面都有一個滑輪控制人物移動
我前段時間也研究了一下
下面附上原始碼,因為有註釋我就不多說什麼了
原始碼:
public class CoronaScripts : MonoBehaviour { 大圓 private RectTransform bigRect; 小圓 private RectTransform smallRect; 滑輪被啟用;預設沒有 private bool isActiveTrue = false; 螢幕解析度比率;這裡Canvas是根據寬來縮放的 private float biLv; 用來儲存滑鼠和大圓的距離;是一個由大圓座標指向滑鼠座標的方向向量 private Vector3 dis; void Start () { bigRect = this.transform.GetChild (0).GetComponent<RectTransform> (); smallRect = bigRect.transform.GetChild (0).GetComponent<RectTransform> (); 螢幕解析度的寬除以實際螢幕寬度 biLv = 1280f/ Screen.width; } void Update () { if (Input.GetMouseButtonDown (0)) { 輪盤在螢幕左下角佔螢幕1/4的大小範圍有效 if (Input.mousePosition.y < Screen.height / 2 && Input.mousePosition.x < Screen.width / 2) { 限制左邊和下邊的間距,是上面的1/15的長度 if (Input.mousePosition.y > Screen.height / 15 && Input.mousePosition.x > Screen.width / 15) { 滑輪當前狀態被啟用 isActiveTrue = true; 顯示滑輪 bigRect.gameObject.SetActive (true); 生成滑輪大圓的位置在滑鼠在實際螢幕的位置 bigRect.anchoredPosition = Input.mousePosition * biLv; } } } 被啟用要做的事情;控制小圓的移動 if (isActiveTrue) { 小圓的座標:等於相對於父物體大圓滑鼠的座標;等於大圓指向滑鼠的一個向量;等於滑鼠座標減去大圓座標; smallRect.anchoredPosition = Input.mousePosition * biLv - bigRect.anchoredPosition3D; 滑鼠到大圓的距離;是一個方向指向滑鼠的向量 dis = smallRect.anchoredPosition; 如果滑鼠到大圓的距離大於100 if (dis.magnitude > 100) { 將這個向量轉換成單位向量乘以一百就是小圓的位置了 dis = smallRect.anchoredPosition.normalized * 100; smallRect.anchoredPosition = dis; } } if (Input.GetMouseButtonUp (0)) { isActiveTrue = false; 滑輪隱藏 bigRect.gameObject.SetActive (false); 小圓位置歸位 smallRect.anchoredPosition = Vector2.zero; } } }