2017-03-29 14 views
0

WolfStateController.Start()でStateから継承したState TrueStateをWolfIdleStateに設定しようとしています。拡張クラスでは拡張クラスの型を受け入れません

しかし、WolfStateControllerはStateControllerを拡張しています。まだそれは受け入れられません。エラーメッセージを記述したStartメソッドを見てください。これは可能なのでしょうか?多形に関する何かが欠落しているか、構文が間違っています。

// STATECONTROLLER 

public class StateController : MonoBehaviour 

{ 
    public State<StateController> CurrentState; 
} 


public class WolfStateController : StateController 
{ 
    void Start() 
    { 
     var idleState = new WolfIdleState(); 
     var keyPressDecision = new KeyPressedDecision(KeyCode.Space); 

     // FOLLOWING GIVES ERROR: 
     // Cannot implicity convert WolfIdleState to State<StateController> 
     keyPressDecision.TrueState = idleState; 
    } 
} 

// STATE 

    public abstract class State<SC> where SC : StateController 
    { 
    } 



    public abstract class WolfState : State<WolfStateController> 
    { 
    } 



    public class WolfIdleState : WolfState 
    { 
    } 


    // DECISIONS 

public abstract class StateDecision<SC> where SC : StateController 
{ 

    public State<SC> TrueState; 
} 

public class KeyPressedDecision : StateDecision<StateController> 
{ 

} 
+1

'State 'は 'State 'と同じではありません – DavidG

+0

これは正しいです。だから、多態性はStateControllerを拡張するので、私はwolfStateControllerを使うことができると思いました。いいえ?多形性のポイントは何ですか? – Lautaro

答えて