예제 #1
0
    private IEnumerator ChangeSceneInternal(int sceneCfgID, Action sceneLoadComplete = null)
    {
        GameEventManager.RaiseEvent(GameEventTypes.ExitScene);

        GameEventManager.EnableEventFiring = false;
        string assetName = ConfigManager.Get <SceneCfgLoader>().GetSceneAssetName(sceneCfgID);

        string sceneBundleName = string.Format("scenes/scene_{0}.bundle", assetName.ToLower());

        m_operation = AssetBundleManager.LoadLevelAsync(sceneBundleName, assetName, false);

        m_progress = 0f;

        while (!m_operation.IsDone())
        {
            m_progress = m_operation.Progress;
            yield return(null);
        }

        m_operation.UnloadAssetBundle();

        AssetBundleManager.Clear();

        GameEventManager.EnableEventFiring = true;

        AssetBundleManager.UnloadAssetBundle(string.Format("scenes/{0}.bundle", assetName));

        var trunkMgrGo = GameObject.FindGameObjectWithTag("SceneTrunkMgr");

        if (trunkMgrGo != null)
        {
            trunkMgr = trunkMgrGo.GetComponent <SceneTrunkMgr>();
        }

        // 等待主角周围地块加载完毕
        if (trunkMgr != null)
        {
            while (trunkMgr.HasLoadingTrunk())
            {
                yield return(null);
            }
        }

        GameEventManager.RaiseEvent(GameEventTypes.EnterScene, sceneCfgID);

        if (sceneLoadComplete != null)
        {
            sceneLoadComplete();
        }
    }
예제 #2
0
    private static void SaveTrunksAsScenes(string sceneName, SceneTrunkMgr sceneTrunkMgr, List <TerrainTrunk> trunks)
    {
        string sceneSubDir = string.Format("Assets/Scenes/{0}_Trunks", sceneName);

        if (System.IO.Directory.Exists(sceneSubDir))
        {
            System.IO.Directory.Delete(sceneSubDir, true);
        }

        System.IO.Directory.CreateDirectory(sceneSubDir);

        for (int i = 0; i < trunks.Count; i++)
        {
            var trunk = trunks[i];

            string trunkSceneName = string.Format("{0}_{1}_{2}", sceneName, trunk.xIndex, trunk.zIndex);
            string trunkScenePath = string.Format("{0}/{1}.unity", sceneSubDir, trunkSceneName);

            var trunkScene = EditorSceneManager.NewScene(NewSceneSetup.EmptyScene, NewSceneMode.Additive);
            EditorSceneManager.SetActiveScene(trunkScene);

            trunk.terrian.transform.parent = null;
            EditorSceneManager.MoveGameObjectToScene(trunk.terrian.gameObject, trunkScene);

            EditorSceneManager.SaveScene(trunkScene, trunkScenePath);
            EditorSceneManager.CloseScene(trunkScene, true);

            var trunkAsset = AssetImporter.GetAtPath(trunkScenePath);
            var trunkName  = string.Format("trunk_{0}_{1}.bundle", trunk.xIndex, trunk.zIndex);

            trunkAsset.assetBundleName = string.Format("scenes/{0}/{1}", sceneName, trunkName);

            sceneTrunkMgr.entries[i] = new SceneTrunkDataEntry()
            {
                x = trunk.xIndex,
                z = trunk.zIndex,
                trunkBundlePath = trunkAsset.assetBundleName,
                trunkName       = trunkSceneName,
            };
        }
    }
 public void Setup(SceneTrunkMgr sceneTrunkmgr)
 {
     this.sceneTrunkMgr = sceneTrunkmgr;
 }