Unity场景Tilemap与角色莫名克隆问题排查求助
问题分析与解决方案
- 核心问题:你代码里直接
Instantiate了场景中已存在的Tilemap组件,而非预制体。Unity实例化组件时,会连带克隆其所在的整个GameObject,包括对象上的所有其他组件(比如角色组件若在同一对象上,就会被同步克隆),这就是运行时出现双Tilemap、角色莫名复制的原因。 - 修复步骤:
- 将目标Tilemap所在的GameObject保存为预制体(Hierarchy面板选中对象,拖入Project面板即可)
- 修改代码,直接实例化预制体而非Tilemap组件:
int MapNumber = GameState.currentRoom; GameObject mapPrefab = GridsMap[MapNumber]; // GridsMap改为存储预制体引用 CurrentMap = Instantiate(mapPrefab).GetComponent<Tilemap>(); CurrentMap.transform.position = Anchor; - 检查GridsMap数组,确保其中存储的是预制体对象,而非场景中的实例对象
- 额外排查点:如果场景初始就有一个Tilemap实例,运行时代码又实例化一个,必然出现两个实例。可以移除场景中的初始Tilemap,仅通过代码动态生成;或是切换房间前销毁旧的CurrentMap实例:
if(CurrentMap != null) { Destroy(CurrentMap.gameObject); } // 再执行实例化逻辑
内容的提问来源于stack exchange,提问作者костя черникович
相关产品推荐
相关产品推荐

