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

如何通过代码隐藏Unity Tilemap且保持其启用状态?

如何在保持Tilemap启用的前提下控制其可见性?

以下几种方案可以实现需求,各有适用场景:

方案1:将TilemapRenderer移至相机忽略的排序层

创建一个新图层(比如命名为Hidden),在相机的Culling Mask中取消勾选该图层。通过代码将TilemapRenderer的排序层切换到这个隐藏层,相机就不会渲染它,同时Tilemap本身保持启用状态。

代码示例:

// 获取目标Tilemap的Renderer组件
TilemapRenderer tilemapRenderer = GameObject.Find("My Tilemap").GetComponent<TilemapRenderer>();

// 切换到隐藏层
tilemapRenderer.sortingLayerName = "Hidden";

// 恢复可见时切换回原排序层(比如默认的"Default")
// tilemapRenderer.sortingLayerName = "Default";

优点:完全停止渲染,无Draw Call开销,性能最优。

方案2:修改材质透明度

给TilemapRenderer的材质设置透明色,实现视觉上的隐藏。注意不要直接修改共享材质(会影响所有使用该材质的对象),建议先复制材质副本。

代码示例:

TilemapRenderer tilemapRenderer = GameObject.Find("My Tilemap").GetComponent<TilemapRenderer>();

// 复制材质实例,避免影响其他对象
Material tempMaterial = new Material(tilemapRenderer.material);
// 将材质透明度设为0
tempMaterial.color = new Color(tempMaterial.color.r, tempMaterial.color.g, tempMaterial.color.b, 0f);
tilemapRenderer.material = tempMaterial;

// 恢复可见时,可将alpha改回1或重新赋值原材质
// tempMaterial.color = new Color(tempMaterial.color.r, tempMaterial.color.g, tempMaterial.color.b, 1f);

优点:支持渐变透明度动画,适合做淡入淡出效果。

方案3:设置Tilemap全局瓦片颜色

通过Tilemap组件的color属性,给所有瓦片统一设置透明色,实现隐藏效果。

代码示例:

Tilemap tilemap = GameObject.Find("My Tilemap").GetComponent<Tilemap>();

// 将整个Tilemap的瓦片颜色设为透明
tilemap.color = new Color(1f, 1f, 1f, 0f);

// 恢复可见时重置颜色
// tilemap.color = Color.white;

优点:可单独控制部分瓦片的透明度(结合SetColor(Vector3Int position, Color color)),灵活性高。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 16:47:34