/// <summary> /// 根据单位id和所有者获得单位实例 /// </summary> /// <param name="unitID"></param> /// <param name="owner"></param> /// <param name="damage"></param> /// <returns></returns> public GameObject GetGameUnit(string unitID, OwnerEnum owner, int damage = 0) { GameObject newUnit; //根据所有者选择不同的模板进行单位实例化 switch (owner) { case (OwnerEnum.Enemy): newUnit = Instantiate(EnemyMould); break; case (OwnerEnum.Player): newUnit = Instantiate(FriendlyMould); break; default: newUnit = Instantiate(NeutralityMould); break; } //将生成的GameUnit传入数据库赋值初始化 UnitDataBase.Instance().InitGameUnit(newUnit.GetComponent <GameUnit>(), unitID, owner, damage); return(newUnit); }
/// <summary> /// 实现返回GameObject的函数,GetInst(string id) /// </summary> /// <param name="id"></param> /// <param name="owner"></param> /// <param name="Damage"></param> /// <returns></returns> public GameObject GetInst(string unitId, OwnerEnum owner, int Damage = 0) { foreach (GameObject _unit in m_pool) { ///根据所有者不同选择对象,因为三种对象(友军,敌军,中立)身上的脚本可能不一样,这样可以节约一点写代码的时间 ///注意这里其实比较危险,如果搜不到GameUnit的脚本是会报错中断的,不过我们可以保证他一定有这个脚本,所以在这里可以这么写 if (_unit.GetComponent <GameUnit>().owner == owner) { m_pool.Remove(_unit); _unit.SetActive(true); //从单位数据库将新单位初始化 UnitDataBase.Instance().InitGameUnit(_unit, unitId, owner, Damage); return(_unit); } } //如果没有空余的对应类型的对象,就 //从单位生成车间取得新单位实例 return(GameUnitFactory.Instance().GetGameUnit(unitId, owner, Damage)); }