2017-06-29 15 views
3

私は、ゲームの入力にイベント処理を使用しようとしています。他の人が同様のメソッドを使用するのを見ると、エラーなしで代理変数に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!"); 
    } 

} 

イベントハンドリングの代理人を使用することは、まだ私にとっては外国人です。だから私は何かを誤解していると思います。

+0

独自の代理人を作成する代わりに、EventHandlerを使用することを検討してください。 https://msdn.microsoft.com/en-us/library/system.eventhandler(v=vs.110).aspx –

+0

@RandRandomはそうするためにいくつかの先天的利点がありますか? –

+0

'EventHandler'を使う唯一の利点は、' object sender、EventArgs e'の標準.NETイベントパターンシグネチャを適用することです。それ以外の場合は、標準デリゲートを使用する場合と同じです。 – Enigmativity

答えて

3

Moveの後に()を削除する必要があります。そのように、あなたはあなたのメソッドを呼び出して、何も返さない型の戻り値を追加しようとします。次のように変更してください。

​​
+0

引用符はどこで取得しましたか? "イベント宣言はデリゲートインスタンスの保護のレイヤーを追加します..." "なぜそれを答えに入れましたか?質問とは何が関係していますか? – Enigmativity

+0

なぜ、デリゲートではなく、 'EventHandler'を使うことを提案していますか?それは依然として代議員です。 – Enigmativity

+0

@Enigmativity私は別の質問からそれを持っています、そして、彼はイベントハンドラとして代理人を使用しているのでそれを入れます。 EventHandlerをデリゲートのように直接リセットすることはできません。それともあなたは同意しないのですか? – NtFreX

関連する問題