我已经扎实地工作了几个小时,似乎什么也做不了,因此,非常感谢您的帮助。 我在Unity中创建了一些TextMeshPro UI InputField,在用户输入内容后似乎无法访问文本。当它是普通的InputField而不是TM Pro版本时,我可以这样做。我创建了一个TMP_InputField类型的Serializefield,它已连接到检查器中(还包括使用TMPro命名空间)。 有人可以概述一下将文本放入变量中所需的步骤,因为我很困惑!该脚本当前位于其他GameObject上。我有一个类型为TMP_InputField的数组,称为theFields,当我调试theFields [0] .name时似乎工作正常(使用FindObjectsOfType <>),但是当我尝试仅访问specificField.text时,它在尝试访问时抛出空引用异议在比赛期间编辑字段。任何教程/支持都将非常受欢迎!
答案 0 :(得分:1)
您尝试使用TMP_InputField检查器上的UnityEvents字段吗?
我制作了一个简单的脚本,它与TMP_InputField组合
using UnityEngine;
public class InputfieldListener : MonoBehaviour
{
public void OnChangedInputField(string input)
{
Debug.Log("[OnChangedInputField] " + input);
}
public void OnEndedInputField(string input)
{
Debug.Log("[OnEndedInputField] " + input);
}
public void OnSelectedInputField(string input)
{
Debug.Log("[OnSelectedInputField] " + input);
}
public void OnDeslectedInputField(string input)
{
Debug.Log("[OnDeslectedInputField] " + input);
}
}
然后您可以找到每个事件的日志。
仅供参考,创建者有一个youtube channel,还有一个related video tutorial。
答案 1 :(得分:0)
using TMPro;
public TMP_InputField TMP_IF;
TMP_IF.interactable = true;
TMP_IF.text = "whatever you want";
对于那些对2020年感兴趣的人:) 似乎可交互属性立即被禁用,解决方案是启用它,以便可以更新文本...
答案 2 :(得分:0)
我只是编写了代码,然后在编辑器中将 TMP_InputField 对象拖到脚本中的相应插槽中。
所以,从代码角度来说,我会有像 Milorad Zivanovic 节目那样的剧本。
如果你想要多个,你可能有: public TMP_InputField [] myInputs;
在编辑器中(如上面我第一句话中所述),您只需点击加号按钮并将它们拖入。或者只是突出显示它们并一次性全部拖入。如果您在编辑器中锁定对象来执行此操作(右上角的小锁定图标),请不要忘记将其解锁。
要在您的代码中访问,您可以循环或使用索引。喜欢第一个你会这样做: {//...以某种方式
myInputs[0].text = "东西"; }
PS:我不必明确设置可交互字段。
PPS:如果您喜欢使用 Unity 的 Event,HyoJin KIM 给出的答案非常好且最好。我只是给出了这个答案,所以你会有一种可能与你最初的尝试相匹配的额外方法。
请注意,如果您确实选择了后一种方法,则很容易犯选择相同方法的静态版本的错误(它们被列出了两次!)很多时候我都会犯这个错误。大多数情况下选择最上面的一个(非静态,又名动态)!