using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
/// <summary>
/// 写的是一个摇杆的代码
/// 步骤和使用
/// 1.因为代码使用了锚点坐标 所以要调节锚点 (使用的是固定为左下角)
/// 2.代码是要挂在摇杆后面哪个背景图上的
/// 3.背景图要直接在canvas下,不能在他上面套其他的东西,空对象也不行
/// </summary>
public class Rocker : MonoBehaviour,IDragHandler,IEndDragHandler
{
public GameObject player;
//鼠标拖拽遥感的偏移值 (偏移值是一个静态变量 可供外部获取,做移动等需求)
public static Vector2 offset;
//摇杆后的一个图片 和 摇杆
RectTransform backGround, rock;
//半径 (可拖拽的距离范围)
float r;
bool isdrag;
Vector2 pos;
void Start()
{
rock = transform.GetChild(0).GetComponent<RectTransform>();
backGround = GetComponent<RectTransform>();
//取宽高比较小的一个作为可拖拽的圆半径范围
r = backGround.rect.width < backGround.rect.height ? backGround.rect.width / 2 : backGround.rect.height / 2;
}
public void OnDrag(PointerEventData eventData)
{
//一个v2上的距离
pos = eventData.position - backGround.anchoredPosition;
//设置摇杆的位置
rock.anchoredPosition = Vector2.ClampMagnitude(pos, r);
//偏移值的计算
offset = rock.anchoredPosition / r;
isdrag = true;
}
public void OnEndDrag(PointerEventData eventData)
{
//清除摇杆的位置
rock.anchoredPosition = Vector2.zero;
//清除偏移值
offset = Vector2.zero;
isdrag = false;
}
private void Update()
{
if (isdrag)
{
player.transform.LookAt(new Vector3(pos.x, 0, pos.y) + player.transform.position);
player.transform.Translate(Vector3.forward*Time.deltaTime*5);
}
}
}