using UnityEngine;
using UnityEngine.UI;
public class TogglePositionPrinter : MonoBehaviour
{
public Toggle[] toggles;
public GameObject linePrefab; // 线段预制体
private Toggle selectedToggle; // 当前选中的Toggle按钮
private GameObject line; // 当前绘制的线段
void Start()
{
// 为每个Toggle添加点击事件监听器
foreach (Toggle toggle in toggles)
{
toggle.onValueChanged.AddListener((value) =>
{
// 当Toggle被选中时
if (value)
{
// 如果之前没有选中的Toggle,则将当前Toggle设为选中的Toggle
if (selectedToggle == null)
{
selectedToggle = toggle;
}
else if (selectedToggle != toggle)
{
// 如果当前Toggle不是之前选中的Toggle,则绘制线段连接两个Toggle
DrawLine(selectedToggle, toggle);
// 连线后重置选中状态
selectedToggle = null;
}
}
});
}
}
void DrawLine(Toggle toggle1, Toggle toggle2)
{
// 获取Toggle按钮的RectTransform组件
RectTransform toggleRect1 = toggle1.GetComponent<RectTransform>();
RectTransform toggleRect2 = toggle2.GetComponent<RectTransform>();
// 获取Toggle按钮的中心位置
Vector3 startPos = toggleRect1.position;
Vector3 endPos = toggleRect2.position;
// 实例化线段对象
line = Instantiate(linePrefab, Vector3.zero, Quaternion.identity);
// 获取线段的RectTransform组件
RectTransform lineRect = line.GetComponent<RectTransform>();
// 设置线段的位置和长度
lineRect.position = (startPos + endPos) / 2f; // 设置线段中心位置为两个Toggle按钮中心位置的中点
lineRect.sizeDelta = new Vector2(Vector3.Distance(startPos, endPos), 3f);
// 计算线段的角度
float angle = Mathf.Atan2(endPos.y - startPos.y, endPos.x - startPos.x) * Mathf.Rad2Deg;
// 设置线段的旋转角度
lineRect.rotation = Quaternion.Euler(0, 0, angle);
// 设置线段的父对象为Canvas
lineRect.SetParent(toggle1.transform.parent);
}
}
Unity UI连线初步
最新推荐文章于 2024-07-28 21:59:04 发布