/// <summary> /// AntDataをもとに、対応するAntFactoryを用いてAntのインスタンスを生成する。 /// </summary> /// <param name="antData">生成に使用するAntData。</param> /// <param name="registerToGameContext">新たにGameContextに登録するかどうか。セーブデータからの生成などの際に限りfalseを指定する。</param> /// <returns>生成されたGameObjectのもつAntコンポーネント。</returns> public Ant InstantiateAnt(AntData antData, bool registerToGameContext = true) { Debug.Log(antData.GetType()); var ant = antFactories.FirstOrDefault(f => f.DataType == antData.GetType())?.InstantiateAnt(antData); if (ant != null) { if (registerToGameContext) { Data.Ants.Add(antData); } SpawnedAnts.Add(ant); } return(ant); }
/// <summary> /// AntDataをもとに、対応するAntFactoryを用いてAntのインスタンスを生成する。 /// </summary> /// <param name="antData">生成に使用するAntData。</param> /// <param name="registerToGameContext">新たにGameContextに登録するかどうか。セーブデータからの生成などの際に限りfalseを指定する。</param> /// <returns>生成されたGameObjectのもつAntコンポーネント。</returns> public Ant InstantiateAnt(AntData antData, bool registerToGameContext = true) { AntFactory matchedFactory = null; foreach (var f in antFactories) { if (f.DataType == antData.GetType()) { matchedFactory = f; break; } else if (matchedFactory == null && antData.GetType().IsSubclassOf(f.DataType)) { matchedFactory = f; } } if (!matchedFactory) { Debug.LogWarning($"NestSystem: {antData.GetType()} 用のAntFactoryは登録されていません。"); } var ant = matchedFactory?.InstantiateAnt(antData); if (ant != null) { if (registerToGameContext) { Data.Ants.Add(antData); } spawnedAnts.Add(ant); } return(ant); }