Unity中ScriptableObject的应用

ScriptableObject是官方的数据容器,可存各种类型(图片、音频、文字等)的数据,且整个ScriptableObject可以被打成AB包,更加方便管理,也不用担心内存问题

ScriptableObject无需解析、使用方便、数据相对安全,是除数据库之外替代JSON、XML的不二选择

[CreateAssetMenu(fileName = "DefaultData", menuName = "创建数据")]
public class data : ScriptableObject
{
    [Header("默认图片")]
    [SerializeField] List<Sprite> DefaultData;
    [Header("默认音效")]
    [SerializeField] List<AudioClip> Soud;
    /// <summary>
    /// 返回默认图片
    /// </summary>
    /// <param name="index"></param>
    /// <returns></returns>
    public Sprite sprite(int index)
    {
        return DefaultData[index];
    }
    public AudioClip Clip(int index)
    {
        return Soud[index];
    }
}

像这样,unity自带的类型都可以直接创建,还有第二种形式:

[CreateAssetMenu(fileName = "DefaultData", menuName = "创建数据")]
public class data : ScriptableObject
{
    [Header("默认图片")]
    [SerializeField] List<mod> Defaultmod;
    [Header("默认音频")]
    [SerializeField] List<SoundEffect> DefaultSoundEffect;
    public Sprite sprite(int index)
    {
        return Defaultmod[index];
    }
    public AudioClip Clip(int index)
    {
        return DefaultSoundEffect[index];
    }

}
[Serializable]
public class mod
{
    public Sprite HeadPortrait;
}
[Serializable]
public class SoundEffect
{
    public AudioClip Clip;
}

 自定义类在使用时必须要加上[Serializable]序列化,才可以在属性面板可视化

[CreateAssetMenu(fileName = "DefaultData", menuName = "创建数据")]

 fileName是创建后默认的名字,menuName是在菜单中的名字

 

 使用时可直接调用方法

猜你喜欢

转载自blog.csdn.net/k253316/article/details/128233834