ScriptableObjects 介绍

ScriptableObjects 是未绑定到场景或游戏对象的序列化对象,如 MonoBehaviours 所示。换句话说,它们是绑定到项目内资产文件的数据和方法。这些 ScriptableObject 资产可以传递给 MonoBehaviours 或其他 ScriptableObjects,可以访问它们的公共方法。

由于它们作为序列化资产的性质,它们可以构建出色的管理器类和数据源。

创建 ScriptableObject 资产

下面是一个简单的 ScriptableObject 实现。

using UnityEngine;

[CreateAssetMenu(menuName = "StackOverflow/Examples/MyScriptableObject")]
public class MyScriptableObject : ScriptableObject
{
    [SerializeField]
    int mySerializedNumber;

    int helloWorldCount = 0;

    public void HelloWorld()
    {
        helloWorldCount++;
        Debug.LogFormat("Hello! My number is {0}.", mySerializedNumber);
        Debug.LogFormat("I have been called {0} times.", helloWorldCount);
    }
}

通过将 CreateAssetMenu 属性添加到类中,Unity 将在 Assets / Create 子菜单中列出它。在这种情况下,它位于 Assets / Create / StackOverflow / Examples 下

创建后,可以通过 Inspector 将 ScriptableObject 实例传递给其他脚本和 ScriptableObjects。

using UnityEngine;

public class SampleScript : MonoBehaviour {

    [SerializeField]
    MyScriptableObject myScriptableObject;

    void OnEnable()
    {
        myScriptableObject.HelloWorld();
    }
}