public T Create <T>(EntityParam param) where T : Entity, new() { T entity = this._gPool.Pop <T>(); this._idToEntity[param.rid] = entity; this._entities.Add(entity); System.Type t = typeof(T); if (typeof(Collider).IsAssignableFrom(t)) { Collider collider = entity as Collider; this._colliders.Add(collider); } if (typeof(ITrigger).IsAssignableFrom(t)) { ITrigger trigger = entity as ITrigger; this._triggers.Add(trigger); } if (typeof(Item).IsAssignableFrom(t)) { Item item = entity as Item; this._idToItem[param.rid] = item; this._items.Add(item); } if (typeof(Champion).IsAssignableFrom(t)) { Champion champion = entity as Champion; this._idToChampion[param.rid] = champion; this._champions.Add(champion); } SyncEvent.CreateEntity(entity.GetType().Name, param); entity.OnAddedToBattle(this._battle, param); return(entity); }