Instantiate 使用预制体生成物体 | Unity C#

这篇博客介绍了在Unity中如何使用C#的Instantiate函数来通过预制体生成游戏物体。文章强调了两种不同形式的函数,一种带有父物体参数,用于将生成的对象挂载在特定父物体下,另一种则不设置父物体。还提到了旋转参数,通常传入Quaternion.identity表示不进行旋转。最后,总结了何时使用带父物体参数的函数(需要随父物体移动)以及如何控制预制体的位置原点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

很多时候需要使用按钮、手势等操作交互,生成游戏物体,一般使用 Instantiate 函数,用prefab预制体生成物体


一个简单的例子,事先在Inspector界面中绑定好预制体

public Class PlayerManager : MonoBehaviour
{
    public GameObject Player;
    public Transform pos;//位置
    
    void CreatePlayer()
    {
        instantiate(Player, pos, Quartenion.identity);
    }
}

看一下与 instantiate 所有的相关函数

与 instantiate 相关的函数

Object.Instantiate | Unity Official

public static Object Instantiate(Object original);
public static Object Instantiate(Object original, Transform parent);
public static Object Instantiate(Object original, Transform parent, bool instantiateInWorldSpace);

public static Object Instantiate(Object original, Vector3 position, Quaternion rotation);
public static Object Instantiate(Object original, Vector3 position, Quaternion rotation, Transform parent);

带有 parent 参数的函数,表示生成的游戏对象都会挂载到指定的父物体上;无 parent 参数的函数,则无父物体

instantiateInWorldSpace ,如果为 false 表示其位置是相对于父物体,true 则以世界坐标显示(这里的坐标指预制体的坐标)

rotation 表示其旋转参数,一般如果不需要修改,则传入 Quaternion.identity 表示一个单位矩阵,不旋转


总结

总的来说,如果需要挂载在某个物体下,之后需要随着物体移动,那么使用带 parent 参数的函数
如果需要旋转,选择有 rotation 的函数
instantiateInWorldSpace 决定预制体的相对原点是父物体还是世界坐标原点,即Vector3.zero

Unity中,使用代码生成预制体(Prefab)主要有以下几种方法: 1. **脚本动态创建**:你可以编写C#脚本,在运行时创建新的GameObject,并将其转换为Prefab。这通常是通过`Instantiate`或`ScriptableObject.CreateInstance`等Unity提供的API来实现的。例如: ```csharp GameObject newObj = new GameObject("New Prefab"); PrefabAsset prefab = PrefabUtility.CreateEmptyPrefab("Path/To/NewPrefab.prefab"); PrefabUtility.SaveAsPrefabAsset(newObj.transform.position, prefab); ``` 2. **序列化字段创建**:如果想要基于某个预设的配置或数据生成Prefab,可以在剧本中设置一个公共类,包含所需组件和属性,并在该类实例化时保存为Prefab。在编辑器中,选择该类并右键单击“Create Prefab”会自动创建一个Prefab。 3. **Unity Editor Tools扩展**:有一些第三方工具如Unity Asset Tools包允许开发者编写插件,扩展Unity的编辑器功能,以便更复杂地生成Prefab,比如基于用户交互或特定条件的Prefab。 4. **使用Mecanim StateMachine**:如果你需要根据状态机生成预制体Unity的Mecanim系统可以配合使用,创建不同的动画状态并在需要的时候生成对应的Prefab。 5. **C# ScriptableObjects**:利用ScriptableObject和其变体(如AnimatorController、Material等),可以在设计时创建预设并生成Prefab。 每种方法都有其适用场景,选择哪种取决于具体的项目需求和个人喜好。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值