介绍
在游戏中,移动遥杆是一种常见的用户界面元素,它允许玩家通过触摸或鼠标输入来控制游戏对象的移动。移动遥杆通常由一个圆形或方形的背景和一个可以拖动的小球(称为拇指杆)组成。玩家可以通过拖动拇指杆来控制游戏对象的移动方向和速度。
方法
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.调整摄像机位置,便于观察