using UnityEngine;
using UnityEngine.EventSystems;
public class DragUI : MonoBehaviour, IDragHandler, IPointerDownHandler,IPointerUpHandler
{
Vector3 startPoint;
public int BtnIndex;
public bool isRightPoint;
private void Start()
{
startPoint = transform.position;
}
private Vector2 offsetPos; //臨時(shí)記錄點(diǎn)擊點(diǎn)與UI的相對(duì)位置
public void OnDrag(PointerEventData eventData)
{
transform.position = eventData.position - offsetPos;
}
public void OnPointerDown(PointerEventData eventData)
{
offsetPos = eventData.position - (Vector2)transform.position;
}
public void OnPointerUp(PointerEventData eventData)
{
if (RectTransToScreenPos(transform.GetComponent<RectTransform>(), null)
.Overlaps(RectTransToScreenPos(Step2.Ins.Point[BtnIndex].GetComponent<RectTransform>(), null)))
{
isRightPoint = true;
transform.position = Step2.Ins.GJ_Point[BtnIndex].transform.position;
}
else
{
isRightPoint = false;
transform.position = startPoint;
AudioManager.Ins.PlayAudio("cuowuSound");
}
//檢測(cè)所有名字位置是否正確
Step2.Ins.CheckAllRightPoint();
}
public static Rect RectTransToScreenPos(RectTransform rt, Camera cam)
{
Vector3[] corners = new Vector3[4];
rt.GetWorldCorners(corners);
Vector2 v0 = RectTransformUtility.WorldToScreenPoint(cam, corners[0]);
Vector2 v1 = RectTransformUtility.WorldToScreenPoint(cam, corners[2]);
Rect rect = new Rect(v0, v1 - v0);
return rect;
}
}
2、UI控制腳本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Step2 : MonoBehaviour
{
public static Step2 Ins;
public Button[] BtnGJ; //工具名字按鈕
public Image[] GJ_Point; //工具名字對(duì)應(yīng)的位置按鈕
void Awake()
{
Ins = this;
}
/// <summary>
/// 檢查名字是否都對(duì)應(yīng)上
/// </summary>
public void CheckAllRightPoint()
{
foreach (var item in BtnGJ)
{
if (!item.GetComponent<DragUI>().isRightPoint)
{
StepManager.Ins.BtnNext.gameObject.SetActive(false);
return;
}
}
StepManager.Ins.ShowBtnNext();
}
}