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

Unity Canvas场景下Line Renderer无法显示,求拖拽连线实现指导

解决Canvas上拖拽绘制箭头(Line Renderer不显示)的实操步骤

一、先搞定Line Renderer的基础配置

  • 绑定到Canvas层级:把带Line Renderer的GameObject设为Canvas的子物体,或者将Line Renderer的Render Mode改成和Canvas匹配的模式——如果Canvas是Screen Space - Overlay,Line Renderer也选这个;如果是Screen Space - Camera,则保持一致,避免渲染层级不匹配导致看不见。
  • 必设材质与宽度:Line Renderer必须挂材质,直接用UI/Default材质就行(适配UI渲染),同时把Start Width和End Width设成0.1以上的数值,默认0的话肯定看不见。
  • 初始化顶点数量:拖拽连线至少需要2个顶点,初始化时先给Line Renderer设positionCount = 2,起点可以先设成点击的文字位置,拖拽时更新第二个点。

二、坐标转换是核心坑点

Canvas UI用的是屏幕/本地坐标,Line Renderer默认认世界坐标,必须转对:

  • 点击文字时,用EventSystem.current.IsPointerOverGameObject()确认点到了目标,然后拿文字的transform.position(世界坐标)当Line Renderer的起点。

  • 拖拽时处理鼠标坐标:

    • 如果是Overlay模式:直接取Input.mousePosition,但要把Z轴设成Canvas的planeDistance(默认是10),不然Z轴不对会看不见。
    • 如果是Camera模式:用Camera.main.ScreenToWorldPoint(Input.mousePosition)转换,2D场景下把Z轴设为0。

    参考代码片段:

    private bool isDragging;
    public LineRenderer lineRenderer;
    public Canvas canvas;
    
    // 给文字按钮绑定这个点击事件
    public void OnTextClicked()
    {
        isDragging = true;
        lineRenderer.positionCount = 2;
        lineRenderer.SetPosition(0, transform.position);
    }
    
    void Update()
    {
        if (!isDragging) return;
    
        Vector3 mousePos;
        if (canvas.renderMode == RenderMode.ScreenSpaceOverlay)
        {
            mousePos = Input.mousePosition;
            mousePos.z = canvas.planeDistance;
        }
        else
        {
            mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            mousePos.z = 0;
        }
        lineRenderer.SetPosition(1, mousePos);
    
        // 松开鼠标结束拖拽
        if (Input.GetMouseButtonUp(0))
        {
            isDragging = false;
            // 这里可以加判断是否拖拽到另一个文字的逻辑
        }
    }
    

三、箭头的简易实现

Line Renderer本身画不了箭头,得额外处理:

  • 在Line Renderer的终点放一个箭头图标(Image),拖拽时让图标跟着终点走,然后计算角度让图标朝向起点:arrowTransform.rotation = Quaternion.LookRotation(Vector3.forward, startPos - endPos);
  • 或者用两个Line Renderer,一个画主线,一个在终点画两条短线段组成箭头(计算角度后设置线段位置)。

四、最后排查常见问题

  • 遮挡检查:确认Line Renderer所在物体的Sorting Layer和Canvas一致,且Order in Layer比文字高,别被文字挡住。
  • 相机设置:如果用Camera模式,Canvas的Render Camera必须是场景里的主相机,且相机裁剪平面要包含Line Renderer的位置。
  • 组件状态:检查Line Renderer组件有没有被勾选启用,有没有被代码意外禁用。

内容的提问来源于stack exchange,提问作者Salman Moussa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 17:27:44