尝试从输入字段获取文本时出现 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
。里面有代码的脚本附在 Canvas
和 InputField
连接到 [SerializeField]
里面的脚本在 Canvas
.
我建议您将 InputField
设为 class 变量,这样您以后可以更轻松地访问它。此外,您应该只为您的 InputField
创建一个 [SerializeField]
,这样您就可以将它拖到您的脚本中。这样也可以避免一些错误。
将 InputField(TMP) 更改为 InputField(Legacy)
我是 unity 的新手,想从输入文本字段中获取值。我发现了这个问题
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
。里面有代码的脚本附在 Canvas
和 InputField
连接到 [SerializeField]
里面的脚本在 Canvas
.
我建议您将 InputField
设为 class 变量,这样您以后可以更轻松地访问它。此外,您应该只为您的 InputField
创建一个 [SerializeField]
,这样您就可以将它拖到您的脚本中。这样也可以避免一些错误。
将 InputField(TMP) 更改为 InputField(Legacy)