You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 11:26:25