創建ScriptObject可以創建帶序列化的資源,只保存數據不用綁定在游戲對象上。創建出來的本子資源可以通過資源加載到游戲里使用。這里介紹一下使用Resources加載。
創建好的asset文件也可以在Inspector中進行編輯。
1 using System.Collections.Generic; 2 using UnityEngine; 3 4 [CreateAssetMenu] 5 public class ChatConfig : ScriptableObject 6 { 7 [SerializeField] 8 public List<string> ChatContent; 9 }
這里寫一個簡單的數據。
其中[CreateAssetMenu]屬性可以在Create里點擊對應名稱創建asset文件。如下圖
可以直接在Inspector界面直接編輯數據
使用Resources Load類型為ChatConfig的對象就可以加載到所有數據,例如
1 var content = Resources.Load<ChatConfig>("ChatConfig");
同時也可以通過編寫代碼來創建asset文件,代碼中需要UnityEditor,所以代碼要放到Editor文件夾下。如果需要批量生成asset,使用代碼會更方便一些。
1 using UnityEditor; 2 using UnityEngine; 3 4 public class CreateAssetEditor 5 { 6 [MenuItem("Assets/Create ScriptObject")] 7 static void CreateScriptObject() 8 { 9 ChatConfig config = ScriptableObject.CreateInstance<ChatConfig>(); 10 config.ChatContent = new System.Collections.Generic.List<string> 11 { 12 "A", 13 "B" 14 }; 15 16 AssetDatabase.CreateAsset(config, "Assets/Resources/NewChatConfig.asset"); 17 AssetDatabase.SaveAssets(); 18 AssetDatabase.Refresh(); 19 } 20 }
其中創建了實例后可以對數據進行一個初始化。使用代碼時創建asset時,就可以不使用[CreateAssetMenu]屬性,以上效果如下圖
紅框內的就是使用unity[MenuItem]來擴展編輯器直接創建asset的效果