【问题标题】:NullReferenceException when trying to get text from inputfield尝试从输入字段获取文本时出现 NullReferenceException
【发布时间】:2015-07-23 08:07:23
【问题描述】:

我是 Unity 新手,想从输入文本字段中获取值。我发现了这个问题 Get text from Input field in Unity3D with C#,但是当我执行它时,总是会出现同样的错误: NullReferenceExcpetion : Object reference not set to an instance of an object。 这似乎是一个愚蠢的错误,我尝试了一切,但似乎无法修复它。 我的代码:

void Start () {
    var input = gameObject.GetComponent<InputField>();
    input.onEndEdit.AddListener(SubmitName);

}

private void SubmitName(string arg0)
{
    Debug.Log(arg0);
}

我试着把InputField input;在开始功能之前并擦除var,但仍然没有运气。 如果有人可以帮助我解决这个问题,将不胜感激。 我的脚本目前附在哪里的图片。

【问题讨论】:

  • 您应该只在画布或 InputField 上包含脚本。我会把它添加到画布上,这样你就有了一个可以控制他的孩子的元素(InputField 和其他 UI 元素)。但是请将InputFieldHierarchy拖到inspector底部的空白字段,您可以在其中读取无(输入字段)
  • 好的,非常感谢,输入字段无法拖动,但我创建了一个新字段,一切正常。非常感谢。
  • 我只有一个问题,输出是 InputField(UnityEngine.UI.InputField) 而不是我在输入字段中输入的内容。
  • 我真的不知道你的脚本到底是什么,因为你还没有发布它。但在我看来,您忘记在标题中为 ui using UnityEngine.UI; 导入库,因此您可以仅通过名称访问 ui 元素

标签: text unity3d nullreferenceexception input-field


【解决方案1】:

您的代码几乎是正确的,如果您是have a look at the documentation,则必须在调用方法名称之前使用function 调用您的方法。在我看来你在混合c#JS,这里是`js 函数:

public class Example {
    public var mainInputField;
    public function Start() {
        // Adds a listener to the main input field 
        // and invokes a method when the value changes.
        mainInputField.onValueChange.AddListener(function() {
            ValueChangeCheck();
        });
    }
    // Invoked when the value of the text field changes.
    public function ValueChangeCheck() {
        Debug.Log("Value Changed");
    }
}

c# 解决方案:

public class MenuController : MonoBehaviour {

    [SerializeField]
    InputField inputText;

    // Use this for initialization
    void Start () {
        inputText.onValueChange.AddListener(delegate {
            DebugInput();
        });
    }

    private void DebugInput(){
        Debug.Log ("Input: " + inputText);
    }
}

我的层次结构如下所示:

我创建了一个Canvas 并在其中插入了一个InputField。里面有代码的脚本附在Canvas上,InputField连接到Canvas里面脚本里面的[SerializeField]


我建议您将InputField 设为类变量,以便以后更轻松地访问它。此外,您应该为您的InputField 创建一个[SerializeField],以便您可以将其拖到您的脚本中。这也可以避免一些错误。

【讨论】:

  • 您好,感谢您的回复,但我仍然收到未将对象引用设置为对象实例的相同错误。我将我的脚本添加到 InputField。
  • 您是否在画布中添加了InputField,是否通过将InputField 拖到inspector 内的脚本占位符中将其与脚本连接起来?
  • 是的,我都做了,我的脚本附加到 InputField 的文本中。
  • 我只是尝试了,但脚本只在 InputField 上,但它仍然给出了同样的错误。
  • 好的,我将屏幕截图发布到我原来的问题中。
猜你喜欢
  • 2020-06-24
  • 2019-11-13
  • 2013-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-05
  • 1970-01-01
相关资源
最近更新 更多