如何自己制作一个虚拟摇杆
这里面用到了两张图片精灵。
通过转换坐标来进行实现一个物体的移动。
代码如下
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public class VirtualDemo : MonoBehaviour, IDragHandler, IEndDragHandler
{
Vector3 v3;//记录开始位置
RectTransform rect;
Vector3 world;//世界坐标
Vector2 screen;//屏幕坐标
Vector2 middle;//临时坐标
float radius;//半径
public Vector3 movev3;
public void OnDrag(PointerEventData eventData)
{
middle = eventData.position - screen;//临时向量
movev3 = middle.normalized.y * Vector3.forward;//y轴移动
movev3 += middle.normalized.x * Vector3.right;//x轴移动
if (middle.magnitude > radius)//临时向量的长度大于半径时
{
middle = middle.normalized * radius;//临时向量为半径长度的向量
}
rect.anchoredPosition = middle;//把临时向量赋给物体的最终坐标
}
public void OnEndDrag(PointerEventData eventData)
{
movev3 = Vector3.zero;//结束时归零
transform.position = v3;//返回原始位置
}
void Start()
{
rect = GetComponent<RectTransform>();//获取组件
v3 = transform.position;//记录开始位置
radius = transform.parent.GetComponent<RectTransform>().rect.width / 2;//获取父物体的半径
world = rect.position;//获取世界坐标
screen = RectTransformUtility.WorldToScreenPoint(null, world);//转化为屏幕坐标
}
}
通过鼠标点击摇杆来控制物体进行前后左右移动。
虽然有EasyTouch插件,但是当我们自己制作一个小项目的时候可以用到这些,两张图片精灵来控制物体移动,大大减少了程序内存。