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
相关产品推荐
相关产品推荐

