我是通用类的新手。我正在制作游戏。我会有很多敌人,这些敌人都继承自通用的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<,>>();
}
我不知道这些sintax是否正确或是否存在,但我只想知道class是否为EnemyBase,而不管其泛型如何。
谢谢
编辑:添加了通用类型用于
您的字段不能具有未绑定的通用类型,例如EnemyBase<,>
。
您需要为通用类(如)EnemyBase<TState, TTransition> : EnemyBase
或接口(如)定义非通用基类EnemyBase<TState, TTransition> : IEnemy
。
然后,您可以有一个EnemyBase
orIEnemy
字段。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句