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

Unity 2D使用URP时栅栏瓦片的分层显示异常问题

解决方案

1. 调整Sprite排序基准点与轴心

针对两格高的栅栏瓦片:

  • 在Sprite Editor里把栅栏Sprite的轴心(Pivot)设为底部中心(0.5, 0),确保排序时以栅栏底部的Y值为基准。
  • 选中栅栏Tile的Sprite Renderer组件,将Sort Point改为Pivot,让Unity用轴心的Y值来判断渲染顺序。
  • 角色的Sprite Renderer同样设置Sort Point为Pivot,并把角色的轴心设为脚部位置(0.5, 0),让排序基准对应角色站立位置。
  • 若调整轴心后瓦片在Tilemap里偏移,在Tilemap的Inspector面板Tile Settings中调整Tile Offset修正位置。

2. 拆分栅栏瓦片适配分层遮挡

因为单一垂直瓦片无法同时满足“下半部分在角色后、上半部分在角色前”的需求,可把两格高的栅栏拆成上下两个独立瓦片:

  • 下半部分瓦片:设置Sorting Order低于角色,保证角色在下方时显示在栅栏前面。
  • 上半部分瓦片:设置Sorting Order高于角色,保证角色在上方时被栅栏挡住。
  • 组合放置瓦片形成完整栅栏,仅保留底部瓦片的碰撞体,顶部瓦片碰撞体设为None避免阻碍玩家。

3. 检查URP 2D渲染配置

  • 打开Project Settings > Graphics,找到你的URP资源,进入2D Renderer面板。
  • 确认Transparency Sort Axis为(0, 1, 0)(Y轴向上排序),Sorting Mode为Transparency,保证排序逻辑符合预期。

4. 脚本动态调整排序层级(可选)

如果以上方法不适用,用脚本根据角色位置动态切换栅栏的排序优先级:

public class FenceSorting : MonoBehaviour
{
    public Transform player;
    private SpriteRenderer _fenceRenderer;

    void Start()
    {
        _fenceRenderer = GetComponent<SpriteRenderer>();
    }

    void Update()
    {
        // 假设栅栏高度为2单位,顶部Y坐标为transform.position.y + 1
        if (player.position.y > transform.position.y + 1f)
        {
            _fenceRenderer.sortingOrder = 1; // 设为高于角色的排序值(角色默认设为0)
        }
        else
        {
            _fenceRenderer.sortingOrder = -1; // 设为低于角色的排序值
        }
    }
}

把脚本挂到栅栏对象上,指定玩家的Transform组件即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 03:16:15