Я пытался использовать обработку событий для входа в игру. Увидев, что другие используют аналогичные методы, они могут добавить функцию void в переменную делегата без ошибки. Всякий раз, когда я пытаюсь добавить функцию Move() в OnAxisChange, я получаю следующую ошибку:
Невозможно неявно преобразовать тип 'void' в 'CharacterView.InputAction'
public class CharacterView : MonoBehaviour {
public delegate void InputAction();
public static event InputAction OnAxisChange;
public Vector2 InputAxis
{
get
{
float x = Input.GetAxisRaw("Horizontal");
float y = Input.GetAxisRaw("Vertical");
return (new Vector2(x, y));
}
}
private void Update()
{
Vector2 input = InputAxis;
if (input.x != 0 || input.y != 0)
{
if (OnAxisChange != null)
{
OnAxisChange();
}
}
}
}
Ниже приведен класс, который обрабатывает событие.
public class CharacterController : MonoBehaviour {
private void OnEnable()
{
CharacterView.OnAxisChange += Move();
}
private void OnDisable()
{
CharacterView.OnAxisChange -= Move();
}
public void Move()
{
Debug.Log("Entered the move function!");
}
}
Использование делегатов для обработки событий все еще немного чуждо мне, поэтому я предполагаю, что что-то неправильно понимаю.
EventHandler
заключается в том, что оно обеспечивает стандартную сигнатуру шаблона событий .NETobject sender, EventArgs e
. В остальном это идентично использованию стандартных делегатов. - person Enigmativity   schedule 29.06.2017