Unity 2D实例化预制体后无法禁用子物体的问题求助
问题分析与解决方法
你代码里的核心问题是:你修改的是从Resources加载的原始预制体,而不是场景中实例化出来的克隆体。
Resources.Load("Dog")获取的是Project窗口里的预制体本身,Instantiate会复制这个预制体生成一个克隆体到场景中,但你后续的循环操作的还是原始预制体的子物体,自然不会影响场景里的Dog(clone)。
修正后的代码如下:
void createPuzzleGame() { // 加载原始预制体 GameObject puzPrefab = Resources.Load("Dog") as GameObject; // 实例化并保存克隆体的引用 GameObject puzClone = Instantiate(puzPrefab, PuzArea.transform); // 遍历克隆体的子物体 for (int i = 0; i < puzClone.transform.childCount; ++i) { Transform currentItem = puzClone.transform.GetChild(i); if (currentItem.name.StartsWith("a") || currentItem.name.StartsWith("og")) { currentItem.gameObject.SetActive(false); } else { Debug.Log(currentItem.name); } } }
另外建议变量名遵循小驼峰命名规范(比如把Puz改成puzPrefab),能提升代码可读性。
内容的提问来源于stack exchange,提问作者Rerise Studios
相关产品推荐
相关产品推荐

