@keltkelt

Как сделать callback (или типа того) в Unity3D?

Почему "типа того": я еще новичок в этой теме, поэтому знаю чего хочу, но какое средство подойдет не знаю.

У меня есть главный скрипт. Нужно из него вызывать скрипт, находящийся на другом объекте - поманипулировать с объектом, затем получить некую обратную информацию (например пользователь выберет некий вариант) и вернуть ее в первый скрипт. Делать это асинхронно совсем не обязательно.

Гуглю корутины, колбэки, события, await, в общем каша в голове.
  • Вопрос задан
  • 93 просмотра
Пригласить эксперта
Ответы на вопрос 3
GavriKos
@GavriKos Куратор тега Unity Game Engine
Если ВООБЩЕ не асинхронно - то просто из первого скрипта вызываете метод второго скрипта. Метод должен вернуть что вам нужно +нужна ссылка на скрипт естественно.

Если хоть как то асинхронно (а ввод он такой) - то гуглите Action и иlambda. Передадите это в метод, второй скрипт запомнит и дернет когда надо.

И учите сишарп, прежде чем лезть в юнити.
Ответ написан
DanceM
@DanceM Куратор тега Unity Game Engine
Кто хочет -ищет способ, кто не хочет -ищет причину
В корутине можно спрашивать, сделал ли объект то, что надо. Как-то так:
StartCoroutine(GetAndCheckFile());
        ...
	IEnumerator GetAndCheckFile()
	{
		someFileManager.GetFile(filePath);
		while(!someFileManager.IsFileLoaded())
			yield return null;

		print("File loaded");
		yield return null;
	}

Можно передать ссылку на скрипт, как указал GavriKos
public class SomeClass: MonoBehaviour
{
	void LoadFile()
	{
		someFileManager.GetFile(filePath, this);
	}

	public void FileLoaded()
	{
		print("File loaded");
	}
}

...
	void GetFile(string path, SomeClass classToSendResponse)
	{
		DoSomething();
		if(IsFileLoaded())
			classToSendResponse.FileLoaded();
	}

Ну и колбэком можно, можно через Events, или даже отдельный поток запустить.

Лично мне хватает корутин и методов на всё, в редких случаях делаю иначе.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы