问题描述
这个简单的脚本在将它作为组件附加到Text对象并将该Text对象拖到Unity GUI中的检查器中时非常完美,该脚本是:Text object>脚本component>公共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 textdisplay
和textdisplay.text = "hi";
放在一个控制数字面板上一堆按钮的脚本(该脚本附加到父面板)中,然后将Text对象拖到在Panel的检查器的“面板”>“脚本组件”>“公共Text”字段中,出现错误:“ Unity Text Object Reference未设置为对象的实例。” 即使脚本有效。换句话说,它确实将文本更改为显示“ hi”,但仍然给我一个错误。
因此,脚本在两种情况下均有效,但在一种情况下,它给我一个错误。当脚本是独立的,附加到“文本”或“面板”上并且将Text对象拖放到独立脚本组件上时,我没有收到任何错误。当将这两行脚本添加到附加到Panel的较大脚本中并将Text对象拖放到Panel的脚本组件上时,我得到一个错误,尽管文本确实按期望显示。
我尝试关闭Unity和Visual Studio并重新启动。我尝试过删除脚本组件和对象并将它们重新添加到组件的字段中。我仔细检查了我是否正在使用Text对象,而不是TextMeshPro对象。我还尝试将独立脚本附加到面板,然后将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];
}
解决方法
哦,我发现了问题。
答案:我已将脚本的另一个实例附加到直接父对象上方的另一个甚至更高的面板上,然后忘记了它。正是该脚本实例引发了错误,而该脚本的另一个实例正在根据需要修改文本。