尝试从输入字段获取文本时出现 NullReferenceException

NullReferenceException when trying to get text from inputfield

我是 unity 的新手,想从输入文本字段中获取值。我发现了这个问题 ,但是当我执行它时总是出现同样的错误: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 之前,但仍然没有运气。 如果有人可以帮助我解决这个问题,将不胜感激。 目前附有我的脚本的图片。

你的代码几乎是正确的,如果你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。里面有代码的脚本附在 CanvasInputField 连接到 [SerializeField] 里面的脚本在 Canvas.


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

将 InputField(TMP) 更改为 InputField(Legacy)