有两种实例化预制件的方法:在设计时或运行时。
在设计时实例化预制件对于在视觉上放置同一对象的多个实例很有用(例如,在设计游戏关卡时放置树)。
要以视觉方式实例化预制件,请将其从项目视图拖到场景层次中。
如果要编写编辑器扩展,还可以实例化以编程方式调用的预制方法:PrefabUtility.InstantiatePrefab()
GameObject gameObject = (GameObject)PrefabUtility.InstantiatePrefab(AssetDatabase.LoadAssetAtPath("Assets/MainCamera.prefab", typeof(GameObject)));
在运行时实例化预制件对于根据某种逻辑(例如,每5秒生成一个敌人)创建对象的实例很有用。
要实例化预制件,您需要对预制件对象的引用。这可以通过public GameObject在MonoBehaviour脚本中包含一个字段(并使用Unity Editor中的检查器设置其值)来完成:
public class SomeScript : MonoBehaviour { public GameObject prefab; }
或通过将预制件放入Resource文件夹并使用Resources.Load:
GameObject prefab = Resources.Load("Assets/Resources/MainCamera");
一旦有了对预制对象的引用,就可以使用Instantiate代码中任何地方的函数实例化它(例如,在创建多个对象的循环中):
GameObject gameObject = Instantiate<GameObject>(prefab, new Vector3(0,0,0), Quaternion.identity);
注意:预制术语在运行时不存在。