NullReferenceException при попытке получить текст из поля ввода

Я новичок в единстве и хочу получить значение из текстового поля ввода. Я нашел этот вопрос Получить текст из поля ввода в Unity3D с помощью С#, но когда я выполняю всегда появляется одна и та же ошибка: NullReferenceExcpetion: ссылка на объект не указывает на экземпляр объекта. Это похоже на глупую ошибку, и я перепробовал все, но не могу ее исправить. Мой код:

void Start () {
    var input = gameObject.GetComponent<InputField>();
    input.onEndEdit.AddListener(SubmitName);

}

private void SubmitName(string arg0)
{
    Debug.Log(arg0);
}

Я попытался поставить InputField input; перед функцией запуска и стиранием var, но все равно не повезло. Если кто-нибудь может помочь мне с этой проблемой, это было бы очень признательно. Фотографии того, где мои скрипты прикреплены в данный момент. введите здесь описание изображения

введите здесь описание изображения


person Hendrien    schedule 23.07.2015    source источник
comment
вы должны включать скрипт только на холст ИЛИ в поле ввода. Я бы добавил его только на холст, чтобы у вас был элемент, который будет управлять его дочерними элементами (InputField и другими элементами пользовательского интерфейса). Но, пожалуйста, перетащите InputField из Hierarchy в пустое поле в нижней части инспектора, где вы можете прочитать Нет (поле ввода).   -  person Alex Cio    schedule 23.07.2015
comment
Окей большое спасибо поле ввода не удалось перетащить но я создал новое и все в порядке. Большое спасибо.   -  person Hendrien    schedule 23.07.2015
comment
У меня только один вопрос: вывод — InputField(UnityEngine.UI.InputField), а не то, что я ввел в поле ввода.   -  person Hendrien    schedule 23.07.2015
comment
Я действительно не знаю, что именно находится внутри вашего сценария, потому что вы все еще не опубликовали его. Но мне кажется, что вы забыли импортировать библиотеку для пользовательского интерфейса using UnityEngine.UI; в заголовок, чтобы вы могли получить доступ к элементам пользовательского интерфейса только по их имени.   -  person Alex Cio    schedule 23.07.2015


Ответы (1)


Ваш код почти правильный, если вы посмотрите документацию, вы должны вызвать свой метод с помощью 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 переменной класса, чтобы вам было проще обращаться к ней позже. Кроме того, вы должны просто создать [SerializeField] для своего InputField, чтобы вы могли перетащить его в свой скрипт. Это может также избежать некоторых ошибок.

person Alex Cio    schedule 23.07.2015
comment
Привет, спасибо за ответ, но я все еще получаю ту же ошибку: ссылка на объект не указывает на экземпляр объекта. Я добавил свой скрипт в InputField. - person Hendrien; 23.07.2015
comment
Вы добавили InputField внутрь своего холста и связали его со своим скриптом, перетащив InputField в заполнитель скриптов внутри inspector? - person Alex Cio; 23.07.2015
comment
Да, я сделал и то, и другое, и мой скрипт прикреплен к тексту InputField. - person Hendrien; 23.07.2015
comment
Я только что попытался, но скрипт только на InputField, но он все равно выдавал ту же ошибку. - person Hendrien; 23.07.2015
comment
Я объяснил это в своем посте, как я все настроил. Если это не сработает, не могли бы вы сделать снимок экрана при выборе UIElement с помощью скрипта, чтобы мы могли увидеть, в чем проблема - person Alex Cio; 23.07.2015
comment
Хорошо, я публикую скриншоты на свой первоначальный вопрос. - person Hendrien; 23.07.2015