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

Unity中如何用C#创建可独立操作的3D资源副本并翻转

解决Unity中AssetBundle加载资源后创建独立GameObject实例的问题

Unity会复用已加载的Prefab原始实例,所以你两次调用LoadAsset得到的是同一个对象引用,修改其中一个的属性必然会影响另一个。要创建可独立操作的GameObject,核心是**实例化(Instantiate)**加载后的Prefab模板,而非直接使用原始对象。

具体实现步骤

  • 仅从AssetBundle加载一次原始Prefab作为模板
  • 通过Instantiate()方法基于模板创建独立实例,每个实例都是完全独立的GameObject,可单独修改属性

代码示例

// 只加载一次原始Prefab模板
GameObject originalApartmentPrefab = assetBundle.LoadAsset<GameObject>("assets/workspace/Apartment.prefab");

// 创建正常版本的独立实例
GameObject apartmentInstance = Instantiate(originalApartmentPrefab);
apartmentInstance.transform.position = new Vector3(0, 0, 0); // 设置位置区分

// 创建翻转版本的独立实例
GameObject flippedApartmentInstance = Instantiate(originalApartmentPrefab);
// 修改缩放实现翻转
flippedApartmentInstance.transform.localScale = new Vector3(
    flippedApartmentInstance.transform.localScale.x * -1,
    flippedApartmentInstance.transform.localScale.y,
    flippedApartmentInstance.transform.localScale.z
);
flippedApartmentInstance.transform.position = new Vector3(5, 0, 0); // 设置位置区分

关键注意点

  • 原始Prefab是资源模板,不要直接修改它的属性,否则所有基于它的实例都会同步变化
  • Instantiate()生成的实例是场景中的独立对象,修改transform、组件等属性不会互相干扰
  • 无需重复加载同一个Prefab,加载一次后多次实例化即可,既节省内存又提升加载效率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 09:54:53