想控制物体移动只需再在移动代码里判断h,v是否为0,如果不为0则将物体移动的h等于遥感代码里的h,v等于v
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public class UIRocker : MonoBehaviour, IDragHandler, IEndDragHandler
{
public static float h;
public static float v;
//图标移动最大半径
public float maxRadius = 50;
//初始化背景图标位置
private Vector2 moveBackPos;
// Use this for initialization
void Start()
{
//初始化背景图标位置
moveBackPos = transform.parent.transform.position;
}
/// <summary>
/// 当鼠标开始拖拽时
/// </summary>
/// <param name="eventData"></param>
public void OnDrag(PointerEventData eventData)
{
h = transform.localPosition.x / 70;
v = transform.localPosition.y / 70;
//获取鼠标位置与初始位置之间的向量
Vector2 oppsitionVec = eventData.position - moveBackPos;
//获取向量的长度
float distance = Vector3.Magnitude(oppsitionVec);
//最小值与最大值之间取半径
float radius = Mathf.Clamp(distance, 0, maxRadius);
//限制半径长度
transform.position = moveBackPos + oppsitionVec.normalized * radius;
}
/// <summary>
/// 当鼠标停止拖拽时
/// </summary>
/// <param name="eventData"></param>
public void OnEndDrag(PointerEventData eventData)
{
transform.position = moveBackPos;
h = 0; v = 0;//在物体移动代码里判断,如果不为0将值赋给移动好h,v
}
}