由繼承自scriptableObject的類X創建.asset文件。
假設類X的定義為:
[System.Serializable]
public class X : ScriptableObject {
public float m_a;
}
方法一:寫代碼創建。
#if UNITY_EDITOR
string path = "Assets/Resources/x.asset";
X scriptableObj = ScriptableObject.CreateInstance<X> ();
UnityEditor.AssetDatabase.CreateAsset (scriptableObj, path);
UnityEditor.AssetDatabase.SaveAssets ();
UnityEditor.AssetDatabase.Refresh();
#endif
(補充:對於如上創建出來的x.asset,加載寫法是:
若用assetDatabase加載:
#if UNITY_EDITOR
UnityEditor.AssetDatabase.LoadAssetAtPath("Assets/Resources/x.asset");
#endif
若用Resource.Load加載:
Resources.Load("x");
)
方法二:通過菜單創建。
在類X前添加CreateAssetMenu屬性,會自動在系統create菜單中添加對應的菜單項。
[CreateAssetMenu(fileName="x",menuName="(custom) X")]
[System.Serializable]
public class X : ScriptableObject {
public float m_a;
}
參考:
http://baba-s.hatenablog.com/entry/2015/06/13/000000
http://answers.unity3d.com/questions/1079664/how-do-i-use-the-createassetmenu-attribute.html
----------------補充:
若把[System.Serializable]改為[PreferBinarySerialization],則可實現二生成進制asset,對於unity編輯器中加載,內存占用和加載速度會有很大提升。但對於游戲包而言因為asset最終都會轉成二進制,是一樣的。