UGUI实现Joystick

来源:互联网 发布:天敏网络机顶盒 编辑:程序博客网 时间:2024/06/02 08:43

好激动,终于要写自己的博客了。。。算了 ,确实没啥想说的 直接看代码吧,挺简单的,但是就是不会。。。看了半天别人的代码才懂。。。

using System.Collections.Generic;using System.Text;using System;using UnityEngine.UI;using UnityEngine.EventSystems;[ExecuteInEditMode]public class JoystickControl : MonoBehaviour{    public delegate void JoystickEventHandler(JoystickControl joystick);/// <summary>/// Pretty self-explanatory, Gets the AxisValues axis value between -1 & 1.../// </summary>public static Vector2 CurrentAxisValues {  get;private set; }/// <summary>/// The radius./// </summary>private int radius ;/// <summary>/// joystick background/// </summary>public Image JoystickBG;public Image JoystickFG;void Awake(){        RegisetEvent();}    void Start()    {        <pre name="code" class="csharp"><span style="white-space:pre"></span>radius <span style="font-family: Arial, Helvetica, sans-serif;">= (int)JoystickBG.rectTransform.rect.height / 2;</span>
} private void RegisetEvent() {

<span style="white-space:pre"></span>//这里是参考Mono的事件,有兴趣的可以去看一下        EventTriggerListener.Get(JoystickBG.gameObject).onDown += OnMouseDownBG;        EventTriggerListener.Get(JoystickBG.gameObject).onUp += OnMouseUpBG;        EventTriggerListener.Get(JoystickBG.gameObject).onDrag += OnMouseDragBG;    }    private void OnMouseDownBG( PointerEventData data)    {        CalculateJoystickAxis(data);          }    private void OnMouseUpBG(PointerEventData go)    {        CurrentAxisValues=Vector2.zero;        JoystickFG.transform.localPosition = Vector3.zero;    }    private void OnMouseDragBG(PointerEventData data)    {        CalculateJoystickAxis(data );    }/// <summary>/// 计算JoystickAxis/// </summary>/// <returns></returns>    void CalculateJoystickAxis(PointerEventData data){        Vector3 pos;       if( RectTransformUtility.ScreenPointToWorldPointInRectangle(JoystickFG.rectTransform, data.position, data.pressEventCamera, out pos));       JoystickFG.transform.position = pos;        Vector3 local = JoystickFG.transform.localPosition;        if (local.magnitude > radius){            JoystickFG.transform.localPosition = local.normalized * radius;}        CurrentAxisValues = new Vector2(local.x / radius, local.y / radius);}}


0 0