首先我们创建两个Image,让摇杆Stick为Joystick的子物体,将彼此的相对大小调整好。
创建脚本VirtualJoystick.cs继承ScrollRect。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class VirtualJoystick :ScrollRect {
public static Vector2 posV2 = new Vector2();
//最大移动距离
private float mRadius = 0f;
protected override void Start() {
base.Start();
//获得当前摇杆的图像半径
mRadius = (transform as RectTransform).sizeDelta.x * 0.5f;
}
void Update() {
}
public override void OnDrag(PointerEventData eventData) {
base.OnDrag(eventData);
//获得拖动的内容当前所在的位置
Vector2 contentCurPos = this.content.anchoredPosition;
if (contentCurPos.magnitude > mRadius) {
//限制摇杆的移动距离
contentCurPos = contentCurPos.normalized * mRadius;
SetContentAnchoredPosition(contentCurPos);
}
//可以使用VirtualJoystick.posV2.x、VirtualJoystick.posV2.y与角色移动联动,值为0-1,类似Input.GetAxis
posV2 = contentCurPos;
}
public override void OnEndDrag (PointerEventData eventData)
{
base.OnEndDrag (eventData);
posV2 = Vector2.zero;
}
}
将脚本贴到Joystick上,将content设置为Stick