DragMove 脚本挂载在操纵球上
using UnityEngine;
using UnityEngine.EventSystems;
public class DragMove : MonoBehaviour, IDragHandler, IEndDragHandler
{
[Tooltip("操纵球")]
private Vector3 m_Handle = Vector3.zero;
[Tooltip("鼠标开始拖拽时位置")]
private Vector3 initalPos;
[Tooltip("允许移动的操作区域半径")]
private float radial;
[Tooltip("角色移动脚本")]
public MoveTestone player;
private void Start()
{
initalPos = transform.position;
radial = 75;
}
private void FixedUpdate()
{
player.Move(m_Handle.x,m_Handle.y);
}
public void OnDrag(PointerEventData eventData)
{
Vector3 pos = Input.mousePosition - initalPos;
m_Handle = pos.normalized * Mathf.Min(pos.magnitude / radial, 1);
UpdateHandle(m_Handle);
}
public void OnEndDrag(PointerEventData eventData)
{
transform.position = initalPos;
m_Handle = Vector3.zero;
}
void UpdateHandle(Vector3 pos)
{
transform.position = initalPos + pos * radial;
}
}
MoveTestone脚本挂载玩家物体上
using UnityEngine;
public class MoveTestone : MonoBehaviour
{
public float speed = 8;
public float rotate = 48;
public void Move(float h, float v)
{
if (Mathf.Abs(v) > 0)
{
Vector3 move = transform.forward * v;
transform.Translate(transform.worldToLocalMatrix.MultiplyVector(move) * Time.fixedDeltaTime * speed);
}
if (Mathf.Abs(h) > 0)
{
transform.Rotate(Time.fixedDeltaTime * rotate * Vector3.up * h);
}
}
void FixedUpdate()
{
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
Move(h, v);
}
}