私は、ゲームの入力にイベント処理を使用しようとしています。他の人が同様のメソッドを使用するのを見ると、エラーなしで代理変数にvoid関数を追加できます。 私は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を使用することを検討してください。 https://msdn.microsoft.com/en-us/library/system.eventhandler(v=vs.110).aspx –
@RandRandomはそうするためにいくつかの先天的利点がありますか? –
'EventHandler'を使う唯一の利点は、' object sender、EventArgs e'の標準.NETイベントパターンシグネチャを適用することです。それ以外の場合は、標準デリゲートを使用する場合と同じです。 – Enigmativity