Unity ScriptObject创建Asset文件

时间:2021-04-26 20:18:11

创建ScriptObject可以创建带序列化的资源,只保存数据不用绑定在游戏对象上。创建出来的本子资源可以通过资源加载到游戏里使用。这里介绍一下使用Resources加载。

创建好的asset文件也可以在Inspector中进行编辑。

 using System.Collections.Generic;
using UnityEngine; [CreateAssetMenu]
public class ChatConfig : ScriptableObject
{
[SerializeField]
public List<string> ChatContent;
}

这里写一个简单的数据。

其中[CreateAssetMenu]属性可以在Create里点击对应名称创建asset文件。如下图

Unity ScriptObject创建Asset文件Unity ScriptObject创建Asset文件

Unity ScriptObject创建Asset文件可以直接在Inspector界面直接编辑数据

使用Resources Load类型为ChatConfig的对象就可以加载到所有数据,例如

 var content = Resources.Load<ChatConfig>("ChatConfig");

同时也可以通过编写代码来创建asset文件,代码中需要UnityEditor,所以代码要放到Editor文件夹下。如果需要批量生成asset,使用代码会更方便一些。

 using UnityEditor;
using UnityEngine; public class CreateAssetEditor
{
[MenuItem("Assets/Create ScriptObject")]
static void CreateScriptObject()
{
ChatConfig config = ScriptableObject.CreateInstance<ChatConfig>();
config.ChatContent = new System.Collections.Generic.List<string>
{
"A",
"B"
}; AssetDatabase.CreateAsset(config, "Assets/Resources/NewChatConfig.asset");
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
}
}

其中创建了实例后可以对数据进行一个初始化。使用代码时创建asset时,就可以不使用[CreateAssetMenu]属性,以上效果如下图

Unity ScriptObject创建Asset文件

红框内的就是使用unity[MenuItem]来扩展编辑器直接创建asset的效果