Пример #1
0
        /// <summary>
        /// PrefabをビルドしてSTYLY Assetを作る
        /// </summary>
        /// <param name="prefab"></param>
        public bool BuildSTYLYAsset(GameObject prefab, BuildTarget buildTarget, string guid = null)
        {
            var abUtility = new AssetBundleUtility();

            if (guid == null)
            {
                guid = abUtility.GenerateGUID();
            }

            string outputPath = Path.Combine(OutputPath + "STYLY_ASSET", abUtility.GetPlatformName(buildTarget));

            var buildResult = abUtility.Build(guid, AssetDatabase.GetAssetPath(prefab), outputPath, buildTarget);

            return(buildResult != null);
        }
Пример #2
0
        /// <summary>
        /// AssetBundleのビルドを実行する
        /// </summary>
        /// <param name="scenePath">シーンのパス</param>
        /// <param name="buildTarget">ビルドターゲット(プラットフォーム)</param>
        /// <param name="guid">アセットバンドルのGUID</param>
        /// <returns></returns>
        public bool BuildSTYLYSceneAsset(string scenePath, BuildTarget buildTarget, string guid = null)
        {
            Debug.Log("BuildSTYLYSceneAsset:guid:" + guid);
            var abUtility = new AssetBundleUtility();

            // プラットフォーム切換え
            abUtility.SwitchPlatformAndPlayerSettings(buildTarget);

            if (guid == null)
            {
                guid = abUtility.GenerateGUID();
            }

            string outputPath = Path.Combine(OutputPath + "STYLY_ASSET", abUtility.GetPlatformName(buildTarget));

            var buildResult = abUtility.Build(guid, scenePath, outputPath, buildTarget);

            return(buildResult != null);
        }
Пример #3
0
        /// <summary>
        /// シーンファイルをビルドしてAssetBundleを作る
        /// <returns>エラーインスタンス。成功時はnull</returns>
        /// </summary>
        private LocalPreviewToolError BuildSceneToAssetBundle()
        {
            // 要素数がゼロならエラーにする
            if (!platformUtils.Any())
            {
                return(new LocalPreviewToolError {
                    Type = LocalPreviewToolError.ErrorType.DeviceNotFound
                });
            }

            // ビルド対象シーンが未設定なら、アクティブシーンを設定する。
            if (string.IsNullOrEmpty(targetScene))
            {
                EditorSceneManager.SaveScene(SceneManager.GetActiveScene());
                targetScene = SceneManager.GetActiveScene().path;
            }

            if (string.IsNullOrEmpty(targetScene))
            {
                return(new LocalPreviewToolError {
                    Type = LocalPreviewToolError.ErrorType.TargetSceneNotFound
                });
            }

            // アクティブシーンが未保存なら保存する。
            if (SceneManager.GetActiveScene().isDirty)
            {
                Debug.Log("Save scene beause dirty");
                EditorSceneManager.SaveScene(SceneManager.GetActiveScene());
            }

            // STYLYを事前に起動する。
            foreach (IPlatformUtility util in platformUtils)
            {
                int result = util.StartSTYLY();
                if (result != 0)
                {
                    return(new LocalPreviewToolError {
                        Type = LocalPreviewToolError.ErrorType.StartStylyFailed
                    });
                }
            }

            // ビルド対象のシーンを読み込む
            var scene = EditorSceneManager.OpenScene(targetScene);

            // ビルドが必要なプラットフォームを抽出する
            var needBuildTargets = new HashSet <BuildTarget>();

            // シーンが未ビルドならneedBuildTargetsに加える。
            foreach (IPlatformUtility util in platformUtils)
            {
                if (!abUtility.CheckPrefabAlreadyBuilded(targetScene, PlatformUtilToBuildTarget(util)))
                {
                    needBuildTargets.Add(PlatformUtilToBuildTarget(util));
                }
            }

            // アセットバンドルGUIDを初期化する。
            string abGuid = null;

            if (needBuildTargets.Count > 0)
            {
                Debug.Log("Need to build.");
                // ビルド対象が存在する場合

                // AssetBundleのGUIDを決定する。
                // ビルド済みのプラットフォームが存在する場合、そのGUIDを流用する。
                foreach (var buildTarget in AllBuildTargets)
                {
                    if (abUtility.CheckPrefabAlreadyBuilded(targetScene, buildTarget))
                    {
                        abGuid = abUtility.GetGuidFromBuildedAssetData(targetScene);
                        break;
                    }
                }

                // ビルド済みのプラットフォームが存在しない場合、GUIDを生成する。
                if (abGuid == null)
                {
                    abGuid = abUtility.GenerateGUID();
                }
            }
            else
            {
                Debug.Log("No need to build.");
            }

            // AssetBundleのビルド実行
            foreach (var buildTarget in needBuildTargets)
            {
                var buildResult = stylyPluginUtility.BuildSTYLYSceneAsset(targetScene, buildTarget, abGuid);
                if (buildResult == false)
                {
                    return(new LocalPreviewToolError
                    {
                        Type = LocalPreviewToolError.ErrorType.BuildStylySceneAssetFailed,
                        PlatformName = abUtility.GetPlatformName(buildTarget)
                    });
                }
            }

            return(null);
        }