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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 07:45:19