美文网首页
ScriptableObject

ScriptableObject

作者: 烂醉花间dlitf | 来源:发表于2021-05-17 09:28 被阅读0次

创建

方法一:在编辑器面板创建

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[CreateAssetMenu(menuName ="MyScriptableObject/GameInfo")]
public class GameInfo : ScriptableObject
{
    public string PlayerName;
    public int Score;
    public int Level;

    public override string ToString()
    {
        return string.Format("name:{0} score:{1} level:{2}", PlayerName, Score, Level);
    }
}


点击之后会创建一个以 .asset 为后缀的资源,Inspector 面板是这样的:

方法二:在代码中创建
ScriptableObject.CreateInstance(typeof(GameInfo)) as GameInfo; 这样会返回一个临时对象,结束运行之后就没了

使用

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ScriptableObjectTest : MonoBehaviour
{
    [SerializeField]
    private GameInfo _gameInfo;
    [SerializeField]
    private GameInfo _gameInfo2;
    private GameInfo _gameInfo3;
    [SerializeField] Material _material;
    void Start()
    {
        // 材质等资源,在代码中被修改的话,结束运行也是被修改之后的结果
        _material.SetColor("_Color", Color.black);
        
        Debug.Log(_gameInfo.ToString());  // name:烂烂 score:10 level:2 ,这里的烂烂是在编辑器中赋的值

        _gameInfo.PlayerName = "喵喵";   // 结束运行之后在 _gameInfo 的编辑器中查看,已经变成了 "喵喵"
        
        Debug.Log(_gameInfo2.ToString());  // name:花花 score:5 level:1

        _gameInfo3 = ScriptableObject.CreateInstance(typeof(GameInfo)) as GameInfo;  // 临时量,除非保存到了本地
    }
}

总之,将其理解为是一种数据资源就可以了,在游戏中被更改的话,那么就会被更改,就像上面的材质球一样,运行过一遍之后,它就是黑的了。

参考

https://blog.csdn.net/candycat1992/article/details/52181814

相关文章

网友评论

      本文标题:ScriptableObject

      本文链接:https://www.haomeiwen.com/subject/rkizzktx.html