Unity 2D精灵小尺寸大量排列时轮廓粗细不均问题求助
解决方块网格轮廓粗细不均的问题
核心原因
相邻方块的独立轮廓在贴合处重叠,导致重叠区域的线条视觉上加倍变粗,而网格边缘的方块只有单侧轮廓,所以线条更细。
具体解决方案
1. 统一生成网格轮廓(推荐)
放弃给单个方块加轮廓,改为给整个网格整体生成轮廓:
- 遍历所有方块的外边缘,只保留网格最外围的边以及内部不与其他方块相邻的边(比如有缺口的地方)
- 用这些边绘制整体轮廓,彻底避免相邻边重叠。
2. 调整单个方块的轮廓绘制逻辑
给每个方块只绘制不与其他方块相邻的边:
- 检查每个方块的上下左右四个方向是否有相邻方块
- 只绘制没有相邻方块的那几条边,比如右侧没有方块就画右边的轮廓,下方有方块就不画下边的轮廓
- 伪代码示例:
def draw_block_outline(block_x, block_y, size): # 检查上下左右是否存在相邻方块 has_left = grid.has_block(block_x - 1, block_y) has_right = grid.has_block(block_x + 1, block_y) has_top = grid.has_block(block_x, block_y + 1) has_bottom = grid.has_block(block_x, block_y - 1) # 仅绘制无相邻方块的边 if not has_left: draw_line((block_x*size, block_y*size), (block_x*size, (block_y+1)*size), color=(0,0,0)) if not has_right: draw_line(((block_x+1)*size, block_y*size), ((block_x+1)*size, (block_y+1)*size), color=(0,0,0)) if not has_top: draw_line((block_x*size, (block_y+1)*size), ((block_x+1)*size, (block_y+1)*size), color=(0,0,0)) if not has_bottom: draw_line((block_x*size, block_y*size), ((block_x+1)*size, block_y*size), color=(0,0,0))
3. 使用Shader优化轮廓(适合支持Shader的2D/3D场景)
编写自定义Shader,让方块只渲染自身不被其他方块遮挡的轮廓部分:
- 在Shader中检测相邻像素是否属于其他方块,仅在边界处绘制轮廓
- 从底层避免相邻轮廓重叠,同时保持视觉统一。
4. 调整轮廓绘制偏移(临时 workaround)
如果不想修改核心逻辑,可以尝试将轮廓的绘制范围缩小到方块内部:
- 把原本向外扩展的轮廓改为向内收缩半个轮廓宽度
- 这样相邻方块的轮廓不会重叠,但需要微调轮廓厚度来保证视觉效果。
内容的提问来源于stack exchange,提问作者SengunSipahi
相关产品推荐
相关产品推荐

