一.UI制作
1.首先创建一个空物体,命名为摇杆,锚点调至左下角 2.创建一个image作为摇杆厨盆的有效地方,并命名为tough_place 3.创建一个image放入摇杆的背景图片,并命名为bg。 4.创建一个image放入摇杆的控制点,并命名为point。 5.把tough_place的颜色设置为透明
二.代码编写
创建脚本命名为PEListener,并引入相关接口,并进行封装。
using System;
using UnityEngine;
using UnityEngine.EventSystems;
public class PEListener : MonoBehaviour, IPointerDownHandler, IPointerUpHandler, IDragHandler
{
public Action<PointerEventData> onClickDown;
public Action<PointerEventData> onClickUp;
public Action<PointerEventData> onClickDrag;
public void OnPointerDown(PointerEventData eventData)
{
if (onClickDown != null)
{
onClickDown(eventData);
}
}
public void OnPointerUp(PointerEventData eventData)
{
if (onClickUp != null)
{
onClickUp(eventData);
}
}
public void OnDrag(PointerEventData eventData)
{
if (onClickDrag!=null)
{
onClickDrag(eventData);
}
}
}
创建脚本命名为Test,进行相关的逻辑操作。 (1)定义相关数据并传入
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class Test : MonoBehaviour {
public Image imageTough;
public Image imgDir;
public Image imaPoint;
Vector2 startPos;
Vector2 defulPos;
float poinDis=90;
private void Start()
{
defulPos = imageTough.transform.position;
poinDis = Screen.height * 1.0f / 1334 * poinDis;
}
}
(2)进行相关逻辑的书写
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class Test : MonoBehaviour {
public Image imageTough;
public Image imgDir;
public Image imaPoint;
Vector2 startPos;
Vector2 defulPos;
float poinDis=90;
private void Start()
{
defulPos = imageTough.transform.position;
poinDis = Screen.height * 1.0f / 1334 * poinDis;
RegisterTouchEvts();
}
public void RegisterTouchEvts()
{
PEListener lister = imageTough.gameObject.AddComponent<PEListener>();
lister.onClickDown = (PointerEventData evt) =>
{
startPos = evt.position;
imgDir.transform.position = evt.position;
};
lister.onClickUp = (PointerEventData evt) =>
{
imgDir.transform.position = defulPos;
imaPoint.transform.localPosition = Vector2.zero;
};
lister.onClickDrag = (PointerEventData evt) =>
{
Vector2 dir = evt.position - startPos;
float len = dir.magnitude;
if (len > poinDis)
{
Vector2 clampDir = Vector2.ClampMagnitude(dir, poinDis);
imaPoint.transform.position = startPos + clampDir;
}
else
{
imaPoint.transform.position = evt.position;
}
};
}
}
|