在PC端模拟摇杆,实现玩家通过控制摇杆让玩家移动,以下是完整代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class Move : MonoBehaviour
{
//设置关联摇杆
public EventTrigger controller;
//获取正方体的位置信息
public Transform cube;
//设置正方体的移动速度
public float moveSpeed = 5f;
//设置当前移动方向
private Vector3 moveDir;
//坦克是否移动
private bool isMoving;
public float roundSpeed = 20f;
//监听事件
// Start is called before the first frame update
void Start()
{
EventTrigger.Entry entry = new EventTrigger.Entry();
//声明事件类型
entry.eventID = EventTriggerType.Drag;
//监听函数关联
entry.callback.AddListener((data) =>
{
//改变对象位置
PointerEventData eventData= data as PointerEventData;
controller.transform.localPosition += new Vector3(eventData.delta.x,eventData.delta.y,0);
//判断极限
if(controller.transform.localPosition.magnitude>130)
{
controller.transform.localPosition = controller.transform.localPosition.normalized * 130;
}
//拖动时让玩家移动
MoveTo(controller.transform.localPosition.normalized);
});
controller.triggers.Add(entry);
EventTrigger.Entry entry1=new EventTrigger.Entry();
entry1.eventID=EventTriggerType.EndDrag;
entry1.callback.AddListener((data) =>
{
//回到原点
controller.transform.localPosition = Vector3.zero;
//玩家停止移动
StopMoving();
});
controller.triggers.Add(entry1);
}
// Update is called once per frame
void Update()
{
if(isMoving)
{
//位移
this.transform.Translate(Vector3.forward * Time.deltaTime * moveSpeed);
//旋转
this.transform.rotation = Quaternion.Lerp(this.transform.rotation, Quaternion.LookRotation(moveDir), roundSpeed * Time.deltaTime);
}
}
//控制移动
public void MoveTo(Vector3 dir)
{
moveDir.x = dir.x;
moveDir.z = dir.y;
isMoving= true;
}
//停止移动
public void StopMoving()
{
isMoving= false;
}
}
希望我的笔记对你有所帮助,喜欢就点赞收藏吧!