ジェネリッククラスは初めてです。私は今ゲームを作っています。私には多くの敵がいますが、それらはすべて一般的なEnemyBaseクラスから継承しています
public abstract class EnemyBase<TState, TTransition>
{
protected StateMachine<TState, TTransition> m_FSM;
}
例として、私はこのようなものを持っているでしょう:
public class EnemySquire : EnemyBase<EnemySquire.State, EnemySquire.StateTransition>
{
public enum State
{
IDLE,
WALK,
ATTACKED,
DEAD,
}
public enum StateTransition
{
FOUND_FREE_GRID,
FINISHED,
FREED,
OUT_OF_LIFE,
ATTACKED,
}
}
ここまでは順調ですね。私の問題は、EnemyBase
クラスをパラメーターとして受け取ることです。ジェネリックに関係なく、あらゆる種類のEnemyBaseを受け取りたいです。そう:
public class Player
{
public void Attack<TState, TTransition>()
{
EnemyBase<TState,TTransition> enemy = GetComponent<EnemyBase<TState,TTransition>>();
}
}
これは機能しますが、Attackメソッドは別のメソッド内で呼び出されるため、この別のメソッドも実装する必要があり<TState, TTransition>
、この別のメソッドは別のメソッドによって呼び出されます...そして続行します。
私は次のようなことを達成したいと思います:
public void Attack()
{
EnemyBase enemy = GetComponent<EnemyBase>();
}
または
public void Attack()
{
EnemyBase<,> enemy = GetComponent<EnemyBase<,>>();
}
これらの構文が正しいかどうか、または存在するかどうかはわかりませんが、ジェネリックに関係なく、クラスがEnemyBaseであるかどうかを知りたいだけです。
ありがとう
編集:どのジェネリックタイプが使用されるかを追加しました
のようなバインドされていないジェネリック型のフィールドを持つことはできませんEnemyBase<,>
。
のようなジェネリックなものの非ジェネリックな基本クラスEnemyBase<TState, TTransition> : EnemyBase
またはのようなインターフェースのいずれかを定義する必要がありますEnemyBase<TState, TTransition> : IEnemy
。
次に、EnemyBase
またはIEnemy
フィールドを持つことができます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加