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