zoukankan      html  css  js  c++  java
  • 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最终都会转成二进制,是一样的。

  • 相关阅读:
    OpenCV on Mac OSX: A step-by-step guide
    opencv打开摄像头获取视频程序
    使用find_if算法搜寻map的value
    c++如何理解map对象的value_type是pair类型
    关联容器执行器指定排序规则
    仿函数和函数配接器
    C++的异常处理
    back_insert_iterator和insert_iterator
    copy函数与ostream_iterator、reverse_iterator
    const_cast
  • 原文地址:https://www.cnblogs.com/wantnon/p/6131396.html
Copyright © 2011-2022 走看看