少年修仙传客户端代码仓库
client_Hale
2018-11-27 9e3cdc72314b5bfd401b37979111a4a6d6305bb4
5040 【前端】【1.3】助战机器人外观需求
9个文件已修改
2个文件已添加
566 ■■■■■ 已修改文件
Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0406_tagNPCAppear.cs 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0429_tagObjResetPos.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/H06_PlayerVsNPC/DTC0614_tagUseSkillPos.cs 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/HA1_Sys/DTCA127_tagMCStartChangeMap.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/HA7_Interaction/DTCA705_tagSCQueryPlayerCacheResult.cs 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/HB2_ActionMap/DTCB206_tagMCHelpBattleCallResult.cs 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ServerPack/HB2_ActionMap/HB206_tagMCHelpBattleCallResult.cs 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/GameActor/GAMgr.cs 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/GameActor/GA_NpcFightZZPlayer.cs 400 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/GameActor/GA_NpcFightZZPlayer.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Utility/EnumHelper.cs 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0406_tagNPCAppear.cs
@@ -67,7 +67,6 @@
                    break;
                case E_NpcType.Fight:
                case E_NpcType.FMBoss:
                case E_NpcType.FightAssist:
                    if (_npcConfig.Country == 1)
                    {
@@ -102,6 +101,36 @@
                    _actor = GAMgr.Instance.RequestNPCFight<GA_NpcFightNorm>(vNetData.ObjID, vNetData.NPCID, _group, vNetData);
                    break;
                case E_NpcType.FightAssist:
                    var _model = ModelCenter.Instance.GetModel<DungeonAssistModel>();
                    var _assistInfos = _model.GetAssistPlayerInfos();
                    DungeonAssistModel.AssistPlayerInfo _findedInfo = null;
                    foreach (var _assetInfo in _assistInfos)
                    {
                        if (_assetInfo.ObjID == (int)vNetData.ObjID)
                        {
                            _findedInfo = _assetInfo;
                            break;
                        }
                    }
                    if (_findedInfo == null)
                    {
                        if (!GA_NpcFightZZPlayer.s_UnCreateObjIDList.Contains(vNetData.ObjID))
                        {
                            GA_NpcFightZZPlayer.s_UnCreateObjIDList.Add(vNetData.ObjID);
                            //Debug.Log("尚未有助战对象信息. 加入未创建缓存");
                        }
                        else
                        {
                            Debug.LogErrorFormat("不应该存在出现目标再次出现的时候未创建列表中还存在该目标的现象: {0}", vNetData.ObjID);
                        }
                    }
                    GAMgr.Instance.RequestPlayer<GA_NpcFightZZPlayer>(vNetData.ObjID, E_ActorGroup.Player, vNetData);
                    break;
            }
        }
Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0429_tagObjResetPos.cs
@@ -105,6 +105,11 @@
                GA_PlayerXMZZ _player = _actor as GA_PlayerXMZZ;
                _player.ClearAllCMD();
            }
            else if (_actor is GA_NpcFightZZPlayer)
            {
                GA_NpcFightZZPlayer _player = _actor as GA_NpcFightZZPlayer;
                _player.ClearAllCMD();
            }
        }
        //Debug.LogFormat("重置了 {0} 的坐标 {1}", vNetData.ObjID, new Vector2(vNetData.PosX, vNetData.PosY));}
Core/NetworkPackage/DTCFile/ServerPack/H06_PlayerVsNPC/DTC0614_tagUseSkillPos.cs
@@ -435,6 +435,10 @@
                        {
                            (_attacker as GA_PlayerXMZZ).Cmd_0614(vNetData);
                        }
                        else if (_attacker is GA_NpcFightZZPlayer)
                        {
                            (_attacker as GA_NpcFightZZPlayer).Cmd_0614(vNetData);
                        }
                    }
                }
Core/NetworkPackage/DTCFile/ServerPack/HA1_Sys/DTCA127_tagMCStartChangeMap.cs
@@ -144,6 +144,11 @@
        switch (_mapConfig.MapFBType)
        {
            case 0:
                foreach(var _id in DTCB206_tagMCHelpBattleCallResult.s_CacheObjIdList)
                {
                    LocalSave.DeleteKey("GA_NpcFightZZPlayer_" + _id);
                }
                DTCB206_tagMCHelpBattleCallResult.s_CacheObjIdList.Clear();
                break;
            default:
                ModelCenter.Instance.GetModel<DungeonModel>().ResetBufData();
Core/NetworkPackage/DTCFile/ServerPack/HA7_Interaction/DTCA705_tagSCQueryPlayerCacheResult.cs
@@ -7,19 +7,28 @@
using System.Collections;
using System.Collections.Generic;
using Snxxz.UI;
public class DTCA705_tagSCQueryPlayerCacheResult : DtcBasic {
public class DTCA705_tagSCQueryPlayerCacheResult : DtcBasic
{
    RoleParticularModel m_Model;
    RoleParticularModel model {
        get {
    RoleParticularModel model
    {
        get
        {
            return m_Model ?? (m_Model = ModelCenter.Instance.GetModel<RoleParticularModel>());
        }
    }
    public static Action<HA705_tagSCQueryPlayerCacheResult> OnRevPackage;
    public override void Done(GameNetPackBasic vNetPack)
    {
        base.Done(vNetPack);
        var package = vNetPack as HA705_tagSCQueryPlayerCacheResult;
        model.OnRevRoleEquip(package);
        if (OnRevPackage != null)
        {
            OnRevPackage(package);
        }
    }
}
Core/NetworkPackage/DTCFile/ServerPack/HB2_ActionMap/DTCB206_tagMCHelpBattleCallResult.cs
@@ -2,21 +2,42 @@
using System.Collections;
using Snxxz.UI;
// B2 06 助战召唤结果 #tagMCHelpBattleCallResult
// B2 06 ��ս�ٻ���� #tagMCHelpBattleCallResult
public class DTCB206_tagMCHelpBattleCallResult : DtcBasic {
public class DTCB206_tagMCHelpBattleCallResult : DtcBasic
{
    public static System.Collections.Generic.List<uint> s_CacheObjIdList = new System.Collections.Generic.List<uint>();
    DungeonAssistModel assistModel { get { return ModelCenter.Instance.GetModel<DungeonAssistModel>(); } }
    public override void Done(GameNetPackBasic vNetPack) {
    public override void Done(GameNetPackBasic vNetPack)
    {
        base.Done(vNetPack);
        HB206_tagMCHelpBattleCallResult vNetData = vNetPack as HB206_tagMCHelpBattleCallResult;
        assistModel.UpdataAssistPlayer(vNetData);
        LocalSave.SetString("GA_NpcFightZZPlayer_" + vNetData.ObjID, _content);
        if (!s_CacheObjIdList.Contains(vNetData.ObjID))
        {
            s_CacheObjIdList.Add(vNetData.ObjID);
            // Debug.LogFormat("--------{0}:  _content : " + _content, vNetData.ObjID);
        }
        if (GA_NpcFightZZPlayer.s_UnCreateObjIDList.Contains(vNetData.ObjID))
        {
            GA_NpcFightZZPlayer.s_UnCreateObjIDList.Remove(vNetData.ObjID);
            var _zzPlayer = GAMgr.Instance.GetBySID(vNetData.ObjID) as GA_NpcFightZZPlayer;
            if (_zzPlayer != null)
            {
                _zzPlayer.SyncHelpBattle((int)vNetData.PlayerID);
            }
        }
    }
}
Core/NetworkPackage/ServerPack/HB2_ActionMap/HB206_tagMCHelpBattleCallResult.cs
@@ -1,21 +1,42 @@
using UnityEngine;
using System.Collections;
// B2 06 助战召唤结果 #tagMCHelpBattleCallResult
public class HB206_tagMCHelpBattleCallResult : GameNetPackBasic {
    public uint ObjID;    // 助战实例ID
    public uint PlayerID;    // 助战镜像ID,大于1小于100代表机器人,如果是机器人前端按顺序自己记录对应实例ID代表已召唤
    public byte Job;    // ְҵ
    public HB206_tagMCHelpBattleCallResult () {
        _cmd = (ushort)0xB206;
    }
    public override void ReadFromBytes (byte[] vBytes) {
        TransBytes (out ObjID, vBytes, NetDataType.DWORD);
        TransBytes (out PlayerID, vBytes, NetDataType.DWORD);
        TransBytes (out Job, vBytes, NetDataType.BYTE);
    }
}
// B2 06 ��ս�ٻ���� #tagMCHelpBattleCallResult
public class HB206_tagMCHelpBattleCallResult : GameNetPackBasic
{
    public uint ObjID;    // ��սʵ��ID
    public uint PlayerID;    // ��ս����ID,����1С��100���������,����ǻ�����ǰ�˰�˳���Լ���¼��Ӧʵ��ID�������ٻ�
    //public byte Job;    // ְҵ
    public HB206_tagMCHelpBattleCallResult()
    {
        _cmd = (ushort)0xB206;
    }
    public override void ReadFromBytes(byte[] vBytes)
    {
        TransBytes(out ObjID, vBytes, NetDataType.DWORD);
        TransBytes(out PlayerID, vBytes, NetDataType.DWORD);
        //TransBytes (out Job, vBytes, NetDataType.BYTE);
    }
}
Fight/GameActor/GAMgr.cs
@@ -401,6 +401,9 @@
                case E_ActorClassType.PlayerXmzz:
                    _actor = new GA_PlayerXMZZ();
                    break;
                case E_ActorClassType.PlayerZZ:
                    _actor = new GA_NpcFightZZPlayer();
                    break;
            }
        }
@@ -1186,6 +1189,10 @@
        {
            return (byte)E_ActorClassType.ClientPlayer;
        }
        else if (_type == typeof(GA_NpcFightZZPlayer))
        {
            return (byte)E_ActorClassType.PlayerZZ;
        }
        return (byte)E_ActorClassType.UnDefine;
    }
Fight/GameActor/GA_NpcFightZZPlayer.cs
New file
@@ -0,0 +1,400 @@
using System.Collections.Generic;
using UnityEngine;
using Snxxz.UI;
public class GA_NpcFightZZPlayer : GActorPlayerBase, IOtherSelectable
{
    public class DungeonHelpInfo
    {
        public uint objID;
        public uint playerID;
        public byte job;
    }
    public static List<uint> s_UnCreateObjIDList = new List<uint>();
    private H0406_tagNPCAppear m_H0406;
    private CmdManager m_CmdManager;
    protected override void OnInit(GameNetPackBasic package)
    {
        base.OnInit(package);
        m_H0406 = package as H0406_tagNPCAppear;
        if (m_H0406 == null)
        {
            return;
        }
        CapsuleCollider _capCollider = Root.AddMissingComponent<CapsuleCollider>();
        _capCollider.height = 1.2f;
        _capCollider.center = new Vector3(0, .6f, 0);
        _capCollider.radius = .4f;
        Evt_PlayerClick _evtClick = Root.AddMissingComponent<Evt_PlayerClick>();
        _evtClick.ownerSID = ServerInstID;
        // 初始化坐标
        AdjustPos(m_H0406.PosX, m_H0406.PosY);
        ActorInfo.moveSpeed = 500f / m_H0406.Speed;
        ActorInfo.atkSpeed = 1;
        // -------------------------------------------------------------------------
        // -------------------------------------------------------------------------
        // -------------------------------------------------------------------------
        // -------------------------------------------------------------------------
        m_CmdManager = new CmdManager();
        if (!s_UnCreateObjIDList.Contains(m_H0406.ObjID))
        {
            var _valueInfo = LocalSave.GetString("GA_NpcFightZZPlayer_" + m_H0406.ObjID);
            if (!string.IsNullOrEmpty(_valueInfo))
            {
                string[] _values = _valueInfo.Split('|');
                int _playerId = int.Parse(_values[0]);
                Debug.LogFormat("-------- _playerId: " + _playerId);
                SyncHelpBattle(_playerId);
            }
        }
    }
    public void SyncHelpBattle(int playerID)
    {
        var _model = ModelCenter.Instance.GetModel<RoleParticularModel>();
        var _playerData = _model.GetViewPlayerData(playerID);
        if (_playerData == null && (playerID > 100))
        {
            Debug.LogFormat("没有: {0} 信息数据, 这里获取", playerID);
            CA212_tagCMViewPlayerInfo pak = new CA212_tagCMViewPlayerInfo();
            pak.PlayerID = (uint)playerID;
            GameNetSystem.Instance.SendInfo(pak);
            DTCA705_tagSCQueryPlayerCacheResult.OnRevPackage += OnRevA705;
        }
        else
        {
            SyncHelpPlayerInfo();
        }
    }
    public void SyncHelpPlayerInfo()
    {
        var _valueInfo = LocalSave.GetString("GA_NpcFightZZPlayer_" + m_H0406.ObjID);
        string[] _values = _valueInfo.Split('|');
        int _playerId = int.Parse(_values[0]);
        int _clothesId = -1;
        int _weaponId = -1;
        int _secondaryId = -1;
        int _wingId = -1;
        // 读取配置表
        if (_playerId >= 1 && _playerId <= 100)
        {
            var _mapDataId = PlayerDatas.Instance.baseData.MapID * 10 + PlayerDatas.Instance.baseData.dungeonLineId;
            var _config = Config.Instance.Get<TableConfig.DungeonHelpBattleConfig>(_mapDataId);
            ActorInfo.LV = (ushort)_config.RobotLV;
            ActorInfo.Job = byte.Parse(_values[1]);
            ActorInfo.PlayerName = "助战NPC";
            ActorInfo.Hp = m_H0406.NPCHP;
            ActorInfo.MaxHp = m_H0406.MaxHP;
            ActorInfo.realm = (uint)_config.RobotRealmLV;
            JobSetup = Config.Instance.Get<TableConfig.JobSetupConfig>(ActorInfo.Job);
            var _jsonData = LitJson.JsonMapper.ToObject(_config.RobotCloth);
            var _jobJson = _jsonData[_values[1]];
            if (_jobJson.Count > 0)
            {
                _clothesId = (int)_jobJson[0];
                _weaponId = (int)_jobJson[1];
                _secondaryId = (int)_jobJson[2];
                _wingId = (int)_jobJson[3];
            }
        }
        else
        {
            if (m_ViewPlayerData == null)
            {
                Debug.LogError("异常!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!: " + _playerId);
            }
            ActorInfo.LV = (ushort)m_ViewPlayerData.rolePropData.LV;
            ActorInfo.Job =(byte) m_ViewPlayerData.rolePropData.Job;
            ActorInfo.PlayerName = m_ViewPlayerData.rolePropData.Name;
            ActorInfo.familyID =(uint) m_ViewPlayerData.rolePropData.FamilyID;
            ActorInfo.familyName = m_ViewPlayerData.rolePropData.FamilyName;
            ActorInfo.Hp = m_H0406.NPCHP;
            ActorInfo.MaxHp = m_H0406.MaxHP;
            ActorInfo.realm = (uint)m_ViewPlayerData.rolePropData.RealmLV;
            JobSetup = Config.Instance.Get<TableConfig.JobSetupConfig>(ActorInfo.Job);
            RoleParticularModel.ItemData _item = null;
            if (m_ViewPlayerData.roleEquipDataDic.TryGetValue(RoleEquipType.retClothes, out _item))
            {
                _clothesId = _item.ItemID;
            }
            if (m_ViewPlayerData.roleEquipDataDic.TryGetValue(RoleEquipType.retWeapon, out _item))
            {
                _weaponId = _item.ItemID;
            }
            if (m_ViewPlayerData.roleEquipDataDic.TryGetValue(RoleEquipType.retWeapon2, out _item))
            {
                _secondaryId = _item.ItemID;
            }
            if (m_ViewPlayerData.roleEquipDataDic.TryGetValue(RoleEquipType.retWing, out _item))
            {
                _wingId = _item.ItemID;
            }
        }
        //Debug.LogFormat("_clothesId: {0}, _weaponId: {1}, _secondaryId: {2}, _wingId: {3}", _clothesId, _weaponId, _secondaryId, _wingId);
        if (_clothesId <= 0)
        {
            SwitchClothes(0);
        }
        else
        {
            SwitchClothes((uint)_clothesId);
        }
        if (_weaponId > 0)
        {
            SwitchWeapon((uint)_weaponId);
        }
        else
        {
            SwitchWeapon(0);
        }
        if (_secondaryId > 0)
        {
            SwitchSecondary((uint)_secondaryId);
        }
        else
        {
            SwitchSecondary(0);
        }
        if (_wingId > 0)
        {
            SwitchWing((uint)_wingId);
        }
        else
        {
            SwitchWing(0);
        }
        RequestName();
        IdleImmediate();
    }
    private RoleParticularModel.ViewPlayerData m_ViewPlayerData;
    private void OnRevA705(HA705_tagSCQueryPlayerCacheResult package)
    {
        Debug.Log("延迟获取了数据: id为 " + package.PlayerID);
        DTCA705_tagSCQueryPlayerCacheResult.OnRevPackage -= OnRevA705;
        if (m_ViewPlayerData == null)
        {
            m_ViewPlayerData = new RoleParticularModel.ViewPlayerData();
        }
        m_ViewPlayerData.roleEquipDataDic.Clear();
        m_ViewPlayerData.itemDatas = LitJson.JsonMapper.ToObject<RoleParticularModel.ItemData[]>(package.ItemData);
        m_ViewPlayerData.rolePropData = LitJson.JsonMapper.ToObject<RoleParticularModel.RolePropData>(package.PropData);
        m_ViewPlayerData.rolePlusData = new RoleParticularModel.RolePlusData();
        m_ViewPlayerData.rolePlusData.AnalysisRolePlusData(package.PlusData);
        if (m_ViewPlayerData.itemDatas != null)
        {
            for (int i = 0; i < m_ViewPlayerData.itemDatas.Length; i++)
            {
                m_ViewPlayerData.itemDatas[i].AnalysisUserData();
                m_ViewPlayerData.roleEquipDataDic[(RoleEquipType)m_ViewPlayerData.itemDatas[i].ItemIndex] = m_ViewPlayerData.itemDatas[i];
            }
        }
        m_ViewPlayerData.AnalysisEquipSuit();
        SyncHelpPlayerInfo();
    }
    protected sealed override void OnUpdate()
    {
        if (m_CmdManager != null)
        {
            m_CmdManager.Update();
        }
    }
    protected sealed override void OnUnit()
    {
        base.OnUnit();
        DTCA705_tagSCQueryPlayerCacheResult.OnRevPackage -= OnRevA705;
        m_H0406 = null;
        m_CmdManager = null;
    }
    public override void Destroy()
    {
    }
    public override void OnHorse(byte upOrDown)
    {
    }
    public override void RefreshLifeBar(ulong value)
    {
        GA_Hero _hero = PlayerDatas.Instance.hero;
        if (_hero != null && _hero.SelectTarget == this)
        {
            if (GA_Player.s_OnRefreshLife != null)
            {
                GA_Player.s_OnRefreshLife(ServerInstID, ActorInfo.RealHp, ActorInfo.RealMaxHp);
            }
        }
    }
    public override void RequestName()
    {
        ReleaseName();
        if (MovingState == E_MovingState.Ride)
        {
            m_HeadUpName = HeadUpName.RequireHeadUpName(HeadUpName.Pattern.Player, MP_Name1, 0, CameraController.Instance.CameraObject);
        }
        else
        {
            m_HeadUpName = HeadUpName.RequireHeadUpName(HeadUpName.Pattern.Player, MP_Name, 0, CameraController.Instance.CameraObject);
        }
        m_HeadUpName.SetPlayerInfo((int)ActorInfo.realm, ActorInfo.titleID, ActorInfo.PlayerName, ActorInfo.familyName, false);
    }
    protected override void OnPutonClothes(uint clothesItemID, GameObject clothed)
    {
        clothed.layer = LayerUtility.Player;
        SkinnedMeshRenderer _renderer = clothed.GetComponentInChildren<SkinnedMeshRenderer>();
        _renderer.gameObject.SetLayer(LayerUtility.Player, false);
        if(m_ViewPlayerData != null)
        {
            SwitchGodWeapon(1,m_ViewPlayerData.rolePlusData.GetGodWeaponLevel(1));
            SwitchGodWeapon(4,m_ViewPlayerData.rolePlusData.GetGodWeaponLevel(4));
        }
    }
    protected override void OnPutonSecondary(uint secondaryItemID, GameObject secondary)
    {
        Renderer _renderer = secondary.GetComponentInChildren<Renderer>();
        _renderer.gameObject.SetLayer(LayerUtility.Player, false);
        if(m_ViewPlayerData != null)
        {
            SwitchGodWeapon(2,m_ViewPlayerData.rolePlusData.GetGodWeaponLevel(2));
        }
    }
    protected override void OnPutonWeapon(uint weaponItemID, GameObject weapon)
    {
        Renderer _renderer = weapon.GetComponentInChildren<Renderer>();
        _renderer.gameObject.SetLayer(LayerUtility.Player, false);
        if(m_ViewPlayerData != null)
        {
            SwitchGodWeapon(3,m_ViewPlayerData.rolePlusData.GetGodWeaponLevel(3));
        }
    }
    protected override void OnPutonWing(uint wingItemID, GameObject wing)
    {
        SkinnedMeshRenderer _renderer = wing.GetComponentInChildren<SkinnedMeshRenderer>();
        _renderer.gameObject.SetLayer(LayerUtility.Player, false);
    }
    protected override void OnSwitchHorse(uint horseID, GameObject horse)
    {
    }
    public void OnSelect()
    {
        if (CanAtked())
        {
            SelectionManager.Request(SelectionManager.E_Type.Red, this);
        }
        else
        {
            SelectionManager.Request(SelectionManager.E_Type.Green, this);
        }
        if (GA_Player.s_OnSelected != null)
        {
            GA_Player.s_OnSelected(ServerInstID, true);
        }
    }
    public void OnClick()
    {
        if (ActorInfo.serverDie)
        {
            return;
        }
        GA_Hero _hero = PlayerDatas.Instance.hero;
        if (_hero == null)
        {
            return;
        }
        _hero.LockTarget = this;
        _hero.SelectTarget = this;
    }
    public void OnUnSelect()
    {
        SelectionManager.Release(SelectionManager.E_Type.Green);
        SelectionManager.Release(SelectionManager.E_Type.Red);
        if (GA_Player.s_OnSelected != null)
        {
            GA_Player.s_OnSelected(ServerInstID, false);
        }
    }
    public bool CanBeSelected()
    {
        if (ActorInfo.serverDie)
        {
            return false;
        }
        return true;
    }
    public void Cmd_0614(H0614_tagUseSkillPos h0614)
    {
        Cmd0614 _cmd = new Cmd0614();
        _cmd.Init(h0614);
        m_CmdManager.Enqueue(_cmd);
    }
    public void ClearAllCMD()
    {
        m_CmdManager.Clear();
    }
}
Fight/GameActor/GA_NpcFightZZPlayer.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 803d525cecd027b4ebd1c091ec871054
timeCreated: 1543218729
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Utility/EnumHelper.cs
@@ -18,6 +18,7 @@
    NpcFightVirtualPlayer,
    PlayerXmzz,
    ClientPlayer,
    PlayerZZ,
}
public enum E_ActorState