Unity中實現搖桿功能
阿新 • • 發佈:2019-02-16
雖然現在在Unity中實現搖桿有,Easy Touch來幫你完成,今天我就來給大家分享手動敲程式碼實現搖桿功能
下面開始上程式碼:
using UnityEngine; using System.Collections; using UnityEngine.UI; using UnityEngine.EventSystems; public class MyJoystick : MonoBehaviour, IPointerDownHandler, IPointerUpHandler, IDragHandler, IEndDragHandler { public static MyJoystick instance; public Image dayuan; public Image xiaoyuan; public Vector2 direction; void Awake() { if (instance == null) { instance = this; } } // Use this for initialization void Start() { dayuan.color = new Color(dayuan.color.r, dayuan.color.g, dayuan.color.b, 0.3f); xiaoyuan.color = new Color(xiaoyuan.color.r, xiaoyuan.color.g, xiaoyuan.color.b, 0.3f); } // Update is called once per frame void Update() { } private void MyPress(Vector2 v2) { Vector2 shouzhiPos; RectTransformUtility.ScreenPointToLocalPointInRectangle(GameManager.instance.cv.transform as RectTransform, v2, GameManager.instance.cv.worldCamera, out shouzhiPos); float dis = Vector3.Distance(shouzhiPos, dayuan.transform.localPosition); dis = Mathf.Clamp(dis, 0, dayuan.rectTransform.rect.width / 2); Vector3 shouzhiV3 = shouzhiPos; Vector3 dir = (shouzhiV3 - dayuan.transform.localPosition).normalized; xiaoyuan.transform.localPosition = dayuan.transform.localPosition + dir * dis; direction = dir * dis / (dayuan.rectTransform.rect.width / 2); dayuan.color = new Color(dayuan.color.r, dayuan.color.g, dayuan.color.b, 1); xiaoyuan.color = new Color(xiaoyuan.color.r, xiaoyuan.color.g, xiaoyuan.color.b, 1); } private void MyUp() { xiaoyuan.transform.localPosition = dayuan.transform.localPosition; dayuan.color = new Color(dayuan.color.r, dayuan.color.g, dayuan.color.b, 0.3f); xiaoyuan.color = new Color(xiaoyuan.color.r, xiaoyuan.color.g, xiaoyuan.color.b, 0.3f); direction = Vector3.zero; } public void MyEndDrag() { MyUp(); } public void OnPointerDown(PointerEventData eventData) { MyPress(eventData.pressPosition); } public void OnPointerUp(PointerEventData eventData) { MyUp(); } public void OnDrag(PointerEventData eventData) { MyPress(eventData.position); } public void OnEndDrag(PointerEventData eventData) { MyUp(); } }
標記====》大圓(dayuan)就是搖桿外部的園 小圓(xiaoyuan)搖桿內部的圓