示例#1
0
        /// <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);
        }
示例#2
0
 /// <summary>
 /// AntDataをもとに、シーン上にAntのGameObjectを生成します。
 /// </summary>
 /// <param name="elementData"></param>
 /// <returns></returns>
 public abstract NestElement InstantiateNestElement(NestElementData elementData);