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

Unity:如何设置Line Renderer让角部也显示正常精灵(点)?

Unity Line Renderer矩形角部纹理显示问题解决办法

问题描述

我尝试用Unity的Line Renderer创建矩形,设置Corner Vertices为0、Texture Mode为Tile、纹理Wrap Mode为Repeat时,出现精灵纹理变形的情况;当把Corner Vertices设为大于0的值时,精灵显示正常,但矩形的角部无法正确绘制出纹理。使用的是URP/Unlit材质,Tiling X和Y均为1。需要让角部也能正确显示精灵纹理。

解决方案

  • 自定义Shader修正纹理坐标
    Line Renderer默认的纹理映射逻辑在开启Corner Vertices时,不会给角部顶点分配有效纹理坐标,导致角部无纹理。可以基于URP/Unlit Shader修改:

    1. 复制URP内置的Unlit Shader代码,创建自定义Shader文件
    2. 在顶点着色器中,利用Line Renderer顶点的lineVertexID属性(Unity内置的Line Renderer顶点属性)判断是否为角部顶点,给这些顶点计算对应的纹理坐标,让纹理沿着整个矩形(包括角部)连续平铺
    3. 核心代码示例(顶点着色器部分):
      struct appdata {
          float4 vertex : POSITION;
          float2 uv : TEXCOORD0;
          uint lineVertexID : SV_VertexID;
      };
      
      v2f vert (appdata v) {
          v2f o;
          o.vertex = TransformObjectToHClip(v.vertex);
          // 获取Line Renderer的总长度(可通过材质属性传递,或在代码中计算后赋值)
          float totalLength = _TotalLineLength;
          // 计算每个顶点的纹理X坐标,角部顶点也参与平铺
          float uvX = (v.lineVertexID / 2) * (1.0 / totalLength) * _MainTex_ST.x;
          o.uv = float2(uvX, v.uv.y * _MainTex_ST.y);
          return o;
      }
      
    4. 在C#代码中计算矩形的周长,赋值给自定义Shader的_TotalLineLength属性,确保纹理平铺均匀
  • 调整Texture Mode与Tiling参数

    1. 将Line Renderer的Texture Mode设为Stretch,Corner Vertices设为2(保证角部有足够的顶点过渡)
    2. 计算矩形的周长(长×2 + 宽×2),将材质的Tiling X值设置为周长 / 纹理像素宽度(比如纹理宽度是100像素,周长是500,则Tiling X设为5)
    3. 保持纹理的Wrap Mode为Repeat,这样纹理会沿着整个矩形(包括角部)均匀重复,不会变形
  • 拆分矩形为多条线段
    不用单个Line Renderer绘制整个矩形,改为给四条边各添加一个Line Renderer:

    1. 每个边的Line Renderer设置Corner Vertices为0,Texture Mode为Tile
    2. 单独调整每个边的纹理Tiling,让纹理在单条边上正确显示
    3. 精确对齐四个边的端点,模拟完整矩形,角部的纹理可以通过调整相邻边的纹理偏移来匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 02:01:15