unity實現虛擬搖桿控制Virtual Joystick
阿新 • • 發佈:2020-04-16
本文例項為大家分享了unity實現虛擬搖桿控的具體程式碼,供大家參考,具體內容如下
using UnityEngine; using UnityEngine.UI; public class TouchJoystick : MonoBehaviour { public GameObject go;//需要通過虛擬搖桿控制的目標物體 public float moveSpeed = 3;//移動速度 public Image touchPoint;//搖桿軸物件 private Vector3 OriginalPos_TP;//搖桿軸的初始位置 private RectTransform rectTransform_TP;//搖桿軸的位置元件 private float radius;//搖桿軸移動的最大半徑 void Start() { radius = this.GetComponent<RectTransform>().rect.width*0.5f; rectTransform_TP = touchPoint.GetComponent<RectTransform>(); OriginalPos_TP = rectTransform_TP.position; } void Update() { //第一次觸控式螢幕幕時,整個虛擬搖桿的位置更新 if (Input.GetMouseButtonDown(0)) { this.GetComponent<RectTransform>().position = Input.mousePosition; OriginalPos_TP = rectTransform_TP.position; } if (Input.GetMouseButton(0)) { //取得觸控點與虛擬軸初始點的距離 float distance = Vector3.Distance(Input.mousePosition,OriginalPos_TP); //取得一個初始軸點指向觸控點的向量 Vector3 pos = Input.mousePosition - OriginalPos_TP; //如果距離大於可移動半徑 if (distance > radius) rectTransform_TP.position = OriginalPos_TP + pos.normalized*radius;//設定軸點到最大半徑位置 else rectTransform_TP.position = Input.mousePosition;//否則軸點在當前觸控位置 //以(0,1,0)為參考點,計算單位軸向量與之夾角 float angle = Vector3.Angle(new Vector3(0,0),new Vector3(pos.normalized.x,pos.normalized.y,0)); //移動物體 go.transform.Translate(new Vector3(0,pos.normalized.magnitude*moveSpeed)*Time.deltaTime); //更新控制物體的旋轉與軸向方向一致 if (pos.normalized.x > 0) go.transform.rotation = Quaternion.AngleAxis(angle,Vector3.up); else go.transform.rotation = Quaternion.AngleAxis(-angle,Vector3.up); } else rectTransform_TP.position = OriginalPos_TP;//沒有觸控時回到初始位置 } }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。