自定义一个虚构摇杆,具体须要是: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...