在Unity中访问TM Pro InputField文本

时间:2019-07-26 15:44:54

标签: unity3d

我已经扎实地工作了几个小时,似乎什么也做不了,因此,非常感谢您的帮助。 我在Unity中创建了一些TextMeshPro UI InputField,在用户输入内容后似乎无法访问文本。当它是普通的InputField而不是TM Pro版本时,我可以这样做。我创建了一个TMP_InputField类型的Serializefield,它已连接到检查器中(还包括使用TMPro命名空间)。 有人可以概述一下将文本放入变量中所需的步骤,因为我很困惑!该脚本当前位于其他GameObject上。我有一个类型为TMP_InputField的数组,称为theFields,当我调试theFields [0] .name时似乎工作正常(使用FindObjectsOfType <>),但是当我尝试仅访问specificField.text时,它在尝试访问时抛出空引用异议在比赛期间编辑字段。任何教程/支持都将非常受欢迎!

3 个答案:

答案 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);
    }
}

Inspector of TMP_InputField

然后您可以找到每个事件的日志。

仅供参考,创建者有一个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 给出的答案非常好且最好。我只是给出了这个答案,所以你会有一种可能与你最初的尝试相匹配的额外方法。

请注意,如果您确实选择了后一种方法,则很容易犯选择相同方法的静态版本的错误(它们被列出了两次!)很多时候我都会犯这个错误。大多数情况下选择最上面的一个(非静态,又名动态)! My scenario using events