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最终都会转成二进制,是一样的。

posted on 2016-12-04 18:31  wantnon  阅读(6825)  评论(0编辑  收藏  举报

导航