我有一个TextMeshPro输入字段,但我在获取文本组件时的各种尝试都产生了空引用异常。输入字段名为Name。当玩家提交他们的名称后单击“确定”时,我引用了此对象。下面是GetName脚本:
public class GetName : MonoBehaviour
{
GameObject Name;
// These two are left over from previous attempts.
public TextMeshProUGUI player_name;
public TMP_InputField player_inputField;
private string monicker;
// Integer function should be less bother than a bool when called from another script.
public int IsNameEmpty()
{
monicker = Name.GetComponent<TMP_InputField>().text.ToString();
// Program never gets this far.
另一脚本中的OK函数为:
public class WelcomeButtons : MonoBehaviour
{
public GetName getName;
void TaskOnClick6()
{
Debug.Log("You have clicked the OK button!");
int isName = getName.IsNameEmpty(); // Causes null reference exception.
// Program never gets this far.
4条答案
按热度按时间cnh2zyt31#
从输入字段获取文本的简单方法
ffx8fchx2#
是的,如果您将上面的脚本附加到一个空的游戏对象,那么您的脚本将丢失到包含TMP_InputField组件的游戏对象的链接。您可以通过两种简单的方法来解决这个问题,只需决定哪种方法最适合您:
a)将获取名称脚本附加到也包含TMP_输入字段组件的同一游戏对象。将行“Name.GetComponent<TMP_InputField>().text.ToString();“的字符串<TMP_InputField>;“.
B)将GetName脚本保留在空的游戏对象上。“行中,将其改为“public游戏对象名称”。进入统一编辑器。当选择包含GetName脚本的游戏对象时,您应该会在检查器中看到Name属性和旁边的空字段。将包含TMP_InputField组件的游戏对象拖放到其中。
那么,为什么你的代码以前不能工作呢?GetName脚本需要某种对TMP_InputField组件的引用,而TMP_InputField组件却丢失了。你尝试过从Name属性中获取它,但从未给它赋值。
iecba09b3#
感谢所有我收到的建议。我现在有一个使用OnClick()方法的工作版本:
wbgh16ku4#
只有两行可以工作:
和