Хорошо, я немного смущен. Я изучил UnityEvent
и систему обмена сообщениями this. Но у меня есть один вопрос, который я не могу понять. Как передать аргументы функции Invoking?Пропустить аргумент UnityEvent
Например (я имею EventManager
как в учебнике):
void OnEnable() {
EventManager.StartListening ("OnPlayerTeleport", TeleportPlayer);
}
void OnDisable() {
EventManager.StopListening ("OnPlayerTeleport", TeleportPlayer);
}
void TeleportPlayer() {
float yPos = transform.position.y;
yPos += 20.0f;
transform.position = new Vector3 (transform.position.x, yPos, transform.position.z);
}
И у меня есть триггер:
void Update() {
if (Input.GetButtonDown ("Teleport")) {
EventManager.TriggerEvent ("OnPlayerTeleport");
}
}
Но что, если я хочу передать значение 'высоты' функционировать «TeleportPlayer ':
void TeleportPlayer (float h) {
float yPos = transform.position.y;
yPos += h;
transform.position = new Vector3 (transform.position.x, yPos, transform.position.z);
}
Как это сделать?
Хорошо, спасибо. Но могу ли я задать еще один вопрос? Что делать, если у меня есть много функций, а некоторые из них имеют аргументы «float», некоторые - «string», а некоторые - без аргументов? –
@ AlexandrKöln Это сложно оттуда, но может быть сделано. Вы можете создать класс под названием AllData, а затем все переменные в нем. Может быть, строки массивов или поплавки. Затем измените параметр float на этот класс класса AllData. Теперь вы можете передать класс, содержащий всю вашу информацию. – Programmer
Другим способом является использование ключевого слова 'params' для передачи неограниченных переменных. Вместо создания типа 'float или' string', сделайте его 'object'. Затем вы можете передать объект или из 'float' или' string'. Мой совет вам должен пройти только то, что вам нужно. Не создавайте EventSystem, которая может передавать каждый тип данных в свой параметр. Это замедлит вашу игру. – Programmer