/// <summary> /// NestElementDataをもとに、対応するNestElementFactoryを用いてNestElementのインスタンスを生成する。 /// </summary> /// <param name="elementData">生成に使用するNestElementData。</param> /// <param name="registerToGameContext">新たにGameContextに登録するかどうか。セーブデータからの生成などの際に限りfalseを指定する。</param> /// <returns>生成されたGameObjectのもつNestElementコンポーネント。</returns> public NestElement InstantiateNestElement(NestElementData elementData, bool registerToGameContext = true, bool registerInstanceToNestSystem = true) { NestElementFactory matchedFactory = null; foreach (var f in nestElementFactories) { if (f.DataType == elementData.GetType()) { matchedFactory = f; break; } else if (matchedFactory == null && elementData.GetType().IsSubclassOf(f.DataType)) { matchedFactory = f; } } if (!matchedFactory) { Debug.LogWarning($"NestSystem: {elementData.GetType()} 用のNestElementFactoryは登録されていません。"); } var nestElement = matchedFactory?.InstantiateNestElement(elementData); if (nestElement != null) { if (registerToGameContext) { Data.Structure.NestElements.Add(elementData); } if (registerInstanceToNestSystem) { nestElements.Add(nestElement); } } return(nestElement); }
/// <summary> /// AntDataをもとに、シーン上にAntのGameObjectを生成します。 /// </summary> /// <param name="elementData"></param> /// <returns></returns> public abstract NestElement InstantiateNestElement(NestElementData elementData);