2017-07-17 5 views
0

私は(Unityで)ゲームを作成しています。私は入力処理をゲームロジックから切り離してクロスプラットフォームにできるようにしたいと思います。プラットフォームごとに異なる実装が可能なIInputHandlerという名前のインターフェイスがあります。例えば、Cのインターフェイスのイベントを購読する

public class AndroidInputHandler : IInputHandler 

または

public class PcInputHandler : IInputHandler 

私はこのような何かを行うことができるようにこのインターフェイスがあるしたい理由:

public class PlayerController { 

    private IInputHandler _inputHandler; 
    private Player _myPlayer; 
    // ... 
    _inputHandler.ForwardKeyPressed += _myPlayer.MoveForward(); 

あなたが見ることができるように、私はインターフェイスが欲しいです私が購読することができる方法は、「移動」キーが押されたときに、それがPC上の「W」キーであろうとAndroid用スクリーン上のタップであろうと、私のPlayerが前進するような方法です。私はIInputHandlerインターフェイスでdelegatesを使用しようとしましたが、代理人とインターフェイスはうまく一緒に演奏されていないようです。私は何をしようとしていますか?

編集:私が試したもの:

public interface IInputHandler { 

    event ForwardKeyPressed(); 

エラーメッセージ:「型または名前空間ForwardKeyPressedが見つかりません」

+0

あなたは問題について、いくつかの実際のコードを示してもらえますか?インターフェイスでイベントを定義してから、正確に使用することができます –

+0

確かに。多分私は構文に慣れていないかもしれませんが、私のインタフェースに次のメソッドを置こうとすると、コンパイラは不平を言っています: 'Event ForwardKeyPressed()'。これは、 "型または名前空間' ForwardKeyPressed'が見つかりませんでした "と言います。 – Alex

+0

コードと正確なエラーメッセージで質問を編集してください。これは文法の単なる質問かもしれません。 –

答えて

0

イベントのタイプを宣言する必要があります。一例として、

public interface IInputHandler 
{ 
    event EventHandler<ForwardKeyPressedEventArgs> ForwardKeyPressed; 
} 
+0

コード例もコンパイルされません。 –

+0

イベントごとにタイプを追加するのは過剰です。その場合、私は 'LeftKeyPressedEventArgs'、' JumpKeyPressedEventArgs'、 'Ability1KeyPressedEventsArgs'などを宣言しなければなりません。それを行う簡単な方法はありませんか? – Alex

+0

@Alexあなたは単に 'EventHandler'を使うことができます。あるいは、どのタイプのキー押下イベントに対しても 'KeyPressedEventArgs'と呼ばれるクラスを宣言することができます。それはあなた次第です。あなたが構文エラーになった基本的な問題。 –

関連する問題