unity3d 为什么无法获取输入字段的文本组件

rqmkfv5c  于 2022-11-16  发布在  其他
关注(0)|答案(4)|浏览(206)

我有一个TextMeshPro输入字段,但我在获取文本组件时的各种尝试都产生了空引用异常。输入字段名为Name。当玩家提交他们的名称后单击“确定”时,我引用了此对象。下面是GetName脚本:

public class GetName : MonoBehaviour
{
    GameObject Name;

    // These two are left over from previous attempts.
    public TextMeshProUGUI player_name;
    public TMP_InputField player_inputField;

    private string monicker;

    // Integer function should be less bother than a bool when called from another script.

    public int IsNameEmpty()
    {
        monicker = Name.GetComponent<TMP_InputField>().text.ToString();

    // Program never gets this far.

另一脚本中的OK函数为:

public class WelcomeButtons : MonoBehaviour
{
    public GetName getName;

    void TaskOnClick6()
    {
        Debug.Log("You have clicked the OK button!");

        int isName = getName.IsNameEmpty(); // Causes null reference exception.

        // Program never gets this far.
cnh2zyt3

cnh2zyt31#

从输入字段获取文本的简单方法

public class GetName: MonoBehaviour
{
public TMP_InputField name;

public void TaskOnClick()
{
    if(name =="")
    {
     Debug.log("NO Name Found");
    }
    else
    {
    Debug.log("NAME: "+name);
    }
}
ffx8fchx

ffx8fchx2#

是的,如果您将上面的脚本附加到一个空的游戏对象,那么您的脚本将丢失到包含TMP_InputField组件的游戏对象的链接。您可以通过两种简单的方法来解决这个问题,只需决定哪种方法最适合您:
a)将获取名称脚本附加到也包含TMP_输入字段组件的同一游戏对象。将行“Name.GetComponent<TMP_InputField>().text.ToString();“的字符串<TMP_InputField>;“.
B)将GetName脚本保留在空的游戏对象上。“行中,将其改为“public游戏对象名称”。进入统一编辑器。当选择包含GetName脚本的游戏对象时,您应该会在检查器中看到Name属性和旁边的空字段。将包含TMP_InputField组件的游戏对象拖放到其中。
那么,为什么你的代码以前不能工作呢?GetName脚本需要某种对TMP_InputField组件的引用,而TMP_InputField组件却丢失了。你尝试过从Name属性中获取它,但从未给它赋值。

iecba09b

iecba09b3#

感谢所有我收到的建议。我现在有一个使用OnClick()方法的工作版本:

public class GetName : MonoBehaviour
{
    public TMP_InputField user_inputField;      // User-entered name.

    public void SaveName()
    {
        Globals.player = user_inputField.text.ToString(); // Saved for later.
        Debug.Log("Globals.player is " + Globals.player);
    }

    public void ResetName()
    {
        user_inputField.text = "";
        Globals.player = "";
    }
}
wbgh16ku

wbgh16ku4#

只有两行可以工作:

using UnityEngine.UI;

public  TMPro.TMP_InputField Name;

相关问题