【问题标题】:How to access Dictionary from other Class's function in C#_ Unity如何在 C#_Unity 中从其他类的函数访问字典
【发布时间】:2021-04-01 16:05:42
【问题描述】:

我是 C# 新手,我不太了解如何继续获取附加到游戏对象的脚本中的元数据。 如何在分支中查看此信息以在 Inspector 中显示?

namespace Speckle.ConnectorUnity
{
    /// <summary>
    /// This class gets attached to GOs and is used to store Speckle's metadata when sending / receiving
    /// </summary>
    public class SpeckleData : MonoBehaviour
    {
        public Dictionary<string, object> Data { get; set; } 
    }
}

您的回答会很有帮助,在此先感谢。

【问题讨论】:

  • 也许这对你有帮助 stackoverflow.com/questions/66545977/… 除了使用 object 作为目标类型将不起作用,因为 object 根本不可序列化......你当然会删除 [HideInInspector] ...

标签: dictionary unity3d


【解决方案1】:

您需要检查documentation 以检查您可以在检查器中看到哪些类型。

如您所见,序列化是通过内部 Unity 序列化系统完成的;不具有 .NET 的序列化功能。因此,并非所有 c# 类都能够在编辑器中显示为序列化字段。另一方面,您的字典是一个属性。检查您是否也不能在文档中序列化属性。

我的建议是,如果你想这样做,让你的模板类在编辑器中显示为可序列化的,并且你知道的字段可以在编辑器中显示为你的类中的变量,比如这个:

    [Serializable]
    class MyInspectorCoolClass {
        int myInt;
        string myString;
    }

    class MyMonoBehaviour: MonoBehaviour {
        public MyInspectorCoolClass myFields; //your fields will be displayed in the inspector
    }

因此,对于您的具体情况,您需要知道要序列化的 object 具体类型。如果您需要在检查器中显示一组键、值对象,我认为您打算使用您的字典,我建议您按照我的示例为检查器类型保持器类创建一个 List,如下所示:

class MyMonoBehaviour: MonoBehaviour {
    public List<MyInspectorCoolClass> myFields; 
}

或私有序列化字段,在编辑器中显示以附加引用,但在访问代码中的变量时保持私有。

class MyMonoBehaviour: MonoBehaviour {
    [SerializeField]
    private MyInspectorCoolClass myFields; //your fields will be displayed in the inspector
}

如果您可能会受到诱惑,c# Tuples 也不能在检查器中显示为序列化字段。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-11
    • 1970-01-01
    • 2013-10-02
    • 1970-01-01
    • 1970-01-01
    • 2013-09-13
    • 1970-01-01
    • 2019-12-18
    相关资源
    最近更新 更多