此腳本掛在左側按鈕上
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using System;
public class line : MonoBehaviour,IPointerDownHandler,IPointerUpHandler,IDragHandler, IEndDragHandler
{
[Header("線寬度")]
public float lineWidth = 3f;
[Header("線顏色")]
public Color lineColor = Color.white;
[Header("限制多選")]
bool isUP = true;
//連線
GameObject lineObj = null;
RectTransform lineObjRT = null;
Image lineObjImg;
//初始點
Vector3 startPos = Vector3.zero;
Vector3 endPos = Vector3.zero;
// 最後落腳的物體
GameObject GetObj;
public void Decide()
{
if (GetObj != null)
{
if (GetObj.name == transform.name)
{
Debug.Log("回答正確");
lineObjImg.color = Color.green;
}
else
{
lineObjImg.color = Color.red;
Debug.Log("回答錯誤");
}
}
else
{
Debug.Log("回答錯誤");
// DestroyImmediate(lineObjRT.gameObject);
}
}
public void OnDrag(PointerEventData eventData)
{
if (isUP)
{
endPos = Input.mousePosition;
Vector3 durationPos = endPos - startPos;
lineObjRT.sizeDelta = new Vector2(durationPos.magnitude, lineWidth);
float angle = Mathf.Atan2(durationPos.y, durationPos.x) * Mathf.Rad2Deg;
lineObjRT.localRotation = Quaternion.Euler(0, 0, angle);
}
}
public void OnEndDrag(PointerEventData eventData)
{
if (isUP)
{
if (eventData.pointerEnter != null)
{
print(eventData.pointerEnter.name);
endPos = eventData.pointerEnter.transform.position;
Vector3 durationPos = endPos - startPos;
lineObjRT.sizeDelta = new Vector2(durationPos.magnitude, lineWidth);
float angle = Mathf.Atan2(durationPos.y, durationPos.x) * Mathf.Rad2Deg;
lineObjRT.localRotation = Quaternion.Euler(0, 0, angle);
isUP = false;
}
else
{
print("未選中,結果爲空");
}
}
}
public void OnPointerDown(PointerEventData eventData)
{
//限制多選
if (isUP)
{
lineObj = new GameObject("LineObj");
lineObj.SetActive(false);
lineObjRT = lineObj.AddComponent<RectTransform>();
lineObjRT.pivot = new Vector2(0, 0.5f);
lineObjRT.localScale = Vector3.one;
lineObjImg = lineObj.AddComponent<Image>();
lineObjImg.color = lineColor;
lineObjImg.raycastTarget = false;
lineObjRT.SetParent(transform);
startPos = transform.position;
lineObjRT.position = startPos;
lineObjRT.sizeDelta = Vector2.zero;
lineObj.SetActive(true);
};
}
public void OnPointerUp(PointerEventData eventData)
{
if (isUP)
{
if (eventData.pointerEnter != null)
{
GetObj = eventData.pointerEnter;
//添加數據
Line_chose.dic_add.Add(int.Parse(transform.name), int.Parse(eventData.pointerEnter.name));
Line_chose.number++;
}
if (eventData.pointerEnter == null)
{
DestroyImmediate(lineObjRT.gameObject);
}
}
if (eventData.button == PointerEventData.InputButton.Right)
{
if(Line_chose.dic_add.ContainsKey(int.Parse(transform.name)))
{
//移除數據
Line_chose.dic_add.Remove(int.Parse(transform.name));
Line_chose.number--;
}
DestoryAll();
isUP = true;
}
}
//銷燬自身所有的線
void DestoryAll()
{
for (int i = 0; i < transform.childCount; i++)
{
Destroy(transform.GetChild(i).gameObject);
}
}
}
掛在任意處
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Line_chose : MonoBehaviour
{
[Header("左側選項")]
public RectTransform[] left_start_arr;
[Header("右側選項")]
public RectTransform[] right_end_arr;
[Header("結束連線")]
public Button ok;
//選擇題個數
public static int number;
//初始答案
private Dictionary<int, int> _dic_da_an = new Dictionary<int, int>();
//答案錄入
public static Dictionary<int, int> dic_add = new Dictionary<int, int>();
void Init()
{
_dic_da_an.Add(0, 0);
_dic_da_an.Add(1, 1);
_dic_da_an.Add(2, 2);
}
// Start is called before the first frame update
void Start()
{
Init();
ok.onClick.AddListener(delegate () { Jie_suan(); });
}
//銷燬自身所有的線
void DestoryAll()
{
for (int i = 0; i < left_start_arr.Length; i++)
{
Destroy(left_start_arr[i].GetChild(i).gameObject);
}
}
//結算答案
public void Jie_suan()
{
print("字典個數"+ dic_add.Count);
for (int i = 0; i < left_start_arr.Length; i++)
{
if (left_start_arr[i].GetComponent<line>() != null)
{
left_start_arr[i].GetComponent<line>().Decide();
}
}
//是否都連完
if(number== left_start_arr.Length)
{
for (int i = 0; i < number; i++)
{
if (dic_add[i] == _dic_da_an[i])
{
//對
}
}
}
}
}