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修改:- 复制URP内置的Unlit Shader代码,创建自定义Shader文件
- 在顶点着色器中,利用Line Renderer顶点的
lineVertexID属性(Unity内置的Line Renderer顶点属性)判断是否为角部顶点,给这些顶点计算对应的纹理坐标,让纹理沿着整个矩形(包括角部)连续平铺 - 核心代码示例(顶点着色器部分):
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; } - 在C#代码中计算矩形的周长,赋值给自定义Shader的
_TotalLineLength属性,确保纹理平铺均匀
调整Texture Mode与Tiling参数
- 将Line Renderer的
Texture Mode设为Stretch,Corner Vertices设为2(保证角部有足够的顶点过渡) - 计算矩形的周长(长×2 + 宽×2),将材质的Tiling X值设置为
周长 / 纹理像素宽度(比如纹理宽度是100像素,周长是500,则Tiling X设为5) - 保持纹理的Wrap Mode为Repeat,这样纹理会沿着整个矩形(包括角部)均匀重复,不会变形
- 将Line Renderer的
拆分矩形为多条线段
不用单个Line Renderer绘制整个矩形,改为给四条边各添加一个Line Renderer:- 每个边的Line Renderer设置
Corner Vertices为0,Texture Mode为Tile - 单独调整每个边的纹理Tiling,让纹理在单条边上正确显示
- 精确对齐四个边的端点,模拟完整矩形,角部的纹理可以通过调整相邻边的纹理偏移来匹配
- 每个边的Line Renderer设置
内容的提问来源于stack exchange,提问作者mullen18
相关产品推荐
相关产品推荐

