7

私はこれら2つの主要なクラスを持っています。まず FSMSystem クラス:

public class FSMSystem<T> : MonoBehaviour where T : FSMSystem<T>
{
    private T m_Owner = default(T);

    protected FSMState<T> currentState;

    private Dictionary<int, FSMState<T>> m_states;

    public FSMSystem(T owner)
    {
        m_Owner = GameObject.FindObjectOfType(typeof(T)) as T; //owner;
        m_states = new Dictionary<int, FSMState<T>>();
    }

    protected void AddState( FSMState<T> state )
    {
        m_states.Add( state.GetStateID(), state );
    }
}

そして 2 番目のクラスである FSMState:

public abstract class FSMState<T>
{   
    public abstract int GetStateID();

    public abstract void OnEnter (FSMSystem<T> fsm, FSMState<T> prevState);
    public abstract void OnUpdate (FSMSystem<T> fsm);
    public abstract void OnExit (FSMSystem<T> fsm, FSMState<T> nextState);
}

次のエラーが発生します。

エラー CS0309:ジェネリック型またはメソッド ' ' でパラメーター' ' として使用するには、型 ' T' を ' ' に変換できる必要がありますFSMSystem<T>TFSMSystem<T>

誰かがこれを解決する方法を教えてもらえますか? これに似た他の多くの投稿を見ますが、関係は見られません。

4

2 に答える 2

0

それは私にとって大きな助けです。皆さん、ありがとうございました。問題を解決しました。「where」構文について誤解していました。

これが機能する改訂版です。

public class FSMSystem<T> : MonoBehaviour where T : FSMSystem<T>
{
    private T m_Owner = default(T);

    protected FSMState<T> currentState;

    private Dictionary<int, FSMState<T>> m_states;

    public FSMSystem()
    {
        m_Owner = this as T;
        m_states = new Dictionary<int, FSMState<T>>();
    }

    protected void AddState( FSMState<T> state )
    {
        m_states.Add( state.GetStateID(), state );
    }
}


public abstract class FSMState<T> where T : FSMSystem<T>
{
    public abstract int GetStateID();

    public abstract void OnEnter (T fsm, FSMState<T> prevState);
    public abstract void OnUpdate (T fsm);
    public abstract void OnExit (T fsm, FSMState<T> nextState);
}
于 2013-05-23T00:54:25.877 に答える