如何在Unity 2D Canvas中用LineRenderer绘制逻辑门模拟器的直角规整连线?
实现逻辑门模拟器的直角规整连线(曼哈顿连线)
你要实现的这种直角转折连线叫做曼哈顿连线(Manhattan Line),是电路图、UI布局中常用的规整连线方式,仅沿水平/垂直方向延伸,通过一次直角转折连接两点,能大幅提升视觉整洁度。
以下是针对你现有Unity代码的修改方案,可自动生成单转折的曼哈顿连线:
using UnityEngine; public class ManhattanLineDrawer : MonoBehaviour { public Transform startPoint; public Transform endPoint; private LineRenderer lineRenderer; private void Start() { lineRenderer = GetComponent<LineRenderer>(); // 曼哈顿连线需要3个点:起点、转折点、终点 lineRenderer.positionCount = 3; } private void Update() { if(startPoint != null && endPoint != null) RefreshManhattanLine(); } private void RefreshManhattanLine() { Vector3 start = startPoint.position; Vector3 end = endPoint.position; // 计算转折点:这里采用「先水平对齐终点X轴,再垂直对齐终点Y轴」的规则 // 也可根据布局需求改成「先垂直后水平」的方式 Vector3 pivot = new Vector3(end.x, start.y, start.z); // 特殊情况:两点在同一水平线/垂直线上,直接用两点连线,避免多余转折 if (Mathf.Approximately(start.x, end.x) || Mathf.Approximately(start.y, end.y)) { lineRenderer.positionCount = 2; lineRenderer.SetPosition(0, start); lineRenderer.SetPosition(1, end); } else { lineRenderer.positionCount = 3; lineRenderer.SetPosition(0, start); lineRenderer.SetPosition(1, pivot); lineRenderer.SetPosition(2, end); } } }
额外优化方向
- 统一布局规则:可以给所有逻辑门的引脚设定固定连线规则,比如所有输出引脚的连线先水平延伸,再垂直转向输入引脚,保证整体布局一致性。
- 多转折适配:如果遇到复杂布局需要绕过障碍物,可以扩展算法生成多段曼哈顿折线,但逻辑门模拟器通常单转折就足够满足需求。
内容的提问来源于stack exchange,提问作者begluka0
相关产品推荐
相关产品推荐

