Пример #1
0
    public static void ScanAllScenes()
    {
        var configName = "scenes.json";
        var filename   = FI.ConfigPath + configName;

        var trancfgName  = "transtriggers.json";
        var tranFileName = FI.ConfigPath + trancfgName;

        var npccfgName  = "npctriggers.json";
        var npcFileName = FI.ConfigPath + npccfgName;

        var facilitycfgName  = "facilitytriggers.json";
        var facilityFileName = FI.ConfigPath + facilitycfgName;

        var questcfgName  = "questtriggers.json";
        var questFileName = FI.ConfigPath + questcfgName;

        var investigatecfgName  = "investigatetriggers.json";
        var investigateFileName = FI.ConfigPath + investigatecfgName;

        var jsonWriter     = new ScannerJsonWriter();
        var config         = new SceneConfig();
        var cfgTran        = new TranConfig();
        var cfgFacility    = new FacilityConfig();
        var cfgNpc         = new NpcConfig();
        var cfgQuest       = new QuestAreaConfig();
        var cfgInvestigate = new InvestigateConfig();

        var allScenes = Directory.GetFiles("Assets/Scenes/game/streets", "*.unity", SearchOption.AllDirectories).ToList();

        for (int i = 0; i < allScenes.Count; ++i)
        {
            var scene = allScenes[i];
            EditorUtility.DisplayProgressBar("Scan all scenes", "scanning " + scene, (float)i / allScenes.Count);

            Lightmapping.giWorkflowMode = Lightmapping.GIWorkflowMode.OnDemand;
            var sceneName        = Path.GetFileNameWithoutExtension(scene);
            var triggerSceneFile = "Assets/Scenes/city_triggers/" + sceneName + "_trigger.unity";

            UnityEditor.SceneManagement.EditorSceneManager.OpenScene(scene, UnityEditor.SceneManagement.OpenSceneMode.Single);
            if (File.Exists(triggerSceneFile))
            {
                UnityEditor.SceneManagement.EditorSceneManager.OpenScene(triggerSceneFile, UnityEditor.SceneManagement.OpenSceneMode.Additive);
            }

            Lightmapping.giWorkflowMode = Lightmapping.GIWorkflowMode.OnDemand;

            var curScene = EditorApplication.currentScene;
            if (curScene != null && curScene != "")
            {
                sceneName = System.IO.Path.GetFileNameWithoutExtension(curScene);
                var street       = new SceneConfig.Street(sceneName);
                var ttan         = new TranConfig.Trigger(sceneName);
                var tnpc         = new NpcConfig.Trigger(sceneName);
                var tfacility    = new FacilityConfig.Trigger(sceneName);
                var tquest       = new QuestAreaConfig.Trigger(sceneName);
                var tinvestigate = new InvestigateConfig.Trigger(sceneName);

                var scanner = new SceneScanner(street, ttan, tfacility, tnpc, tquest, tinvestigate);
                scanner.ScanCurrentScene(sceneName);
                config.AddStreet(street);
                cfgTran.AddTrigger(ttan);
                cfgNpc.AddTrigger(tnpc);
                cfgFacility.AddTrigger(tfacility);
                cfgQuest.AddTrigger(tquest);
                cfgInvestigate.AddTrigger(tinvestigate);

                LogUtil.Debug("Scene " + curScene + " scan success");
            }
            else
            {
                LogUtil.Debug("You need to select a scene before scan");
            }
        }
        jsonWriter.OutputToFile(filename, config.ToJson());
        jsonWriter.OutputToFile(tranFileName, cfgTran.ToJson());
        jsonWriter.OutputToFile(facilityFileName, cfgFacility.ToJson());
        jsonWriter.OutputToFile(npcFileName, cfgNpc.ToJson());
        jsonWriter.OutputToFile(questFileName, cfgQuest.ToJson());
        jsonWriter.OutputToFile(investigateFileName, cfgInvestigate.ToJson());


        LogUtil.Debug("Scene " + filename + " successfully generated in game-config folder");
        EditorUtility.ClearProgressBar();
        AssetDatabase.SaveAssets();
    }
Пример #2
0
    // Unity AssetBundle building is not stable
    // Let's write our own hashes for asset bundle updates
    static void WriteBundleHashFile(string toPath, string targetPlatform)
    {
        var filename = toPath + "/" + targetPlatform + "_hashes.json";

        LogUtil.Debug("WriteBundleHashFile: hash filename=" + filename);

        var writer = new ScannerJsonWriter();

        writer.WriteObjectStart();

        var manifestFile   = toPath + "/" + targetPlatform;
        var manifestBundle = BundleEncoder.CreateBundleFromFile(manifestFile);
        var manifest       = manifestBundle.LoadAsset <AssetBundleManifest>("AssetBundleManifest");

        LogUtil.Debug("WriteBundleHashFile: manifestFile=" + manifestFile);

        var dependants = new Dictionary <string, List <string> >();

        foreach (var file in manifest.GetAllAssetBundles())
        {
            string[] dependencies = manifest.GetAllDependencies(file);
            foreach (var depend in dependencies)
            {
                if (!dependants.ContainsKey(depend))
                {
                    dependants[depend] = new List <string>();
                }
                dependants[depend].Add(file);
            }
        }

        foreach (var file in manifest.GetAllAssetBundles())
        {
            writer.WritePropertyName(file);
            writer.WriteObjectStart();

            writer.WritePropertyName("hash");
            writer.Write(ComputeBundleAssetHash(toPath, targetPlatform, file));

            writer.WritePropertyName("depends");
            writer.WriteArrayStart();
            string[] dependencies = manifest.GetAllDependencies(file);
            foreach (var depend in dependencies)
            {
                writer.Write(depend);
            }
            writer.WriteArrayEnd();

            writer.WritePropertyName("dependants");
            writer.WriteArrayStart();
            List <string> files = null;
            if (dependants.TryGetValue(file, out files))
            {
                foreach (var dependant in files)
                {
                    writer.Write(dependant);
                }
            }
            else
            {
                LogUtil.Debug("WriteBundleHashFile: file " + file + " has no dependants!");
            }
            writer.WriteArrayEnd();

            writer.WriteObjectEnd();
        }

        writer.WriteObjectEnd();
        writer.OutputToFile(filename);
    }