繁体   English   中英

使用拖放引用,移动脚本位置会导致“Unity 文本对象引用未设置为对象的实例”

[英]Using drag-and-drop reference, moving location of script results in "Unity Text Object Reference not set to an instance of an object"

当这个简单的脚本作为一个组件附加到一个 Text 对象并且该 Text 对象被拖动到 Unity 的 GUI 中的检查器时,这个简单的脚本可以完美地工作:文本对象 > 脚本组件 > 公共文本字段。

using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.UI;

public class DisplayReading : MonoBehaviour
{
    public Text textDisplay;

    void Start()
    {
        textDisplay.text = "hi";
    }
}

然而...

如果我使用public Text textDisplaytextDisplay.text = "hi"; 并将它们放在一个脚本中,该脚本控制数字面板上的一堆按钮 - 附加到父面板的脚本 - 并将 Text 对象拖到面板的检查器中, Panel > script component > field for the public Text ,我收到错误消息:“未将 Unity 文本对象引用设置为对象的实例。” 即使脚本有效。 换句话说,它确实将文本更改为显示“hi”,但仍然给我一个错误。

所以脚本在这两种情况下都有效,但在一种情况下它给了我一个错误。 当脚本是独立的,附加到文本或面板,并且文本对象被拖放到独立脚本组件上时,我没有得到任何错误。 当将这两行脚本添加到附加到面板的较大脚本中并且将 Text 对象拖放到面板的脚本组件上时,我收到错误消息,尽管文本确实按需要显示。

我尝试关闭 Unity 和 Visual Studio 并重新启动。 我尝试删除并重新添加脚本组件和对象到组件的字段。 我确实仔细检查过我使用的是 Text 对象,而不是错误的 TextMeshPro 对象。 我还尝试将独立脚本附加到面板并将 Text 对象拖到那里。 这没有错误。 因此,当脚本组件上有一堆似乎导致此错误的其他对象时,可以将这些脚本行放入更大的脚本中,或者与拖放引用有关。

有任何想法吗?

如果您对更大的脚本感到好奇,请从这里开始。 除了我带来的那两行之外,在较大的脚本中没有提到 Text 或 text 或对 Text 对象的任何其他引用。 是的,我确实记得拖放文本对象。 下面是我的检查员的快照。

using System;
using System.Collections;
using System.Collections.Generic;
using System.Net;
using TMPro;
using UnityEditorInternal;
using UnityEngine;
using UnityEngine.UI;

public class Numpad : MonoBehaviour
{
  
    string[] padnumbers = { "0", "0", "0"};
    string[] combinednum = new string[4];
    string[] displaynum = new string[4];
    bool[] positions = { false, false, false };
    int pos;

    public GameObject B1;
    public GameObject B2;
    public GameObject B3;
    public GameObject B4;
    public GameObject B5;
    public GameObject B6;
    public GameObject B7;
    public GameObject B8;
    public GameObject B9;
    public GameObject Bclear;
    public GameObject B0;
    public GameObject Bdot;
    public GameObject SaveButton;
    public GameObject ManInput;
    public Text textDisplay;

    void Start()
    {
        textDisplay.text = "hi";

        combinednum[0] = padnumbers[0];
        combinednum[1] = padnumbers[1];
        combinednum[2] = ".";
        combinednum[3] = padnumbers[2];
    }

... Unity Inspector 窗口快照

哦,我发现了问题。

答:我已经将脚本的另一个实例附加到直接父级上方的另一个更高的面板上,然后忘记了它。 正是脚本的那个实例引发了错误,而脚本的另一个实例正在根据需要修改文本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM