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

Unity循环实例化GameObject/克隆体时如何传递不同参数

问题核心原因

Instantiate()方法会返回新生成的克隆对象实例,你当前代码调用该方法时没有接收返回值,后续所有位置设置、参数赋值操作全部作用在原始基准对象Example上,没有对新生成的克隆体做任何修改。循环最后一次给Example设置的速度参数会同步到所有从它生成的克隆体上,最终表现为所有实例参数完全一致。

你提到的直接新建GameObject无法渲染的问题,是因为new GameObject()生成的是无任何组件的空对象,没有挂载渲染组件、业务脚本,自然无法正常显示,和克隆逻辑无关。

修复方案
  • 调用Instantiate()时用变量接收返回的新实例引用
  • 所有针对新对象的位置调整、参数赋值操作,全部通过新实例的引用执行,不要修改原始基准对象Example

修正后的代码如下:

foreach (float a in ListA)
{
    // 接收新生成的克隆实例
    GameObject spawnedObj = Instantiate(Example);

    // 对新实例设置坐标
    spawnedObj.transform.position = new Vector2(0f, up);

    // 给新实例挂载的脚本设置独立参数
    NewBehaviourScript targetScript = spawnedObj.GetComponent<NewBehaviourScript>();
    targetScript.SetSpeed(
        Assets.Class1.random.Next(20, 70) * 1f,
        Assets.Class1.random.Next(20, 70) * 1f,
        Assets.Class1.random.Next(20, 70) * 1f
    );

    up += 40f;
}
额外注意点
  • 不要在循环内部重复初始化随机数生成器,保持Assets.Class1.random为全局单例实例即可,否则相同时间种子下会生成完全一致的随机值
  • 不需要重复调用AddComponent给新对象加脚本,Instantiate生成的克隆体会完整保留基准对象上的所有组件,直接获取对应组件修改参数即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 01:03:36