自定义一个虚构摇杆,具体须要是:1、未点击时核心的小圆点暗藏 2、点击通明背景范畴内时操作栏挪动到点击地位 3、拖拽小圆点输入拖拽方向 4、松开时操作栏复位,小圆点暗藏
一、UI 制作
1、创立一个 Joystick 的背景通明的 Image,作为点击的范畴
2、创立 Joystick 下创立一个子物体 TouchBg,作为操作栏
3、创立 TouchBg 下创立一个子物体 TouchPoint
二、创立脚本 Joystick 附加在 Joystick 物体上,继承 ScrollRect,将 TouchPoint 赋值给 Content 参数,将 TouchBg 赋值给 ViewPort 参数
三、编写 Joystick 脚本
/********************************************************************
文件:Joystick.cs
作者:Panngdudu
日期:2020/12/19
形容: 虚构摇杆性能
*********************************************************************/
using System;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class Joystick : ScrollRect, IPointerDownHandler, IPointerUpHandler, IDragHandler
{
public GameObject touchBgGo;
public GameObject touchPointGo;
// 事件触发的回调
public Action<Vector2> onDragCallback;// 拖拽事件的回调,参数 1:方向
protected float radius = 100;
protected override void Start()
{radius = touchPointGo.GetComponent<RectTransform>().sizeDelta.x * 0.7f;
}
public void OnPointerDown(PointerEventData eventData)
{touchPointGo.SetActive(true);
touchBgGo.transform.position = eventData.position;
}
public void OnPointerUp(PointerEventData eventData)
{touchPointGo.SetActive(false);
touchBgGo.transform.localPosition = Vector2.zero;
}
public void OnDrag(PointerEventData eventData)
{base.OnDrag(eventData);
var contentPos = this.content.anchoredPosition;
if (contentPos.magnitude > radius)
{
contentPos = contentPos.normalized * radius;
SetContentAnchoredPosition(contentPos);
}
onDragCallback?.Invoke(contentPos.normalized);
}
}
gitee 地址:https://gitee.com/pangdudu010…