Unity技术笔记:用代码创建Prefab

背景:

当一个Prefab比较复杂,重新装配、修改Prefab都需要较多工作,也容易出错。

所有在Unity编辑器中的手动操作都可以用代码完成。编写一次代码可以节省很多重复工作。

构想:

设计一个脚本,在模型被导入模型到Unity工程中时,自动创建为Prefab。


核心步骤与解释:

1、工程目录创建名为“Editor”的文件夹——不被打包,不能在游戏运行时使用,存放Unity编辑器“专用”的脚本和资源。(比如:开发期会用到的扩展工具)。所创建的脚本就放在这里。

2、using UnityEditor;——使用Unity的编辑器相关API。

3、继承AssetPostprocessor——专用于处理资源导入。(官方解释:AssetPostprocessor lets you hook into the import pipeline and run scripts prior or after importing assets.  简单译为:AssetPostprocessor允许连接到关键管线,并在导入资源之前或之后运行脚本。)

4、需要用到AssetsPostprocessor的一个Message函数:

AssetPostprocessor.OnPostprocessModel(GameObject)——这个消息函数在最终的预制件创建和写入磁盘之前被调用,因此可以完全控制生成的游戏对象和组件。

5、其他:

UnityEditor.ModelImporter :用于从editor脚本中获取导入设置

UnityEditor.AssetDatabase:用于获取并操作Assets的接口

UnityEditor.PrefabUtility:用于任意Prefab相关操作的工具类

实操:

using UnityEngine;
using UnityEditor;

class ProcessModel : AssetPostprocessor
{
    void OnPostprocessModel( GameObject input )
    {
        // 只处理名为"xxxx"的模型
        if (input.name != "xxxx")
            return;

        Debug.Log("现在开始处理Prefab!");

        // 取得导入模型的相关信息
        ModelImporter importer = assetImporter as ModelImporter;

        // 读出该模型
        GameObject tar = AssetDatabase.LoadAssetAtPath<GameObject>(importer.assetPath);

        // 将模型创建为prefab
        //GameObject prefab = PrefabUtility.CreatePrefab("Assets/Prefabs/xx.prefab", tar);
        GameObject prefab = PrefabUtility.SaveAsPrefabAsset(tar, "Assets/Prefabs/xx.prefab");

        //------------开始设置Prefab
        // 比如设置Prefab的tag
        prefab.tag = "Enemy";
        //------------等等类似的其他GameObject操作----------------------------
	
}

​

​

右键Reimport重新导入xxxx.fbx,将会调用脚本自动创建xx.Prefab

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值