简单的UI制作
其中的ImageBg的锚点
其中的ImagePoint的锚点
代码
using UnityEngine;
using UnityEngine.EventSystems;
public class JoystickUI : UIBase
{
private RectTransform ImageBg;
private RectTransform ImagePoint;
private float radius = 100;
private Vector2 imageBackPos;
private void Awake()
{
InitUI();
}
public override void InitUI()
{
ImageBg = GetComp<RectTransform>("ImageBg");
ImagePoint = GetComp<RectTransform>("ImagePoint");
imageBackPos = ImageBg.anchoredPosition;
UIEvent.Get(gameObject).OnPointerDownCallBack = OnJoystickDown;
UIEvent.Get(gameObject).OnDragCallBack = OnJoystickDrag;
UIEvent.Get(gameObject).OnPointerUpCallBack = OnJoystickUp;
}
public void SetRadius(float radius)
{
this.radius = radius;
}
private void OnJoystickDown(PointerEventData e)
{
ImageBg.anchoredPosition = e.position;
}
private void OnJoystickDrag(PointerEventData e)
{
Vector2 vector2 = e.position - ImageBg.anchoredPosition;
ImagePoint.anchoredPosition = vector2;
if (vector2.magnitude > radius)
{
ImagePoint.anchoredPosition = vector2.normalized * radius;
}
//Debug.Log(ImagePoint.anchoredPosition.normalized.ToString());
//Debug.Log(ImagePoint.anchoredPosition.magnitude / radius);
//--callback
}
private void OnJoystickUp(PointerEventData e)
{
ImageBg.anchoredPosition = imageBackPos;
ImagePoint.anchoredPosition = Vector2.zero;
}
}
加一个回调,让控制的物体移动起来。
UIBase,UIEvent等在我的其他文章里写的,可以看看。
看这里有类似的,解决了一些问题。