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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 21:10:25