Exemple #1
0
    private void EnterLevel(LevelDatas.LevelDatas lev)
    {
        OnBackPress();
        Main.Ins.GameBattleEx.Pause();

        U3D.LoadLevel(lev, LevelMode.SinglePlayerTask, (GameMode)lev.LevelType);
    }
Exemple #2
0
    void OnSelectLevel(LevelDatas.LevelDatas lev)
    {
        Material loadingTexture = null;

        if (!string.IsNullOrEmpty(lev.BgTexture))
        {
            if (singlePlayer)
            {
                loadingTexture = GameObject.Instantiate(Resources.Load <Material>(lev.BgTexture)) as Material;
                if (loadingTexture != null)
                {
                    background.material = loadingTexture;
                }
            }
            else
            {
                for (int i = 0; i < Main.Ins.CombatData.Chapter.resPath.Length; i++)
                {
                    if (Main.Ins.CombatData.Chapter.resPath[i].EndsWith(lev.BgTexture + ".jpg"))
                    {
                        byte[]    array = System.IO.File.ReadAllBytes(Main.Ins.CombatData.Chapter.resPath[i]);
                        Texture2D tex   = new Texture2D(0, 0);
                        tex.LoadImage(array);
                        loadingTexture = GameObject.Instantiate(Resources.Load <Material>("Scene10")) as Material;
                        loadingTexture.SetTexture("_MainTex", tex);
                        loadingTexture.SetColor("_TintColor", Color.white);
                        background.material = loadingTexture;
                        break;
                    }
                }
            }
        }
        select    = lev;
        Task.text = select.Name;
    }
    //只加载地图/地图物件.要令所有客户端初始化完毕后状态一致,然后用指令播放器,播放帧指令.
    //如果是单机,就使用帧播放
    void OnLoadFinishedEx(LevelDatas.LevelDatas lev)
    {
        Main.Ins.SoundManager.Enable(true);
        LevelScriptBase script = GetLevelScript(lev.LevelScript);

        if (script == null)
        {
            UnityEngine.Debug.LogError(string.Format("level script is null levId:{0}, levScript:{1}", lev.ID, lev.LevelScript));
            return;
        }

        Main.Ins.CombatData.GScript = script;
        script.OnLoad();
        //加载场景配置数据
        Main.Ins.SceneMng.OnEnterLevel();
        GameObject battleRoot = new GameObject("GameBattle");

        Main.Ins.GameBattleEx = battleRoot.AddComponent <GameBattleEx>();
        //等脚本设置好物件的状态后,根据状态决定是否生成受击盒,攻击盒等.
        Main.Ins.GameBattleEx.Init(script);
        FrameReplay.Instance.OnBattleStart();
        //寻路
        PathHelper.Ins.StartCalc();
        //如果是录制模式-完毕后不要打开战斗UI
        if (Main.Ins.CombatData.Replay)
        {
            Main.Ins.EnterState(Main.Ins.ReplayState);
        }
        else
        {
            Main.Ins.EnterState(Main.Ins.FightState);
        }
    }
    public Chapter FindChapterByLevel(LevelDatas.LevelDatas lev)
    {
        if (Dlcs.Count == 0 && Main.Ins.GameStateMgr.gameStatus.pluginChapter != null)
        {
            for (int i = 0; i < Main.Ins.GameStateMgr.gameStatus.pluginChapter.Count; i++)
            {
                if (Main.Ins.GameStateMgr.gameStatus.pluginChapter[i].Installed)
                {
                    Dlcs.Add(Main.Ins.GameStateMgr.gameStatus.pluginChapter[i]);
                }
            }
        }

        for (int i = 0; i < Dlcs.Count; i++)
        {
            List <LevelDatas.LevelDatas> all = Dlcs[i].LoadAll();
            for (int j = 0; j < all.Count; j++)
            {
                if (all[j] == lev)
                {
                    return(Dlcs[i]);
                }
            }
        }
        return(null);
    }
 public List <LevelDatas.LevelDatas> GetAllLevel()
 {
     if (_data.Count != 0)
     {
         return(_data);
     }
     //加载外部的proto.bytes,获取里面的数据
     Level [] data = GetAllItem();
     for (int i = 0; i < data.Length; i++)
     {
         LevelDatas.LevelDatas d = new LevelDatas.LevelDatas();
         d.BgmName        = data[i].BgmName;
         d.BgTexture      = data[i].BgTexture;
         d.DisableFindWay = false;//已取消该配置,由剧本对应的脚本重写该数据位决定.
         d.ID             = data[i].ID;
         d.LevelScript    = data[i].LevelScript;
         d.LevelType      = data[i].LevelType;
         d.Name           = data[i].Name;
         //pass param均由关卡剧本脚本来处理-硬编码在代码内
         d.Scene       = data[i].Scene;
         d.sceneItems  = data[i].sceneItems;
         d.StartScript = data[i].StartScript;
         _data.Add(d);
     }
     return(_data);
 }
 //打开资料片中指定关卡
 public void PlayDlc(Chapter chapter, int levelIdx)
 {
     Main.Ins.GameStateMgr.SaveState();
     LevelDatas.LevelDatas lev = chapter.GetItem(levelIdx);
     Main.Ins.CombatData.GLevelItem = lev;
     Main.Ins.CombatData.GRecord    = null;
     Main.Ins.CombatData.GLevelMode = LevelMode.SinglePlayerTask;
     Main.Ins.CombatData.GGameMode  = GameMode.Normal;
     Main.Ins.CombatData.wayPoints  = CombatData.GetWayPoint(lev);
     U3D.LoadLevelEx();
 }
Exemple #7
0
 string GenerateRecordName(LevelDatas.LevelDatas data, LevelMode lm, GameMode gm)
 {
     //是什么类型的,单机,模组,联机,
     //模式-场景-主角-{单机/联机}
     string [] gms = new string[] { "盟主", "劫镖", "护城", "暗杀", "死斗", "普通" };
     if (lm == LevelMode.MultiplyPlayer)
     {
         return(string.Format("{0}_{1}_{2}_{3}人_联机", gms[(int)gm - 1], data.Name, Main.Ins.GameStateMgr.gameStatus.NickName, Main.Ins.RoomMng.Current.maxPlayer));
     }
     return(string.Format("{0}-{1}-{2}_剧情", gms[(int)gm - 1], data.Name, Main.Ins.GameStateMgr.gameStatus.NickName));
 }
Exemple #8
0
    public static List <WayPoint> GetWayPoint(LevelDatas.LevelDatas level)
    {
        List <WayPoint> wayPoint = new List <WayPoint>();
        string          items    = level.sceneItems;

        if ((wayPoint == null || wayPoint.Count == 0) && !string.IsNullOrEmpty(items))
        {
            wayPoint = WayLoader.ReLoad(items);
        }
        return(wayPoint);
    }
Exemple #9
0
    void AddGridItem(LevelDatas.LevelDatas i, string strTag, UnityEngine.Events.UnityAction <LevelDatas.LevelDatas> call, Transform parent)
    {
        GameObject objPrefab = Resources.Load("LevelItem", typeof(GameObject)) as GameObject;
        GameObject obj       = GameObject.Instantiate(objPrefab) as GameObject;

        obj.transform.SetParent(parent);
        obj.name = strTag;
        obj.GetComponent <Button>().onClick.AddListener(() => { call(i); });
        obj.GetComponentInChildren <Text>().text = strTag;
        obj.transform.localPosition = Vector3.zero;
        obj.transform.localScale    = Vector3.one;
    }
    public void Load()
    {
        LevelDatas.LevelDatas lev = Main.Ins.CombatData.GetGlobalLevel(LevelId);
        Main.Ins.CombatData.Chapter    = Main.Ins.DlcMng.FindChapter((LevelId / 1000) * 1000);
        Main.Ins.CombatData.GLevelItem = lev;
        Main.Ins.CombatData.GLevelMode = LevelMode.MultiplyPlayer;
        RoomInfo r = Main.Ins.RoomMng.GetRoom((int)RoomId);

        Main.Ins.RoomMng.Current      = r;
        Main.Ins.CombatData.GGameMode = (GameMode)r.rule;
        Main.Ins.CombatData.wayPoints = null;
        //LoadingWnd.Instance.Open();
        U3D.LoadLevelEx();
    }
    public LevelDatas.LevelDatas GetLevel(int level)
    {
        Level l = this.GetItem(level);

        LevelDatas.LevelDatas d = new LevelDatas.LevelDatas();
        d.BgmName        = l.BgmName;
        d.BgTexture      = l.BgTexture;
        d.DisableFindWay = false;//已取消该配置,由剧本对应的脚本重写该数据位决定.
        d.ID             = l.ID;
        d.LevelScript    = l.LevelScript;
        d.LevelType      = l.LevelType;
        d.Name           = l.Name;
        //pass param均由关卡剧本脚本来处理-硬编码在代码内
        d.Scene       = l.Scene;
        d.sceneItems  = l.sceneItems;
        d.StartScript = l.StartScript;
        return(d);
    }
    IEnumerator LoadLevelAsync()
    {
        int displayProgress = 0;
        int toProgress      = 0;

        yield return(0);

        LevelDatas.LevelDatas lev = Main.Ins.CombatData.GLevelItem;
        ResMng.LoadScene(lev.Scene);
        mAsync = SceneManager.LoadSceneAsync(lev.Scene);
        mAsync.allowSceneActivation = false;
        while (mAsync.progress < 0.9f)
        {
            toProgress = (int)mAsync.progress * 100;
            while (displayProgress < toProgress)
            {
                ++displayProgress;
                if (LoadingDialogState.Exist)
                {
                    LoadingDialogState.Instance.UpdateProgress(displayProgress / 100.0f);
                }
                yield return(0);
            }
            yield return(0);
        }
        toProgress = 100;
        while (displayProgress < toProgress)
        {
            ++displayProgress;
            if (LoadingDialogState.Exist)
            {
                LoadingDialogState.Instance.UpdateProgress(displayProgress / 100.0f);
            }
            yield return(0);
        }
        mAsync.allowSceneActivation = true;
        while (!mAsync.isDone)
        {
            yield return(0);
        }
        OnLoadFinishedEx(lev);
        Destroy(this);
    }
Exemple #13
0
    void Init()
    {
        Yes.onClick.AddListener(() =>
        {
            OnEnterLevel();
        });
        Cancel.onClick.AddListener(() =>
        {
            OnPreviousPress();
        });

        if (singlePlayer)
        {
            //单机关卡
            for (int i = 1; i <= Main.Ins.GameStateMgr.gameStatus.Level; i++)
            {
                LevelDatas.LevelDatas lev = Main.Ins.DataMgr.GetData <LevelDatas.LevelDatas>(i);
                if (lev == null)
                {
                    continue;
                }
                Idevgame.Util.LevelUtils.AddGridItem(lev, rootMenu.transform, OnSelectLevel);
                select = lev;
            }
        }
        else
        {
            //剧本关卡
            for (int i = 1; i <= Main.Ins.CombatData.Chapter.level; i++)
            {
                LevelDatas.LevelDatas lev = Main.Ins.CombatData.Chapter.GetItem(i);
                if (lev == null)
                {
                    continue;
                }
                Idevgame.Util.LevelUtils.AddGridItem(lev, rootMenu.transform, OnSelectLevel);
                select = lev;
            }
        }
        OnSelectLevel(select);
    }
Exemple #14
0
    public LevelDatas.LevelDatas GetLevel(int chapterId, int id)
    {
        if (chapterId == 0)
        {
            LevelDatas.LevelDatas lev = Main.Ins.DataMgr.GetData <LevelDatas.LevelDatas>(id);
            if (lev != null)
            {
                return(lev);
            }
        }

        List <LevelDatas.LevelDatas> l = Main.Ins.DlcMng.GetDlcLevel(chapterId);

        for (int i = 0; i < l.Count; i++)
        {
            if (l[i].ID == id)
            {
                return(l[i]);
            }
        }
        Debug.LogError(string.Format("无法找到指定的剧本{0}关卡{1}", chapterId, id));
        return(null);
    }
Exemple #15
0
    void Init()
    {
        Control("CreateWorld").GetComponent <Button>().onClick.AddListener(() =>
        {
            OnEnterLevel();
        });
        GameObject RuleGroup = Control("RuleGroup", WndObject);
        Toggle     rule0     = Control("0", RuleGroup).GetComponent <Toggle>();
        Toggle     rule1     = Control("1", RuleGroup).GetComponent <Toggle>();
        Toggle     rule2     = Control("2", RuleGroup).GetComponent <Toggle>();

        rule0.isOn = Main.Ins.GameStateMgr.gameStatus.Single.Mode == (int)GameMode.MENGZHU;
        rule1.isOn = Main.Ins.GameStateMgr.gameStatus.Single.Mode == (int)GameMode.ANSHA;
        rule2.isOn = Main.Ins.GameStateMgr.gameStatus.Single.Mode == (int)GameMode.SIDOU;

        rule0.onValueChanged.AddListener((bool select) => { if (select)
                                                            {
                                                                Main.Ins.GameStateMgr.gameStatus.Single.Mode = (int)GameMode.MENGZHU;
                                                            }
                                         });
        rule1.onValueChanged.AddListener((bool select) => { if (select)
                                                            {
                                                                Main.Ins.GameStateMgr.gameStatus.Single.Mode = (int)GameMode.ANSHA;
                                                            }
                                         });
        rule2.onValueChanged.AddListener((bool select) => { if (select)
                                                            {
                                                                Main.Ins.GameStateMgr.gameStatus.Single.Mode = (int)GameMode.SIDOU;
                                                            }
                                         });

        GameObject LifeGroup = Control("LifeGroup", WndObject);
        Toggle     Life0     = Control("0", LifeGroup).GetComponent <Toggle>();
        Toggle     Life1     = Control("1", LifeGroup).GetComponent <Toggle>();
        Toggle     Life2     = Control("2", LifeGroup).GetComponent <Toggle>();

        Life0.isOn = Main.Ins.GameStateMgr.gameStatus.Single.Life == 500;
        Life1.isOn = Main.Ins.GameStateMgr.gameStatus.Single.Life == 200;
        Life2.isOn = Main.Ins.GameStateMgr.gameStatus.Single.Life == 100;
        Life0.onValueChanged.AddListener((bool select) => { if (select)
                                                            {
                                                                Main.Ins.GameStateMgr.gameStatus.Single.Life = 500;
                                                            }
                                         });
        Life1.onValueChanged.AddListener((bool select) => { if (select)
                                                            {
                                                                Main.Ins.GameStateMgr.gameStatus.Single.Life = 200;
                                                            }
                                         });
        Life2.onValueChanged.AddListener((bool select) => { if (select)
                                                            {
                                                                Main.Ins.GameStateMgr.gameStatus.Single.Life = 100;
                                                            }
                                         });

        GameObject MainWeaponGroup = Control("FirstWeapon", WndObject);
        GameObject WeaponGroup     = Control("WeaponGroup", MainWeaponGroup);

        for (int i = 0; i <= 11; i++)
        {
            Toggle MainWeapon = Control(string.Format("{0}", i), WeaponGroup).GetComponent <Toggle>();
            MainWeapon.isOn = Main.Ins.GameStateMgr.gameStatus.Single.Weapon0 == i;
            MainWeapon.onValueChanged.AddListener(OnMainWeaponSelected);
        }

        GameObject SubWeaponGroup = Control("SubWeapon", WndObject);

        WeaponGroup = Control("WeaponGroup", SubWeaponGroup);
        for (int i = 0; i <= 11; i++)
        {
            Toggle subWeapon = Control(string.Format("{0}", i), WeaponGroup).GetComponent <Toggle>();
            subWeapon.isOn = Main.Ins.GameStateMgr.gameStatus.Single.Weapon1 == i;
            subWeapon.onValueChanged.AddListener(OnSubWeaponSelected);
        }

        Control("Return").GetComponent <Button>().onClick.AddListener(() =>
        {
            Main.Ins.GameStateMgr.SaveState();
            OnPreviousPress();
        });

        //地图模板,应该从所有地图表里获取,包括外部载入的地图.
        TemplateRoot = Control("WorldRoot", WndObject);
        LevelDatas.LevelDatas[] allLevel = Main.Ins.CombatData.GetAllLevel();
        for (int i = 0; i < allLevel.Length; i++)
        {
            LevelDatas.LevelDatas lev = allLevel[i];
            if (lev == null)
            {
                continue;
            }
            Idevgame.Util.LevelUtils.AddGridItem(lev, TemplateRoot.transform, OnSelectLevel);
        }
        select = Main.Ins.CombatData.GetLevel(Main.Ins.GameStateMgr.gameStatus.ChapterTemplate, Main.Ins.GameStateMgr.gameStatus.Single.LevelTemplate);
        OnSelectLevel(select);

        GameObject ModelGroup = Control("ModelGroup");

        for (int i = 0; i < 20; i++)
        {
            Toggle modelTog = Control(string.Format("{0}", i), ModelGroup).GetComponent <Toggle>();
            Text   t        = modelTog.GetComponentInChildren <Text>();
            t.text = Main.Ins.DataMgr.GetDatasArray <ModelDatas.ModelDatas>()[i].Name;
            var k = i;
            modelTog.isOn = Main.Ins.GameStateMgr.gameStatus.Single.Model == i;
            modelTog.onValueChanged.AddListener((bool select) => { if (select)
                                                                   {
                                                                       Main.Ins.GameStateMgr.gameStatus.Single.Model = k;
                                                                   }
                                                });
        }

        GameObject TimeGroup = Control("GameTime", WndObject);

        for (int i = 0; i < 3; i++)
        {
            Toggle TimeToggle = Control(string.Format("{0}", i), TimeGroup).GetComponent <Toggle>();
            var    k          = i;
            TimeToggle.isOn = Main.Ins.GameStateMgr.gameStatus.Single.RoundTime == ConstRoundTime[k];
            TimeToggle.onValueChanged.AddListener((bool selected) => { if (selected)
                                                                       {
                                                                           Main.Ins.GameStateMgr.gameStatus.Single.RoundTime = ConstRoundTime[k];
                                                                       }
                                                  });
        }

        GameObject PlayerGroup = Control("PlayerGroup", WndObject);

        for (int i = 0; i <= 4; i++)
        {
            Toggle PlayerToggle = Control(string.Format("{0}", i), PlayerGroup).GetComponent <Toggle>();
            var    k            = i;
            PlayerToggle.isOn = Main.Ins.GameStateMgr.gameStatus.Single.MaxPlayer == ConstPlayer[k];
            PlayerToggle.onValueChanged.AddListener((bool selected) =>
            {
                if (selected)
                {
                    Main.Ins.GameStateMgr.gameStatus.Single.MaxPlayer = ConstPlayer[k];
                }
            });
        }

        GameObject DisallowGroup  = Control("DisallowGroup", WndObject);
        Toggle     DisallowToggle = Control("0", DisallowGroup).GetComponent <Toggle>();

        DisallowToggle.isOn = Main.Ins.GameStateMgr.gameStatus.Single.DisallowSpecialWeapon;
        DisallowToggle.onValueChanged.AddListener((bool selected) => { Main.Ins.GameStateMgr.gameStatus.Single.DisallowSpecialWeapon = selected; });
    }
    public void LoadMap(int level)
    {
        LevelDatas.LevelDatas lev = Main.Ins.DataMgr.GetData <LevelDatas.LevelDatas>(level);
        DesFile des = Main.Ins.DesLoader.Load(lev.sceneItems);
        GMBFile gmb = Main.Ins.GMBLoader.Load(lev.sceneItems);

        if (lev == null || des == null || gmb == null)
        {
            Debug.LogError("can not find");
            return;
        }
        LoadDesMap(lev.sceneItems);
        return;

        //return;
        bool generateFile = true;

        if (!System.IO.Directory.Exists("Assets/Materials/" + level + "/"))
        {
            System.IO.Directory.CreateDirectory("Assets/Materials/" + level + "/");
            //generateFile = true;
        }

        //Material[] mat = new Material[gmb.ShaderCount];
        //for (int x = 0; x < gmb.ShaderCount; x++)
        //{
        //    //mat[x] = new Material
        //    //gmb.shader[x].
        //}
        string shaders = "Unlit/Texture";//因为场景如果都不接受光照,那么会显得没什么氛围

        shaders = "Mobile/Diffuse";
        Material[] mat = new Material[gmb.TexturesCount];
        for (int x = 0; x < gmb.TexturesCount; x++)
        {
            mat[x] = new Material(Shader.Find(shaders));
            string tex = gmb.TexturesNames[x];
            int    del = tex.LastIndexOf('.');
            if (del != -1)
            {
                tex = tex.Substring(0, del);
            }
            Texture texture = Resources.Load <Texture>(tex);
            //这里的贴图可能是一个ifl文件,这种先不考虑,手动修改
            if (texture == null)
            {
                Debug.LogError("texture miss:" + tex);
            }
            mat[x].SetTexture("_MainTex", texture);
            mat[x].name = string.Format("{0:D2}_{1:D2}", level, x);
            if (generateFile)
            {
                //AssetDatabase.CreateAsset(mat[x], "Assets/Materials/" + level + "/" + mat[x].name + ".mat");
                //AssetDatabase.Refresh();
            }
        }

        while (true)
        {
            for (int i = 0; i < Mathf.Min(des.SceneItems.Count, gmb.SceneObjectsCount); i++)
            {
                //if (des.SceneItems[i].name != "ian1633")
                //    continue;

                GameObject objMesh = new GameObject();
                objMesh.name = des.SceneItems[i].name;
                objMesh.transform.localRotation = Quaternion.identity;
                objMesh.transform.localPosition = Vector3.zero;
                objMesh.transform.localScale    = Vector3.one;
                bool realObject = false;//是不是正常物体,虚拟体无需设置材质球之类
                for (int j = 0; j < gmb.SceneObjectsCount; j++)
                {
                    if (gmb.mesh[j].name == objMesh.name && j == i)
                    {
                        realObject = true;
                        Mesh w = new Mesh();
                        //前者子网格编号,后者 索引缓冲区
                        Dictionary <int, List <int> > tr = new Dictionary <int, List <int> >();
                        List <Vector3> ve  = new List <Vector3>();
                        List <Vector2> uv  = new List <Vector2>();
                        List <Vector3> nor = new List <Vector3>();
                        List <Color>   col = new List <Color>();
                        for (int k = 0; k < gmb.mesh[j].faces.Count; k++)
                        {
                            int key = gmb.mesh[j].faces[k].material;
                            if (tr.ContainsKey(key))
                            {
                                tr[key].Add(gmb.mesh[j].faces[k].triangle[0]);
                                tr[key].Add(gmb.mesh[j].faces[k].triangle[1]);
                                tr[key].Add(gmb.mesh[j].faces[k].triangle[2]);
                            }
                            else
                            {
                                tr.Add(key, new List <int>());
                                tr[key].Add(gmb.mesh[j].faces[k].triangle[0]);
                                tr[key].Add(gmb.mesh[j].faces[k].triangle[1]);
                                tr[key].Add(gmb.mesh[j].faces[k].triangle[2]);
                            }
                        }
                        for (int k = 0; k < gmb.mesh[j].vertices.Count; k++)
                        {
                            Vector3    vecLocalToWorld = des.SceneItems[i].pos;
                            Quaternion quatToWorld     = des.SceneItems[i].quat;

//                            Object ian1633
//{
//                                Position: -894.278 - 2506.653 51.167
//  Quaternion: 0.000 0.000 0.000 1.000
//  TextureAnimation: 0 0.000 0.000
//  Custom:
//                                {
//                                }
//                            }
//                            */
//                           Vector3 vecLocalToWorld = new Vector3(-894.278f, -2506.653f, 51.167f);
//                            Quaternion quatToWorld = new Quaternion(0f, 0f, 0f, 1f);

//                            Vector3 vecWorldToLocal = new Vector3(-vecLocalToWorld.x, -vecLocalToWorld.z, -vecLocalToWorld.y);
//                            Quaternion quat = new Quaternion(-quatToWorld.y, -quatToWorld.w, -quatToWorld.z, quatToWorld.x);
                            Vector3 vecWorldToLocal = new Vector3(-vecLocalToWorld.x, -vecLocalToWorld.y, -vecLocalToWorld.z);
                            Vector3 vec             = gmb.mesh[j].vertices[k].pos + vecWorldToLocal;
                            vec = Quaternion.Inverse(quatToWorld) * vec;
                            //这个是世界坐标,要变换到自身坐标系来。
                            //ve.Add(gmb.mesh[j].vertices[k].pos);
                            ve.Add(vec);
                            uv.Add(gmb.mesh[j].vertices[k].uv);
                            col.Add(gmb.mesh[j].vertices[k].color);
                            nor.Add(gmb.mesh[j].vertices[k].normal);
                        }
                        w.SetVertices(ve);
                        w.uv           = uv.ToArray();
                        w.subMeshCount = tr.Count;
                        int ss = 0;
                        //查看这个网格使用了哪些材质,然后把这几个材质取出来
                        List <Material> targetMat = new List <Material>();
                        foreach (var each in tr)
                        {
                            w.SetIndices(each.Value.ToArray(), MeshTopology.Triangles, ss++);
                            if (each.Key >= 0 && each.Key < gmb.shader.Length)
                            {
                                int materialIndex = gmb.shader[each.Key].TextureArg0;
                                if (materialIndex >= 0 && materialIndex < mat.Length)
                                {
                                    targetMat.Add(mat[materialIndex]);
                                }
                                else
                                {
                                    //即使没有贴图,也存在材质
                                    Material defaults = new Material(Shader.Find("Mobile/Diffuse"));
                                    defaults.name = string.Format("{0:D2}_{1:D2}", level, materialIndex);
                                    if (generateFile)
                                    {
                                        //AssetDatabase.CreateAsset(defaults, "Assets/Materials/" + level + "/" + defaults.name + ".mat");
                                        //AssetDatabase.Refresh();
                                    }
                                    targetMat.Add(defaults);
                                }
                            }
                        }
                        MeshRenderer mr = objMesh.AddComponent <MeshRenderer>();
                        MeshFilter   mf = objMesh.AddComponent <MeshFilter>();
                        mf.sharedMesh         = w;
                        mf.sharedMesh.colors  = col.ToArray();
                        mf.sharedMesh.normals = nor.ToArray();
                        mf.sharedMesh.RecalculateBounds();
                        mf.sharedMesh.RecalculateNormals();
                        mr.materials = targetMat.ToArray();
                        string vis = "";
                        if (des.SceneItems[i].ContainsKey("visible", out vis))
                        {
                            if (vis == "0")
                            {
                                mr.enabled = false;
                                mr.gameObject.AddComponent <MeshCollider>();
                            }
                        }

                        /*
                         * animation=sin
                         * deformsize=5
                         * deformfreq=0.25
                         * deformrange=5.0
                         */
                        string block = "";
                        if (des.SceneItems[i].ContainsKey("blockplayer", out block))
                        {
                            if (block == "no")
                            {
                            }
                            else
                            {
                                mr.gameObject.AddComponent <MeshCollider>();
                            }
                        }
                        else
                        {
                            mr.gameObject.AddComponent <MeshCollider>();
                        }
                        break;
                    }
                }

                objMesh.transform.SetParent(transform);
                objMesh.transform.localRotation = des.SceneItems[i].quat;
                objMesh.transform.localPosition = des.SceneItems[i].pos;
                //if (objMesh.GetComponent<MeshFilter>() != null && generateFile)
                //{
                //    AssetDatabase.CreateAsset(objMesh.GetComponent<MeshFilter>().sharedMesh, "Assets/Materials/" + level + "/" + des.SceneItems[i].name + ".asset");
                //    AssetDatabase.Refresh();
                //}
                //yield return 0;
            }
            return;
            //yield break;
        }
    }
    void Init()
    {
        roomName        = Control("RoomNameInput").GetComponent <UnityEngine.UI.InputField>();
        roomName.text   = string.Format("{0}{1}", Main.Ins.GameStateMgr.gameStatus.NickName, "的房间");
        roomSecret      = Control("RoomSecretInput").GetComponent <UnityEngine.UI.InputField>();
        roomSecret.text = "";
        Control("CreateWorld").GetComponent <Button>().onClick.AddListener(() =>
        {
            OnCreateRoom();
        });
        GameObject RuleGroup = Control("RuleGroup", WndObject);
        Toggle     rule0     = Control("0", RuleGroup).GetComponent <Toggle>();
        Toggle     rule1     = Control("1", RuleGroup).GetComponent <Toggle>();
        Toggle     rule2     = Control("2", RuleGroup).GetComponent <Toggle>();

        rule0.isOn = Main.Ins.GameStateMgr.gameStatus.NetWork.Mode == (int)GameMode.MENGZHU;
        rule1.isOn = Main.Ins.GameStateMgr.gameStatus.NetWork.Mode == (int)GameMode.ANSHA;
        rule2.isOn = Main.Ins.GameStateMgr.gameStatus.NetWork.Mode == (int)GameMode.SIDOU;

        rule0.onValueChanged.AddListener((bool select) => { if (select)
                                                            {
                                                                Main.Ins.GameStateMgr.gameStatus.NetWork.Mode = (int)GameMode.MENGZHU;
                                                            }
                                         });
        rule1.onValueChanged.AddListener((bool select) => { if (select)
                                                            {
                                                                Main.Ins.GameStateMgr.gameStatus.NetWork.Mode = (int)GameMode.ANSHA;
                                                            }
                                         });
        rule2.onValueChanged.AddListener((bool select) => { if (select)
                                                            {
                                                                Main.Ins.GameStateMgr.gameStatus.NetWork.Mode = (int)GameMode.SIDOU;
                                                            }
                                         });

        GameObject LifeGroup = Control("LifeGroup", WndObject);
        Toggle     Life0     = Control("0", LifeGroup).GetComponent <Toggle>();
        Toggle     Life1     = Control("1", LifeGroup).GetComponent <Toggle>();
        Toggle     Life2     = Control("2", LifeGroup).GetComponent <Toggle>();

        Life0.isOn = Main.Ins.GameStateMgr.gameStatus.NetWork.Life == 500;
        Life1.isOn = Main.Ins.GameStateMgr.gameStatus.NetWork.Life == 200;
        Life2.isOn = Main.Ins.GameStateMgr.gameStatus.NetWork.Life == 100;
        Life0.onValueChanged.AddListener((bool select) => { if (select)
                                                            {
                                                                Main.Ins.GameStateMgr.gameStatus.NetWork.Life = 500;
                                                            }
                                         });
        Life1.onValueChanged.AddListener((bool select) => { if (select)
                                                            {
                                                                Main.Ins.GameStateMgr.gameStatus.NetWork.Life = 200;
                                                            }
                                         });
        Life2.onValueChanged.AddListener((bool select) => { if (select)
                                                            {
                                                                Main.Ins.GameStateMgr.gameStatus.NetWork.Life = 100;
                                                            }
                                         });

        Control("Return").GetComponent <Button>().onClick.AddListener(() =>
        {
            Main.Ins.GameStateMgr.SaveState();
            OnPreviousPress();
        });

        //地图模板,应该从所有地图表里获取,包括外部载入的地图.
        TemplateRoot = Control("WorldRoot", WndObject);
        LevelDatas.LevelDatas[] allLevel = Main.Ins.CombatData.GetAllLevel();
        for (int i = 0; i < allLevel.Length; i++)
        {
            LevelDatas.LevelDatas lev = allLevel[i];
            if (lev == null)
            {
                continue;
            }
            Idevgame.Util.LevelUtils.AddGridItem(lev, TemplateRoot.transform, OnSelectLevel);
        }
        select = Main.Ins.CombatData.GetLevel(Main.Ins.GameStateMgr.gameStatus.ChapterTemplate, Main.Ins.GameStateMgr.gameStatus.NetWork.LevelTemplate);
        OnSelectLevel(select);

        GameObject TimeGroup = Control("GameTime", WndObject);

        for (int i = 0; i < 3; i++)
        {
            Toggle TimeToggle = Control(string.Format("{0}", i), TimeGroup).GetComponent <Toggle>();
            var    k          = i;
            TimeToggle.isOn = Main.Ins.GameStateMgr.gameStatus.NetWork.RoundTime == ConstRoundTime[k];
            TimeToggle.onValueChanged.AddListener((bool selected) => { if (selected)
                                                                       {
                                                                           Main.Ins.GameStateMgr.gameStatus.NetWork.RoundTime = ConstRoundTime[k];
                                                                       }
                                                  });
        }

        GameObject PlayerGroup = Control("PlayerGroup", WndObject);

        for (int i = 0; i <= 4; i++)
        {
            Toggle PlayerToggle = Control(string.Format("{0}", i), PlayerGroup).GetComponent <Toggle>();
            var    k            = i;
            PlayerToggle.isOn = Main.Ins.GameStateMgr.gameStatus.NetWork.MaxPlayer == ConstPlayer[k];
            PlayerToggle.onValueChanged.AddListener((bool selected) =>
            {
                if (selected)
                {
                    Main.Ins.GameStateMgr.gameStatus.NetWork.MaxPlayer = ConstPlayer[k];
                }
            });
        }
    }
 void OnSelectLevel(LevelDatas.LevelDatas lev)
 {
     select = lev;
     Main.Ins.GameStateMgr.gameStatus.NetWork.LevelTemplate = lev.ID;
     Control("Task").GetComponent <Text>().text             = select.Name;
 }