好激动,终于要写自己的博客了。。。算了 ,确实没啥想说的 直接看代码吧,挺简单的,但是就是不会。。。看了半天别人的代码才懂。。。
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);
}
}