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

如何让WorldSpace模式的Canvas始终显示在场景物体最上层?

解决角色头顶Canvas始终显示最上层的问题

以下是几个可行的解决方案,按优先级排序:

1. 使用专属顶层Sorting Layer(最推荐)

你之前用的Default层场景内大量物体可能都在使用,即便把sortingOrder设到100,也可能存在其他物体的排序值更高。正确的做法是创建一个优先级最高的专属层:

  • 打开Unity编辑器的Edit > Project Settings > Tags and Layers,在Sorting Layers列表中添加新层(比如命名为"CharacterUI"),将其拖动到列表最顶端(确保优先级高于所有其他层)。
  • 修改代码:
canvas.renderMode = RenderMode.WorldSpace;
// 替换为你新建的层名
canvas.sortingLayerName = "CharacterUI";
canvas.sortingOrder = 10; // 层优先级已最高,无需设置过大数值

2. 为Canvas单独分配渲染相机

如果场景内存在使用更高Render Queue或特殊Shader的物体,导致Sorting Layer方法失效,可以给Canvas单独分配相机:

  • 创建新相机,调整以下设置:
    • Clear Flags选择Depth Only(避免覆盖场景原有内容)
    • Culling Mask仅勾选Canvas所在的层
    • Depth设置为比主相机更高的数值(比如主相机为0,此相机设为1)
  • 将Canvas的层设置为上述勾选的层,这样该相机只会渲染Canvas,且因Depth更高,渲染结果会叠加在主相机画面之上。

3. 调整UI Shader的Render Queue

若部分3D物体的Shader渲染队列高于UI默认值(UI默认是3000,部分透明物体可能用了3500),可以修改UI的Shader队列:

  • 复制Unity默认的UI/Default Shader,打开后找到Tags { "Queue"="Transparent" },将Transparent改为Overlay或直接设置数值4000(数值越大,渲染越晚,显示层级越高)。
  • 给Canvas下所有UI组件(Image、Text等)替换为这个自定义Shader。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 09:24:57