Опитвам се да използвам обработка на събития за въвеждане на игра. Когато видят, че други използват подобни методи, те могат да добавят 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
е, че той налага подписа на стандартния .NET модел на събитие наobject sender, EventArgs e
. В противен случай е идентично с използването на стандартни делегати. - person Enigmativity   schedule 29.06.2017