Можно ли получить игровой объект поля ввода, в которое я вводю текст, в Unity?

#c# #unity3d

Вопрос:

У меня есть сцена с несколькими полями ввода в моем приложении unity, и я хотел бы динамически обновлять некоторые переменные по мере ввода пользователем полей ввода. Я хотел бы иметь возможность обновлять только переменную, соответствующую обновленному полю ввода (без необходимости перебирать все поля ввода в сцене и устанавливать все переменные). Есть ли способ получить игровой объект в поле ввода, в которое я сейчас вводю? У меня есть функция, которую я установил в качестве функции OnValueChanged в полях ввода, но сейчас я регистрирую только текущее значение поля: ` ‘ public void InputUpdate(ввод строки) { Отладка.Журнал(ввод); } « Настройка в редакторе:
[![Настройка редактора][1]][1]

Спасибо

Комментарии:

1. Не знаю почему, но вопрос загружается без форматирования и отсутствует «Здравствуйте» в начале вопроса, я попытался его отредактировать, и как только я наберу что-либо во время редактирования, это исправит форматирование, но затем он все равно странно загружается на страницу вопроса. Не знаю, как это исправить, надеюсь, это можно использовать так (основная часть-объяснение). Вот ссылка на изображение, на котором показано, как должен выглядеть вопрос: imgur.com/uWFVQTC

Ответ №1:

Если вам нужен конкретный игровой объект для каждого поля ввода, я бы рассмотрел возможность назначения обратного вызова в коде. Что-то вроде:

 using UnityEngine;
using UnityEngine.UI;
using System.Collections.Generic;

public class TestScript : MonoBehaviour
{
    [SerializeField] private List<InputField> yourInputFields = new List<InputField>();

    public void Start()
    {
        foreach (InputField input in yourInputFields)
            input.onValueChanged.AddListener(delegate { Test(input.text, input.gameObject); });
    }


    public void Test(string str, GameObject go = null)
    {
        Debug.Log(go.name   " "   str);
    }
}
 

Теперь функция Test будет вызываться с назначенным конкретным игровым объектом Start , который привязан к конкретному InputField onValueChange . Просто назначьте каждого InputField , кого вы хотите использовать для этого обратного вызова, в инспекторе, перетащив их в открытый список.