少年修仙传客户端代码仓库
client_Hale
2018-11-14 e5db15905f64ee94337f4ac1e2357ee1072c8716
4129 守护相关异步加载

# Conflicts:
# Fight/GameActor/GA_Guard.cs
# Fight/GameActor/GActorNpcNoFight.cs
2个文件已修改
382 ■■■■■ 已修改文件
Fight/GameActor/GA_Guard.cs 193 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/GameActor/GActorNpcNoFight.cs 189 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/GameActor/GA_Guard.cs
@@ -22,8 +22,10 @@
    public static readonly int GuardAction_Run = 3;
    #endregion
    public bool IsStateActive { get; set; }//是否状态机开启
    public bool IsStateActive { get; set; }//是否状态机开启
    public bool guardPick { get; private set; }
    public float animatorSpeed { get; private set; }
@@ -32,14 +34,21 @@
    public GuardState guardState { get; set; }
    public int targetPlayerId { get; private set; }
    public int itemID { get; set; }
    public int targetPlayerId { get; private set; }
    public int itemID { get; set; }
    public int[] pickEffectIds { get; private set; }
    public bool IsHeroControl { get { return targetPlayerId == PlayerDatas.Instance.PlayerId; } }
    public bool IsHeroControl { get { return targetPlayerId == PlayerDatas.Instance.PlayerId; } }
    public bool IsPlayerDie { get; private set; }
    PlayerDeadModel deadModel { get { return ModelCenter.Instance.GetModel<PlayerDeadModel>(); } }
@@ -66,8 +75,10 @@
        get; private set;
    }
    private DungeonOpenTimeConfig dungeonConfig { get; set; }
    private DungeonOpenTimeConfig dungeonConfig { get; set; }
    private SFXController m_SFXController = null;
    public sealed override void Die() { }
@@ -172,25 +183,44 @@
    IEnumerator Co_StagePrepare()
    {
        yield return null;
        if (Root != null && targetPlayer != null)
        {
            var targetPosition = targetPlayer.Root.position;
            if (MathUtility.CalDistance(Root.position, targetPosition) >
                model.resetDistance * model.resetDistance)
            {
                SetPosition(targetPosition.x, targetPosition.z);
            }
            if (m_SFXController == null || !m_SFXController.gameObject.activeSelf)
            {
                m_SFXController = SFXPlayUtility.Instance.PlayBattleEffect(pickEffectIds[0], this, NpcConfig != null ? NpcConfig.ModeProportion : 1);
                if (m_SFXController != null)
                {
                    var mountPoint = Root.GetChildTransformDeeply(GAStaticDefine.MountPointBoneName);
                    m_SFXController.duration = 0;
                    m_SFXController.transform.SetParent(mountPoint);
                    m_SFXController.transform.localPosition = Vector3.zero;
                }
            }
        if (Root != null && targetPlayer != null)
        {
            var targetPosition = targetPlayer.Root.position;
            if (MathUtility.CalDistance(Root.position, targetPosition) >
                model.resetDistance * model.resetDistance)
            {
                SetPosition(targetPosition.x, targetPosition.z);
            }
            if (m_SFXController == null || !m_SFXController.gameObject.activeSelf)
            {
                m_SFXController = SFXPlayUtility.Instance.PlayBattleEffect(pickEffectIds[0], this, NpcConfig != null ? NpcConfig.ModeProportion : 1);
                if (m_SFXController != null)
                {
                    var mountPoint = Root.GetChildTransformDeeply(GAStaticDefine.MountPointBoneName);
                    m_SFXController.duration = 0;
                    m_SFXController.transform.SetParent(mountPoint);
                    m_SFXController.transform.localPosition = Vector3.zero;
                }
            }
        }
    }
@@ -240,23 +270,70 @@
        }
    }
    private void InitializeModelRes()
    protected override sealed void OnPrefabLoadFinished(bool result, UnityEngine.Object prefab)
    {
        IsStateActive = true;
        if (targetPlayer != null)
        {
            var bornpos = targetPlayer.Root.position + targetPlayer.Root.right * 0.6f - targetPlayer.Forward * 0.3f;
            bornpos.y = targetPlayer.Root.position.y + model.height;
            Pos = bornpos;
        if (!result || prefab == null)
        {
            return;
        }
        
        GAMgr.Instance.RemoveNeedDestroyPrefab(prefab as GameObject);
        m_Model = GameObjectPoolManager.Instance.RequestGameObject(prefab as GameObject);
        var _config = Config.Instance.Get<GuardConfig>(itemID);
        NpcConfig = Config.Instance.Get<NPCConfig>(_config.npcId);
        if (m_Model)
        {
            m_Animator = m_Model.GetComponent<Animator>();
            if (m_Animator)
            {
                RuntimeAnimatorController _controller = null;
                if (m_LoadDefaultRes)
                {
                    _controller = InstanceResourcesLoader.LoadDefaultMobAnimatorController_Func();
                }
                else
                {
                    string _name = NpcConfig.MODE;
                    if (_name.Contains("A_Zs"))
                    {
                        _name = "A_Zs";
                        GameObjectPoolManager.Instance.AddDontDestroyGoInstID(m_Model.GetInstanceID());
                    }
                    else if (_name.Contains("A_Fs"))
                    {
                        _name = "A_Fs";
                        GameObjectPoolManager.Instance.AddDontDestroyGoInstID(m_Model.GetInstanceID());
                    }
                    _controller = AnimatorControllerLoader.LoadMobController(AnimatorControllerLoader.controllerSuffix, _name);
                }
                if (_controller)
                {
                    m_Animator.runtimeAnimatorController = _controller;
                }
                m_Animator.enabled = true;
                m_Animator.SetInteger(GAStaticDefine.Param_ActorInstID, (int)ClientInstID);
            }
            SetupBindNode(m_Model.transform);
            m_Model.transform.SetParent(m_Root);
            m_Model.transform.localPosition = Vector3.zero;
            m_Model.transform.localRotation = Quaternion.identity;
            RequestName();
            OnMainModelLoaded();
        }
    }
    protected override void OnMainModelLoaded()
    {
        m_Model.SetLayer(LayerUtility.Monster, true);
        var mountPoint = Root.GetChildTransformDeeply(GAStaticDefine.MountPointBoneName);
        m_SFXController = SFXPlayUtility.Instance.PlayBattleEffect(pickEffectIds[0], this, NpcConfig != null ? NpcConfig.ModeProportion : 1);
        if (m_SFXController != null)
        {
@@ -274,6 +351,23 @@
        {
            GameObjectPoolManager.Instance.AddDontDestroyGoInstID(m_Model.GetInstanceID());
        }
    }
    private void InitializeModelRes()
    {
        IsStateActive = true;
        if (targetPlayer != null)
        {
            var bornpos = targetPlayer.Root.position + targetPlayer.Root.right * 0.6f - targetPlayer.Forward * 0.3f;
            bornpos.y = targetPlayer.Root.position.y + model.height;
            Pos = bornpos;
        }
        var _config = Config.Instance.Get<GuardConfig>(itemID);
        InstanceResourcesLoader.AsyncLoadNpc(_config.npcId, OnPrefabLoadFinished);
    }
    private void SetPosition(float x, float z)
@@ -324,7 +418,8 @@
    {
        var _height = targetPlayer.Root.position.y + model.height;
        var targetPosition = targetPlayer.Root.position;
        if (MathUtility.CalDistance(Root.position, targetPosition) >
        if (MathUtility.CalDistance(Root.position, targetPosition) >
            model.resetDistance * model.resetDistance)
        {
            SetPosition(targetPosition.x, targetPosition.z);
@@ -360,7 +455,8 @@
    private bool CheckTrack()
    {
        if (MathUtility.CalDistance(Root.position, targetPlayer.Root.position) > model.traceRange * model.traceRange
        if (MathUtility.CalDistance(Root.position, targetPlayer.Root.position) > model.traceRange * model.traceRange
            && guardState != GuardState.Track)
        {
            stopDanceState = true;
@@ -390,15 +486,20 @@
    {
        if (dungeonConfig != null)
        {
            if (dungeonConfig.GuardPick == 0)
            {
            if (dungeonConfig.GuardPick == 0)
            {
                return false;
            }
        }
        if (Root == null)
        {
            return false;
        if (Root == null)
        {
            return false;
        }
        if (DropItemManager.CheckCanGuardPickUp(Root.position))
Fight/GameActor/GActorNpcNoFight.cs
@@ -7,7 +7,7 @@
    protected Animator m_Animator;
    private UnityEngine.AI.NavMeshObstacle m_Dig;
    private SFXController m_Shadow;
    //protected AudioSource m_AudioSource = null;
    public NPCConfig NpcConfig { get; protected set; }
    public SFXController m_AppearEffect;
    protected bool m_LoadDefaultRes = false;
@@ -18,18 +18,24 @@
        {
            return m_Animator.GetInteger(GAStaticDefine.Param_Action);
        }
        set
        {
            m_Animator.SetInteger(GAStaticDefine.Param_Action, value);
        }
    }
    public void Init(uint serverInstID, uint clientInstID, uint npcID, E_ActorGroup group, GameNetPackBasic package)
    protected override void OnInit(GameNetPackBasic package)
    {
        m_LoadDefaultRes = false;
        NpcConfig = Config.Instance.Get<NPCConfig>((int)npcID);
        var _package = package as H0406_tagNPCAppear;
        if (_package == null)
        {
            Debug.LogError("非战斗单位封包传入错误: " + package.GetType());
            return;
        }
        NpcConfig = Config.Instance.Get<NPCConfig>((int)_package.NPCID);
        if (NpcConfig == null)
        {
@@ -37,27 +43,7 @@
            return;
        }
        //        if (!m_AudioSource)
        //        {
        //            // 创建音源
        //            GameObject _audioSourceNode = Object.Instantiate(Resources.Load<GameObject>("Prefabs/AudioSource3D")) as GameObject;
        //#if UNITY_EDITOR
        //            _audioSourceNode.name = "AudioSource";
        //#endif
        //            _audioSourceNode.transform.SetParent(m_Root);
        //            _audioSourceNode.transform.localPosition = new Vector3(0, 0.5f, 0);
        //            m_AudioSource = _audioSourceNode.GetComponent<AudioSource>();
        //        }
        ActorType = GameObjType.gotNPC;
        // 初始化表现层
        InitPerformance(clientInstID, (int)npcID);
        // 执行父类的初始化
        Init(serverInstID, clientInstID, group, package);
        Root.gameObject.layer = LayerUtility.Monster;
        if (NpcConfig.ModeProportion != 1)
@@ -74,7 +60,6 @@
        }
        RequestShadow();
        RequestName();
        // 这里针对指定的NPC特殊矫正位置
        if (GeneralDefine.NpcPosOffset.ContainsKey(NpcConfig.NPCID))
@@ -91,12 +76,10 @@
        if (NpcConfig.NPCEffect != 0)
        {
            m_AppearEffect = SFXPlayUtility.Instance.PlayBattleEffect(NpcConfig.NPCEffect, this);
            //EffectConfig _effectConfig = Config.Instance.Get<EffectConfig>(NpcConfig.NPCEffect);
            //if (_effectConfig != null)
            //{
            //    SoundPlayer.Instance.PlayAudio(m_AudioSource, _effectConfig.audio);
            //}
        }
        // 开始异步加载表现层
        InstanceResourcesLoader.AsyncLoadNpc(NpcConfig.NPCID, OnPrefabLoadFinished);
    }
    protected override void OnUnit()
@@ -107,8 +90,11 @@
        }
        else
        {
            GameObject _prefab = InstanceResourcesLoader.LoadNpc(NpcConfig.NPCID);
            GameObjectPoolManager.Instance.ReleaseGameObject(_prefab, m_Model);
            if (NpcConfig != null)
            {
                GameObject _prefab = InstanceResourcesLoader.LoadNpc(NpcConfig.NPCID);
                GameObjectPoolManager.Instance.ReleaseGameObject(_prefab, m_Model);
            }
        }
        if (m_AppearEffect)
@@ -145,76 +131,95 @@
    {
    }
    public virtual void InitPerformance(uint clientInstID, int npcID)
    protected virtual void OnPrefabLoadFinished(bool result, UnityEngine.Object prefab)
    {
        GameObject _prefab = InstanceResourcesLoader.LoadNpcPrefab(npcID);
        if (_prefab == null)
        if (!result || prefab == null)
        {
            _prefab = InstanceResourcesLoader.LoadDefaultFuncNPC();
            if (_prefab)
            if (!m_LoadDefaultRes)
            {
                InstanceResourcesLoader.AsyncLoadDefaultFuncNpc(OnPrefabLoadFinished);
                m_LoadDefaultRes = true;
            }
        }
        if (_prefab != null)
        {
            if (PreFightMission.Instance.IsFinished())
            {
                GAMgr.Instance.AddNeedDestroyPrefab(_prefab);
            }
            if (this is GA_Guard || NpcConfig.MODE.Contains("A_Zs") || NpcConfig.MODE.Contains("A_Fs"))
            {
                GAMgr.Instance.RemoveNeedDestroyPrefab(_prefab);
            }
            if (m_LoadDefaultRes)
            {
                m_Model = GameObjectPoolManager.Instance.RequestDefaultFuncNpc();
            }
            else
            {
                m_Model = GameObjectPoolManager.Instance.RequestNpcGameObject(npcID);
                m_LoadDefaultRes = false;
                Debug.LogErrorFormat("加载Npc模型资源出错: {0}", NpcConfig.NPCID);
            }
            if (m_Model)
            {
                m_Animator = m_Model.GetComponent<Animator>();
                if (m_Animator)
                {
                    RuntimeAnimatorController _controller = null;
                    if (m_LoadDefaultRes)
                    {
                        _controller = InstanceResourcesLoader.LoadDefaultMobAnimatorController_Func();
                    }
                    else
                    {
                        string _name = NpcConfig.MODE;
                        if (_name.Contains("A_Zs"))
                        {
                            _name = "A_Zs";
                            GameObjectPoolManager.Instance.AddDontDestroyGoInstID(m_Model.GetInstanceID());
                        }
                        else if (_name.Contains("A_Fs"))
                        {
                            _name = "A_Fs";
                            GameObjectPoolManager.Instance.AddDontDestroyGoInstID(m_Model.GetInstanceID());
                        }
                        _controller = AnimatorControllerLoader.LoadMobController(AnimatorControllerLoader.controllerSuffix, _name);
                    }
                    if (_controller)
                    {
                        m_Animator.runtimeAnimatorController = _controller;
                    }
                    m_Animator.enabled = true;
                    m_Animator.SetInteger(GAStaticDefine.Param_ActorInstID, (int)clientInstID);
                }
                SetupBindNode(m_Model.transform);
            }
            return;
        }
        if (PreFightMission.Instance.IsFinished())
        {
            GAMgr.Instance.AddNeedDestroyPrefab(prefab as GameObject);
        }
        if (this is GA_Guard || NpcConfig.MODE.Contains("A_Zs") || NpcConfig.MODE.Contains("A_Fs"))
        {
            GAMgr.Instance.RemoveNeedDestroyPrefab(prefab as GameObject);
        }
        if (m_LoadDefaultRes)
        {
            m_Model = GameObjectPoolManager.Instance.RequestDefaultFuncNpc();
        }
        else
        {
            m_Model = GameObjectPoolManager.Instance.RequestGameObject(prefab as GameObject);
        }
        if (m_Model)
        {
            m_Animator = m_Model.GetComponent<Animator>();
            if (m_Animator)
            {
                RuntimeAnimatorController _controller = null;
                if (m_LoadDefaultRes)
                {
                    _controller = InstanceResourcesLoader.LoadDefaultMobAnimatorController_Func();
                }
                else
                {
                    string _name = NpcConfig.MODE;
                    if (_name.Contains("A_Zs"))
                    {
                        _name = "A_Zs";
                        GameObjectPoolManager.Instance.AddDontDestroyGoInstID(m_Model.GetInstanceID());
                    }
                    else if (_name.Contains("A_Fs"))
                    {
                        _name = "A_Fs";
                        GameObjectPoolManager.Instance.AddDontDestroyGoInstID(m_Model.GetInstanceID());
                    }
                    _controller = AnimatorControllerLoader.LoadMobController(AnimatorControllerLoader.controllerSuffix, _name);
                }
                if (_controller)
                {
                    m_Animator.runtimeAnimatorController = _controller;
                }
                m_Animator.enabled = true;
                m_Animator.SetInteger(GAStaticDefine.Param_ActorInstID, (int)ClientInstID);
            }
            SetupBindNode(m_Model.transform);
            m_Model.transform.SetParent(m_Root);
            m_Model.transform.localPosition = Vector3.zero;
            m_Model.transform.localRotation = Quaternion.identity;
            RequestName();
            OnMainModelLoaded();
        }
    }
    protected virtual void OnMainModelLoaded() { }
    public virtual void InitPerformance(uint clientInstID, int npcID)
    {
        GameObject _prefab = InstanceResourcesLoader.LoadNpcPrefab(npcID);
        InstanceResourcesLoader.AsyncLoadNpc(npcID, OnPrefabLoadFinished);
    }
    public sealed override void SetAnimatorSpeed(float speed)