【问题标题】:Setting text in a unity inputfield在统一输入字段中设置文本
【发布时间】:2016-06-27 16:32:04
【问题描述】:

用户注册后,输入字段应自动填写当前存储在用户首选项中的电子邮件地址。我有这个工作正常。

我的问题是将此变量输出到主页的输入字段中。如果有人以前管理过,这里的任何帮助都会很棒。每次我尝试获取输入字段的文本时,它都会返回一个空引用。

    GameObject inputFieldGo = GameObject.Find("email");
    InputField inputFieldCo = inputFieldGo.GetComponent<InputField>();
    inputFieldCo.text = "hello";

NullReferenceException:对象引用未设置为对象的实例 firstRun.Start()(在 Assets/Scripts/init/firstRun.cs:31)

【问题讨论】:

  • 会是inputFieldCo.Text 而不是inputFieldCo.text 当您使用调试器单步执行代码时实际会发生什么......?
  • 这个错误基本上表明你的GameObject.Find()方法返回了一个null并且找不到你指定的元素为per the documentation。您可以考虑发布代码以了解如何定义它。您是否尝试过改用GameObject.FindWithTag()
  • @methodman 感谢您的回复。除 .text 部分外,一切正常。
  • @RionWilliams 嗨,它发现游戏对象很好。我让它在找到它时进行调试以输出。当它查找文本时,它返回 Null。当我尝试分配文本时,它显示空引用。
  • this similar question中提到的,顶部有using UnityEngine.UI;的引用吗?调用GetComponent&lt;InputField&gt;() 方法后,您的inputFieldCo 是什么样的?

标签: c# unity3d


【解决方案1】:

检查您的命名空间

您需要确保明确包含适当的 Unity 命名空间以处理 UI 元素:

using Unity.UI;

确保您定位正确的元素

之后,您需要确保您的 GameObject.Find() 方法正确定位您的 InputField 元素(即仔细检查以确保标识符正确)。

确保没有拼写错误(即“email_text”而不是“email”等),因为这将导致您的方法返回null,因此当您尝试设置它的属性时会出现空引用异常。

使用调试器

如果您仍然遇到问题,请考虑记录每个步骤以确定返回 null 的位置,然后考虑可能出了什么问题。某些东西没有被正确实例化吗?有命名错误吗?

【讨论】:

    【解决方案2】:

    搞定了。执行以下操作。

        GameObject email_go = GameObject.Find("email_input");
        Debug.Log(email_go);
        InputField email_in = email_go.GetComponent<InputField>();
        Debug.Log(email_in);
        Debug.Log(email_in.text);
        email_in.text = PlayerPrefs.GetString("email");
        Debug.Log(email_in.text);
    

    感谢@RionWilliams

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-17
      • 2015-07-13
      • 2020-03-14
      • 2018-10-06
      • 1970-01-01
      相关资源
      最近更新 更多