unity, 由scriptableObject創建.asset


 

由繼承自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最終都會轉成二進制,是一樣的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM