【问题标题】:Using drag-and-drop reference, moving location of script results in "Unity Text Object Reference not set to an instance of an object"使用拖放引用,移动脚本位置会导致“Unity Text Object Reference not set to an instance of an object”
【发布时间】:2020-11-04 01:47:20
【问题描述】:

当这个简单的脚本作为一个组件附加到一个 Text 对象并且该 Text 对象被拖到 Unity 的 GUI 中的检查器时,它可以完美运行:Text object > script component > field for public Text。

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 对象拖到面板,面板>脚本组件>公共文本字段,我收到错误:“Unity Text Object Reference not set to an instance of an object.” 即使脚本有效。 换句话说,它确实将文本更改为显示“hi”,但仍然给我一个错误。

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

我已尝试关闭 Unity 和 Visual Studio 并重新启动。我尝试将脚本组件和对象删除并重新添加到组件的字段中。我仔细检查了我使用的是 Text 对象,而不是错误的 TextMeshPro 对象。我还尝试将独立脚本附加到面板并将文本对象拖到那里。这没有错误。因此,要么将这些脚本行合并到一个更大的脚本中,要么在脚本组件上有一堆其他对象似乎导致此错误时进行拖放引用。

有什么想法吗?

如果您对较大的脚本感到好奇,请从这里开始。除了我带来的那两行之外,在较大的脚本中没有提及 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];
    }

...

【问题讨论】:

    标签: c# unity3d text drag-and-drop object-reference


    【解决方案1】:

    哦,我发现了问题。

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

    【讨论】:

      猜你喜欢
      • 2014-02-04
      • 1970-01-01
      • 1970-01-01
      • 2012-01-02
      • 2017-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多