using UnityEngine; using System.Collections; using UnityEngine.EventSystems; public class JoyController : MonoBehaviour,IDragHandler,IEndDragHandler { //摇杆圆盘半径 public float radius = 75f; //摇杆原始位置 private Vector3 origin; //玩家的角色控制器 private CharacterController player; //玩家移动速度 public float speed = 10; //声明一个方向向量 Vector3 dir; void Start() { //获取当前位置 origin = transform.position; //找到主角玩家 player = GameObject.FindWithTag ("Player"). GetComponent<CharacterController> (); } void Update() { //玩家移动 player.SimpleMove (new Vector3(dir.x,0,dir.y) * speed * Time.deltaTime); } /// <summary> /// 摇杆拖拽中 /// </summary> /// <param name="eventData">Event data.</param> public void OnDrag (PointerEventData eventData) { //计算起点位置与当前鼠标位置的距离 float distance = Vector3.Distance (origin, Input.mousePosition); //求方向向量 dir = Input.mousePosition - origin; //如果拖拽在圆盘范围内 if (distance <= radius) { //摇杆随鼠标移动而移动 transform.position = Input.mousePosition; } else { //实际向量 Vector3 real = dir.normalized * radius; //最终摇杆的位置 transform.position = real + origin; } } /// <summary> /// 结束拖拽 /// </summary> /// <param name="eventData">Event data.</param> public void OnEndDrag (PointerEventData eventData) { dir = Vector3.zero; //回到初始位置 transform.position = origin; } }
要注意的几个位置,添加相应组件。1,脚本挂载在遥感中心点Controller上.2,小摄像头(设置正交)挂为Player子物体跟随玩家移动3,遮罩设置