【问题标题】:Global Scriptable Object全局脚本对象
【发布时间】:2019-11-20 12:38:54
【问题描述】:

假设我有这个 ScriptableObject 来表示卡片列表:

using UnityEngine;
using System.Collections;

[CreateAssetMenu(fileName = "CardList", menuName = "Inventory/List", order = 1)]
public class CardList : ScriptableObject {
    public string[] cardName;
    public Sprite[] cardSprite;
}

然后我创建 ScriptableObject 并用我所有的卡片信息填充它。

有没有办法修改此代码,以便任何脚本都可以静态访问它?例如,是否可以给CardList 一个单例行为?

我不想创建另一个类,创建一个可以引用CardListScriptableObjectManager 会很容易。我宁愿直接打电话给CardList.instance.cardName[i]

【问题讨论】:

  • 别在意我的最后评论,我错过了你的意思。 This blog post 在这里可能会更有帮助。

标签: unity3d singleton scriptable-object


【解决方案1】:

当然,您可以将其创建为单例。 假设我们有 Unity 项目,其文件层次结构类似于

UnityProject
- Assets (directory)
    Scripts
        SampleScriptableObject.cs   
- Resources (directory)
    SampleScriptableObject.asset
- Project
- ..etc

在“SampleScriptableObject”类中会是这样的

public class SampleScriptableObject<T> : ScriptableObject where T : ScriptableObject  
{
    private static T _instance;
    public T GetInstance()
    {
        if (_instance == null)
        {
            _instance = Resources.Load(typeof(T).Name) as T;
        }
        return _instance;
    }
}

您可以根据需要将可编写脚本的对象用作单例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-26
    • 2012-01-06
    • 2016-03-03
    相关资源
    最近更新 更多