C# 变量从未分配给,并且始终具有默认值null
我试图通过使用可序列化字段生成私有变量,然后在下面使用{get{return}}来访问Unity中的元素。我是C#and Unity的初学者,所以我希望能有一个简单的解释。这些可序列化字段中的每一个都有相同的错误,并且不会出现在我的Unity inspector中C# 变量从未分配给,并且始终具有默认值null,c#,unity3d,C#,Unity3d,我试图通过使用可序列化字段生成私有变量,然后在下面使用{get{return}}来访问Unity中的元素。我是C#and Unity的初学者,所以我希望能有一个简单的解释。这些可序列化字段中的每一个都有相同的错误,并且不会出现在我的Unity inspector中 public struct UIElements { [SerializeField] RectTransform answerContentArea; public RectTrans
public struct UIElements
{
[SerializeField] RectTransform answerContentArea;
public RectTransform AnswerContentArea { get { return answerContentArea; } }
[SerializeField] TextMeshProUGUI questionInfoTextObject;
public TextMeshProUGUI QuestionInfoTextObject { get { return questionInfoTextObject; } }
[SerializeField] TextMeshProUGUI scoreText;
public TextMeshProUGUI ScoreText { get { return scoreText; } }
[Space]
[SerializeField] Image resolutionBG;
public Image ResolutionBG { get { return resolutionBG; } }
[SerializeField] TextMeshProUGUI resolutionStateInfoText;
public TextMeshProUGUI ResolutionStateInfoText { get { return resolutionStateInfoText; } }
[SerializeField] TextMeshProUGUI resolutionScoreText;
public TextMeshProUGUI ResolutionScoreText { get { return resolutionScoreText; } }
[Space]
[SerializeField] TextMeshProUGUI highScoreText;
public TextMeshProUGUI HighScoreText { get { return highScoreText; } }
[SerializeField] CanvasGroup mainCanvasGroup;
public CanvasGroup MainCanvasGroup { get { return mainCanvasGroup; } }
[SerializeField] RectTransform finishUIElements;
public RectTransform FinishUIElements { get { return finishUIElements; } }
}
您需要将结构标记为可序列化,以便在Unity Inspector中显示它,如下所示:
[Serializable]
public struct UIElements
{
// ...
}
至于警告,这是正常的,因此您可以忽略它。只需确保在inspector中设置相应的值。Unity提供了MonoBehavior的字段,您可以使用这些字段在编辑器中设置字段链接,然后从代码中使用它
public struct UIElements
{
[SerializeField] RectTransform answerContentArea;
public RectTransform AnswerContentArea { get { return answerContentArea; } }
[SerializeField] TextMeshProUGUI questionInfoTextObject;
public TextMeshProUGUI QuestionInfoTextObject { get { return questionInfoTextObject; } }
[SerializeField] TextMeshProUGUI scoreText;
public TextMeshProUGUI ScoreText { get { return scoreText; } }
[Space]
[SerializeField] Image resolutionBG;
public Image ResolutionBG { get { return resolutionBG; } }
[SerializeField] TextMeshProUGUI resolutionStateInfoText;
public TextMeshProUGUI ResolutionStateInfoText { get { return resolutionStateInfoText; } }
[SerializeField] TextMeshProUGUI resolutionScoreText;
public TextMeshProUGUI ResolutionScoreText { get { return resolutionScoreText; } }
[Space]
[SerializeField] TextMeshProUGUI highScoreText;
public TextMeshProUGUI HighScoreText { get { return highScoreText; } }
[SerializeField] CanvasGroup mainCanvasGroup;
public CanvasGroup MainCanvasGroup { get { return mainCanvasGroup; } }
[SerializeField] RectTransform finishUIElements;
public RectTransform FinishUIElements { get { return finishUIElements; } }
}
在您的情况下,您需要将
UIElements
作为继承自MonoBehavior
的类,将其附加到场景中的某些游戏对象并设置所需的链接-在此之后,您可以使用场景中对象的链接。您的所有字段似乎都定义为。如果我错了,有人会纠正我,但为了在inspector中显示属性,您必须“创建”自己的inspector,因为Unity无法安全地序列化/反序列化属性,因为getter和setter可以根据它们封装的代码产生不同的效果
我希望这能给你更多的启示
编辑
也可能有用这是正常的。您可以将它们设置为null,它将关闭,或为空值。@BugFinder我尝试将它们设置为null,但出现了一个错误“UIElements”在structs.ah中不能有实例属性或字段初始值设定项,因为它是一个结构而不是一个类。。如果这是一门课,你会…@BugFinder啊,别担心,伙计,我只是把它修好了。我必须将[Serializable()]放在结构之前,以便Unity能够识别我正在使用它。无论如何,感谢您的帮助:数据这里有一些属性可以访问Inspector中显示的私有字段。如果您在答案中的链接中包含信息,以防帖子被编辑/删除或线程丢失,则可以改进您的答案。所有显示的属性都使用序列化字段备份字段。。。因此,检查员没有任何问题。