1. 程式人生 > >Unity 實現手遊裡面滑輪搖桿控制移動

Unity 實現手遊裡面滑輪搖桿控制移動

很多手遊裡面都有一個滑輪控制人物移動

我前段時間也研究了一下

下面附上原始碼,因為有註釋我就不多說什麼了

原始碼:



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;

        }

    }

}