2017-07-17 270 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」的類。隨你便。你的基本問題歸結爲語法錯誤。 –