介绍
在游戏中,移动遥杆是一种常见的用户界面元素,它允许玩家通过触摸或鼠标输入来控制游戏对象的移动。移动遥杆通常由一个圆形或方形的背景和一个可以拖动的小球(称为拇指杆)组成。玩家可以通过拖动拇指杆来控制游戏对象的移动方向和速度。



方法
1.新建一个canvas图片,用于显示遥杆区域

2.新建第二个canvas图片,用于显示遥杆控制点

 
3.给第二个图片挂载脚本GameTouch,并且挂载Tag为“Player”
以下是对GameTouch脚本每行代码的注释:
using UnityEngine;
using UnityEngine.EventSystems;  // 引入Unity事件系统命名空间
public class GameTouch : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
{
	Vector2 startPos;  // 记录遥杆起始位置
	public Vector2 Pos;  // 记录遥杆的移动值
	public void OnBeginDrag(PointerEventData eventData)  // 当玩家开始拖拽遥杆时执行
	{
		startPos = transform.position;  // 记录遥杆的起始位置
	}
	public void OnDrag(PointerEventData eventData)  // 当玩家拖拽遥杆时执行
	{
		Pos = eventData.position - startPos;  // 计算遥杆的移动值
		transform.position = Vector2.ClampMagnitude(Pos, 30) + startPos;  // 移动遥杆并限制其最大移动距离
	}
	public void OnEndDrag(PointerEventData eventData)  // 当玩家停止拖拽遥杆时执行
	{
		Pos = Vector2.zero;  // 重置遥杆的移动值
		transform.position = startPos;  // 将遥杆移回起始位置
	}
}
这个脚本实现了一个基本的移动遥杆,当玩家拖拽遥杆时,它会记录遥杆的移动值,并将遥杆移动到合适的位置。这个脚本实现了三个接口:IBeginDragHandler、IDragHandler和IEndDragHandler,这些接口都是Unity事件系统中的接口,用于处理用户输入事件。当玩家开始拖拽遥杆时,OnBeginDrag()函数将记录遥杆的起始位置;当玩家拖拽遥杆时,OnDrag()函数将计算遥杆的移动值,并将遥杆移动到合适的位置,并限制其最大移动距离;当玩家停止拖拽遥杆时,OnEndDrag()函数将重置遥杆的移动值,并将遥杆移回起始位置。

4.新建一个物体,作为遥杆的控制对象,挂载脚本ObjectMover 
using UnityEngine;
public class ObjectMover : MonoBehaviour
{
	public float speed = 5f; // 物体移动的速度
	private GameTouch gameTouch; // 存储GameTouch组件的引用
	private void Start()
	{
		GameObject player = GameObject.FindGameObjectWithTag("Player"); // 获取标签为"Player"的物体
		if (player != null) {
			gameTouch = player.GetComponent<GameTouch>(); // 获取GameTouch组件
		}
		if (gameTouch == null) {
			Debug.LogError("GameTouch component not found on Player object!");
		}
	}
	private void Update()
	{
		// 获取遥杆的移动值
		float horizontal = gameTouch.Pos.x;
		float vertical = gameTouch.Pos.y;
		// 计算物体的移动方向
		Vector3 direction = new Vector3(horizontal, 0f, vertical).normalized;
		// 计算物体的移动距离
		float distance = Mathf.Clamp(gameTouch.Pos.magnitude, 0f, 30f) / 30f;
		distance *= speed * Time.deltaTime;
		// 移动物体
		transform.position += direction * distance;
	}
}

 定义了一个名为ObjectMover的类,该类继承自MonoBehaviour,表示它是一个Unity组件。
声明了一个公有的浮点型变量speed,用于控制物体移动的速度。
声明了一个私有的GameTouch类型变量gameTouch,用于存储GameTouch组件的引用。
Start()方法在脚本启动时被调用。在该方法中,通过标签查找到一个名为"Player"的游戏对象,并获取其上的GameTouch组件的引用。
如果找到了GameTouch组件,则将其赋值给gameTouch变量;否则输出错误信息。
Update()方法在每一帧都被调用。在该方法中,获取gameTouch的Pos属性,该属性存储了一个遥杆的移动值。
根据遥杆的移动值计算出物体的移动方向,使用Vector3的normalized方法将其标准化。
计算物体的移动距离,使用Mathf.Clamp方法将移动值限制在0到30之间,并乘以speed和Time.deltaTime,确保移动平滑。
将物体沿着移动方向乘以移动距离进行移动,更新物体的位置。
5.调整摄像机位置,便于观察

演示


















