using System; using System.Collections.Generic; using System.Linq; using UnityEngine; using UnityEngine.UI; namespace DongWuYiXue.DaoNiaoShu { public class DragManager : MonoBehaviour { private List drags = new(); [HideInInspector] public Drag drag; Drag hoverDrag; private void Start() { drags = GetComponentsInChildren().ToList(); for (int i = 0; i < drags.Count; i++) { drags[i].Init(this); } } public void Init() { drag = null; hoverDrag = null; for (int i = 0; i < drags.Count; i++) { drags[i].Init(this); } } private void Update() { if (drag != null) { hoverDrag = GetHoverDrag(); if (hoverDrag != null) { if (drag.rightTarget != null) { if (drag.rightTarget == hoverDrag) { drag.right = true; } else { drag.right = false; } } else if (hoverDrag.rightTarget != null) { if (drag == hoverDrag.rightTarget) { drag.right = true; } else { drag.right = false; } } } } } public void DragEnd() { if (drag != null && hoverDrag != null) { drag.rectTransform.position = hoverDrag.rectTransform.position; drag.yourTarget = hoverDrag; hoverDrag.yourTarget = drag; hoverDrag.hoverImage.SetActive(false); } else { drag.ResetPos(); } drag = null; hoverDrag = null; } Drag GetHoverDrag() { for (int i = 0; i < drags.Count; i++) { Drag d = drags[i]; if (drag.group != d.group && d.hoverImage.activeSelf && !HasDrag(d)) { return d; } } return null; } /// /// 判断该物体是否已经被其他物体所拖拽 /// bool HasDrag(Drag d) { for (int i = 0; i < drags.Count; i++) { if (drags[i].yourTarget != null) { if (drags[i].yourTarget == d) { return true; } } } return false; } public void DisPlayResult() { for (int i = 0; i < drags.Count; i++) { if (drags[i].right && drags[i].drag) { drags[i].rightImage.SetActive(true); } else if (drags[i].drag) { drags[i].falseImage.SetActive(true); } } } public bool CheckAllDrag() { for (int i = 0; i < drags.Count; i++) { if (!drags[i].right && drags[i].drag) { return false; } } return true; } public string GetYourAnswer() { string str = ""; for (int i = 0; i < drags.Count; i++) { if (!drags[i].drag && drags[i].yourTarget != null) { str += drags[i].yourTarget.dragName; } } if (string.IsNullOrEmpty(str)) { return "用户未作答"; } return str; } } }