//在平台上创建英雄
        public void CreateHero(long roleId, Vector2 screenPos)
        {
            HeroInfo info = Global.HeroInfoList.Find(x => x.RoleId == roleId);

            if (info != null)
            {
                HeroEntity heroEntity = HeroDBModel.Instance.Get(info.HeroID);
                GameObject go         = RoleMgr.Instance.LoadRole(RoleType.Hero, heroEntity.PrefabName);
                RoleCtrl   ctrl       = go.GetComponent <RoleCtrl>();
                ctrl.Init(RoleType.Hero, info, null);
                HeroPlatform platform = GetHeroPlatformByScreenPos(screenPos);
                platform.RefreshRoleId(ctrl.CurRoleInfo.RoleId);
                ctrl.RefreshPlatfrom(platform);
                ctrl.StandOnPlatfrom();
                go.transform.position = platform.transform.TransformPoint(platform.StandPos);
                bool inFoward = ForwardHeroPlatformList.Contains(platform);
                if (inFoward)
                {
                    AddHero(ctrl, true);
                }
                else
                {
                    AddHero(ctrl, false);
                }
                ctrl.OnRoleDestory += OnRoleDestoryCallBack;
                ctrl.OnRoleDie     += OnRoleDieCallBack;
                return;
            }
            Debug.Log("错误:在模拟服务器上找不到持有的英雄信息");
        }
        //创建怪物
        private void CreateMonster()
        {
            //if (m_CurrentCreateCount > 0) return;
            List <GameLevelMonsterEntity> gameLevelMonsterEntityList = GameLevelMonsterDBModel.Instance.GetMonsterListByLevelAndGeade(CurLevel, CurGrade);

            for (int i = 0; i < gameLevelMonsterEntityList.Count; i++)
            {
                if (String.IsNullOrEmpty(gameLevelMonsterEntityList[i].SpriteRowAndCol))
                {
                    continue;
                }
                string[] rowAndColArr = gameLevelMonsterEntityList[i].SpriteRowAndCol.Split('|');
                for (int j = 0; j < rowAndColArr.Length; j++)
                {
                    SpriteEntity spriteEntity = SpriteDBModel.Instance.GetSpriteEntityById(gameLevelMonsterEntityList[i].SpriteId);
                    if (spriteEntity != null)
                    {
                        GameObject go = RoleMgr.Instance.LoadRole(RoleType.Monster, spriteEntity.PrefabName);
                        if (go != null)
                        {
                            RoleCtrl ctrl = go.GetComponent <RoleCtrl>();
                            if (ctrl != null)
                            {
                                ctrl.OnRoleDie     = OnRoleDieCallBack;
                                ctrl.OnRoleDestory = OnRoleDestoryCallBack;

                                MonsterInfo info = new MonsterInfo(spriteEntity);
                                info.RoleId       = ++m_TempIndex;
                                info.RoleNickName = spriteEntity.Name;
                                info.Level        = spriteEntity.Level;
                                info.MaxHP        = spriteEntity.Hp;
                                info.CurrentHP    = info.MaxHP;
                                info.PhyAtk       = spriteEntity.PhyAtk;
                                info.MgicAtk      = spriteEntity.MgicAtk;
                                info.PhyDef       = spriteEntity.PhyDef;
                                info.MgicDef      = spriteEntity.MgicDef;
                                info.Cri          = spriteEntity.Cri;
                                info.CriValue     = spriteEntity.CriValue;
                                info.SpriteEntity = spriteEntity;
                                ctrl.AttackRange  = spriteEntity.AttackRange;
                                ctrl.MoveStep     = spriteEntity.MoveCellCount;
                                //位置赋值
                                string[] arr  = rowAndColArr[j].Split('_');
                                int      row  = arr[0].ToInt();
                                int      col  = arr[1].ToInt();
                                Node     node = GridManager.Instance.GetNode(row, col);
                                ctrl.transform.position = node.Position;
                                ctrl.Init(RoleType.Monster, info, new MonsterAI(ctrl, info));
                                BormMonsterCount++;
                                MonsterList.Add(ctrl);
                            }
                        }
                    }
                }
            }
        }
        private void CreatePlayer()
        {
            string     path = string.Format("Player{0}/Player{0}", Global.Instance.UserInfo.CurJob.ToString());
            GameObject go   = ResourcesMgr.Instance.Load(ResourcesMgr.ResourceType.Role, "Player/" + path);

            go.transform.position   = PlayerBornPos.transform.position;
            go.transform.rotation   = PlayerBornPos.transform.rotation;
            go.transform.localScale = Vector3.one;
            m_Player = go.GetComponent <RoleCtrl>();
            switch (Global.Instance.UserInfo.CurJob)
            {
            default:
                m_Player.Init(null, 3);
                break;
            }
            m_Player.OnRoleJumpToNextFloor = OnRoleJumpToNextFloor;
            m_Player.OnRoleDie             = OnRoleDead;
            m_Player.OnRoleHurt            = OnRoleHurt;
            m_Player.OnRoleAddHp           = OnRoleAddHp;
        }
        /// <summary>
        /// 创建地图 角色 怪物 障碍物 终点
        /// </summary>
        private void CreateMap(int level)
        {
            //生成障碍物
            List <ObstacleInfo> oobstaclePos = GameLevelDBModel.Instance.GetObstaclesInfoList(level);

            if (oobstaclePos != null)
            {
                for (int i = 0; i < oobstaclePos.Count; i++)
                {
                    GameObject go = ResourcesMrg.Instance.Load(ResourcesMrg.ResourceType.Item, "Obstacle" + oobstaclePos[i].ObstacleType, isCache: true);
                    go.transform.position = oobstaclePos[i].Pos;
                    //将此位置设为障碍物
                    Node n = GridManager.Instance.GetNodeByPos(oobstaclePos[i].Pos);
                    if (n != null)
                    {
                        n.IsObstacle = true;
                    }
                }
            }

            //生成终点
            Vector2    pos = GameLevelDBModel.Instance.GetOverPoint(level);
            GameObject go1 = ResourcesMrg.Instance.Load(ResourcesMrg.ResourceType.Item, "OverPoint", isCache: true);

            go1.transform.position = pos;
            Node n1 = GridManager.Instance.GetNodeByPos(go1.transform.position);

            if (n1 != null)
            {
                n1.IsObstacle = true;
            }
            OverPoint = go1;

            //生成角色
            List <RoleInfo> playerInfo = GameLevelDBModel.Instance.GetPlayerInfoList(level);

            if (playerInfo != null)
            {
                for (int i = 0; i < playerInfo.Count; i++)
                {
                    GameObject go = ResourcesMrg.Instance.Load(ResourcesMrg.ResourceType.Role, "Player", isCache: true);
                    go.transform.position = playerInfo[i].Pos;
                    Player = go.GetComponent <RoleCtrl>();
                    Player.Init(playerInfo[i].Range, OverPoint);
                    Faction1.AddRole(Player);
                    Player.OnWin += OnRoleWin;
                }
            }

            //生成怪物
            List <RoleInfo> monsterInfo = GameLevelDBModel.Instance.GetMonsterInfoList(level);

            if (monsterInfo != null)
            {
                for (int i = 0; i < monsterInfo.Count; i++)
                {
                    GameObject go = ResourcesMrg.Instance.Load(ResourcesMrg.ResourceType.Role, "Monster", isCache: true);
                    go.transform.position = monsterInfo[i].Pos;
                    RoleCtrl roleCtrl = go.GetComponent <RoleCtrl>();
                    roleCtrl.Init(monsterInfo[i].Range, Player.gameObject);
                    Faction2.AddRole(roleCtrl);
                    Node n = GridManager.Instance.GetNodeByPos(go.transform.position);
                    if (n != null)
                    {
                        n.IsObstacle = true;
                    }
                    Monsters.Add(roleCtrl);
                    roleCtrl.OnWin += OnRoleWin;
                }
            }
        }