【问题标题】:Unity Event System with Scriptable Objects: how to completely avoid using a singletonUnity Event System with Scriptable Objects:如何完全避免使用单例
【发布时间】:2020-07-02 23:44:34
【问题描述】:

我有一个从 MonoBehaviour 实例化的可编写脚本的对象。我能够在两者之间来回交流并相应地引发事件。但是在我的场景中有更多的 MonoBehaviours 也需要对可编写脚本的对象做一些其他的来回操作。并且可编写脚本的对象“属于”它被实例化的特定 MonoBehaviour。

所以我的问题是:如何从“MonoBehaviour B”、“MonoBehaviour C”、“MonoBehaviour D”等访问由“MonoBehaviour A”实例化的可脚本化对象?

现在我正在使“Monobehaviour A”成为单例,因此场景中的其他 MonoBehaviours 可以访问它。

【问题讨论】:

  • 那么someGameObject.GetComponent<MonoBehaviourA>()不够吗?
  • @Draco18s 很抱歉造成混淆:MonoBehaviours 位于不同的对象中。
  • 是的,这就是 someGameObject 参考。您可以使用GameObject.Find() 等方式获取这些参考资料。
  • 如果您提前知道对象会在那里,您可以为要与之通信的对象创建公共字段并使用检查器将它们连接起来。
  • draco 在MonoBehaviour B 中说,您可以获取附加到MonoBehaviourA 的游戏对象,然后将脚本作为component 获取,然后您可以修改其变量并使用调用中的方法只要有公开的行为,它就会看起来像MonoBehaviourA.scriptableobject.Method()MonoBehaviourA.scriptableobject.variable

标签: unity3d


【解决方案1】:

您可以使用Resources.FindObjectsOfTypeAll 来查找特定类型的ScriptableObject 的所有实例。

如果你的 MonoBehaviours 中只有一个(我假设你使用的是单例),你可以使用

var scriptableObject = Resources.FindObjectsOfTypeAll(typeof(YOUR_SCRIPTABLE_CLASS))[0];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多