| Fight/GameActor/GA_Guard.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Fight/GameActor/GActorNpcNoFight.cs | ●●●●● 补丁 | 查看 | 原始文档 | 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)