/// <summary> /// 停止NPC当前播放的特效 /// </summary> public void StopNPCEffect() { if (ObjEffectController != null) { ObjEffectController.NPCStopEffect(); } }
//开始进行轻功移动 private void StartLightSkillMove(int nAnimID, Vector3 vecTargetPos) { IsLightState = true; m_fTotalLightHightRefix = 0.0f; //首先屏蔽掉NavMesh和胶囊碰撞 if (null != NavAgent && NavAgent.enabled) { NavAgent.enabled = false; } //面向目标点 FaceTo(vecTargetPos); //皆为直线运动,所以直接底层MoveTo即可 MoveTo(vecTargetPos, null, 0.0f); if (null != AnimLogic) { AnimLogic.Stop(); AnimLogic.Play(nAnimID); } if (null != ObjEffectController) { ObjEffectController.PlayEffect(GlobeVar.LIGHT_SKILL_EFFECT); } m_LightSkillTargetPos = vecTargetPos; //开启拖尾特效 //ShowLightShadowEffect(true); //主角的话播放音效 if (ObjType == Games.GlobeDefine.GameDefine_Globe.OBJ_TYPE.OBJ_MAIN_PLAYER) { if (null != GameManager.gameManager.SoundManager) { GameManager.gameManager.SoundManager.PlaySoundEffect(149); } //打开拖尾特效 if (null != ObjEffectController) { ObjEffectController.PlayEffect(GlobeVar.LIGHT_SKILL_TAIL); } } }
//行走状态处理 void ProcessWalkAnimState() { //移动时 还在播受击动作或者击倒动作 则停止播放 if (AnimLogic != null && AnimLogic.CurAnimData != null) { if (AnimLogic.CurAnimData.AnimID == (int)CharacterDefine.CharacterAnimId.Hit || AnimLogic.CurAnimData.AnimID == (int)CharacterDefine.CharacterAnimId.Knockback_01) { m_AnimLogic.Stop(); } if (IsLightState == false && AnimLogic.CurAnimData.AnimID == (int)CharacterDefine.CharacterAnimId.LIGHTSKILLEND) { m_AnimLogic.Stop(); } } if (ObjType == Games.GlobeDefine.GameDefine_Globe.OBJ_TYPE.OBJ_MAIN_PLAYER) { // 玩家装备了坐骑 Obj_MainPlayer MainPlayer = Singleton <ObjManager> .GetInstance().MainPlayer; if (MainPlayer.IsDie() == false && MainPlayer.GetEquipMountID() > 0 && MainPlayer.MountObj) { m_AnimLogic.Play((int)CharacterDefine.CharacterAnimId.Walk); CharacterDefine.MountAction nMountPlayerAniID = CharacterDefine.MountAction.RUN; if (MainPlayer.GetEquipMountID() == GlobeVar.MOUNT_TIANLONG_ID) { nMountPlayerAniID = CharacterDefine.MountAction.STAND; } MainPlayer.MountObj.PlayMountPlayerAnima(nMountPlayerAniID, MainPlayer); } else { m_AnimLogic.Play((int)(CharacterDefine.CharacterAnimId.Walk)); } } else { if (ObjType == Games.GlobeDefine.GameDefine_Globe.OBJ_TYPE.OBJ_OTHER_PLAYER) { Obj_OtherPlayer OtherPlayer = this.GetComponent <Obj_OtherPlayer>(); if (OtherPlayer && OtherPlayer.IsDie() == false && OtherPlayer.MountID > 0 && OtherPlayer.MountObj) { m_AnimLogic.Play((int)CharacterDefine.CharacterAnimId.Walk); CharacterDefine.MountAction nMountPlayerAniID = CharacterDefine.MountAction.RUN; if (OtherPlayer.MountID == GlobeVar.MOUNT_TIANLONG_ID) { nMountPlayerAniID = CharacterDefine.MountAction.STAND; } OtherPlayer.MountObj.PlayMountPlayerAnima(nMountPlayerAniID, OtherPlayer); } else { m_AnimLogic.Play((int)(CharacterDefine.CharacterAnimId.Walk)); } } else { m_AnimLogic.Play((int)(CharacterDefine.CharacterAnimId.Walk)); } } if (ObjEffectController != null) { ObjEffectController.OnMove(); } }
//待机状态处理 void ProcessIdleAnimState(bool playEffectImmediately = true) { if (ObjType == Games.GlobeDefine.GameDefine_Globe.OBJ_TYPE.OBJ_MAIN_PLAYER) { // 玩家装备了坐骑 Obj_MainPlayer MainPlayer = Singleton <ObjManager> .GetInstance().MainPlayer; if (MainPlayer.IsDie() == false && MainPlayer.GetEquipMountID() > 0 && MainPlayer.MountObj) { m_AnimLogic.Play((int)CharacterDefine.CharacterAnimId.Stand); MainPlayer.MountObj.PlayMountPlayerAnima(CharacterDefine.MountAction.STAND, MainPlayer); } else { if (MainPlayer.InDizzy) { m_AnimLogic.Stop(); m_AnimLogic.Play((int)CharacterDefine.CharacterAnimId.DizzyId); return; } if (MainPlayer.InCombat) { m_AnimLogic.Play((int)CharacterDefine.CharacterAnimId.AttackStand); } else { m_AnimLogic.Play((int)CharacterDefine.CharacterAnimId.Stand); } } } else { if (ObjType == Games.GlobeDefine.GameDefine_Globe.OBJ_TYPE.OBJ_OTHER_PLAYER) { Obj_OtherPlayer OtherPlayer = this as Obj_OtherPlayer; if (OtherPlayer && OtherPlayer.IsDie() == false && OtherPlayer.MountID > 0 && OtherPlayer.MountObj) { m_AnimLogic.Play((int)CharacterDefine.CharacterAnimId.Stand); OtherPlayer.MountObj.PlayMountPlayerAnima(CharacterDefine.MountAction.STAND, OtherPlayer); } else { if (OtherPlayer.InDizzy) { m_AnimLogic.Stop(); m_AnimLogic.Play((int)CharacterDefine.CharacterAnimId.DizzyId); return; } m_AnimLogic.Play((int)(CharacterDefine.CharacterAnimId.Stand)); } } else { if (this.InDizzy) { m_AnimLogic.Stop(); m_AnimLogic.Play((int)CharacterDefine.CharacterAnimId.DizzyId); return; } //如果是其他Obj,就需要根据DataID区分是否为战斗型的NPC //非战斗NPC默认播放Stand动作 //战斗NPC播放AttackStand动作 Tab_RoleBaseAttr roleBaseTab = TableManager.GetRoleBaseAttrByID(BaseAttr.RoleBaseID, 0); if (null != roleBaseTab && roleBaseTab.CombatNPC > 0) { //是战斗NPC,播放AttackStand if (playEffectImmediately) { m_AnimLogic.Play((int)(CharacterDefine.CharacterAnimId.AttackStand)); } } else { m_AnimLogic.Play((int)(CharacterDefine.CharacterAnimId.Stand)); } } } if (ObjEffectController != null) { ObjEffectController.OnIdle(); } }
public void EndLightSkillMove() { if (false == m_bIsLightState || m_LightSkillTargetPos == Vector3.zero) { return; // 不能重复进入停止轻功 } //一旦进入End,则没有机会触发二段跳,重置所有标记位 m_bIsLightState = false; m_fMoveSpeed = 5.0f; //m_bIsLightSecondStepState = false; //m_bIsLightSecondStepActived = false; StopMove(); if (AnimLogic != null && AnimLogic.CurAnimData != null && AnimLogic.CurAnimData.AnimID != (int)CharacterDefine.CharacterAnimId.LIGHTSKILLEND) // TT 10240,修复落地动画播放不完全bug [12/16/2014 yuxiaoxi] { AnimLogic.Stop(); } //有可能在空中,所以要恢复一下 if (ObjTransform != null) { if (Mathf.Abs(ObjTransform.position.y - ActiveScene.GetTerrainPosition(ObjTransform.position).y) > 1.0f) { Vector3 pos = new Vector3(ObjTransform.position.x, ActiveScene.GetTerrainPosition(ObjTransform.position).y, ObjTransform.position.z); ObjTransform.position = pos; } try { // 尝试找一下跟目标点是否有路径,如果异常,就是发生了人在非行走区域,这时候,我要把人强制拽到目标点 NavMeshHit hit; bool bhit = NavMesh.SamplePosition(ObjTransform.position, out hit, 1f, 1); if (bhit == false) { // 经检查,玩家落点不在navmesh上,则射线发射出去到目标点找一个点,如果能找到,则使用找到的点,如果找不到,则直接目标点 bhit = NavMesh.SamplePosition(ObjTransform.position, out hit, 5f, 1); if (bhit == false) { // 5m检测没有找到,直接放到最终点,虽然可能闪,但是没问题 ObjTransform.position = new Vector3( m_LightSkillTargetPos.x, ActiveScene.GetTerrainPosition(m_LightSkillTargetPos).y, m_LightSkillTargetPos.z ); } else { // 找到了 ObjTransform.position = hit.position; } } } catch (System.Exception ex) { LogModule.ErrorLog("EndLightSkillMove System.Exception ex " + ex.ToString()); } finally { LogModule.ErrorLog("!!!!!!!EndLightSkillMove finally!!!!!!!!"); } } // begin 注意:m_LightSkillTargetPos是目标点,但是不是轻功的最终结束点,因为如果中途被减速,这个店并没有修正,所以下面一段代码不能执行 [12/27/2014 yuxiaoxi] //if (Vector3.Distance(ObjTransform.position, m_LightSkillTargetPos) >= 3.0f && // m_LightSkillTargetPos != Vector3.zero) //{ // 如果结束后的玩家坐标点和目标点差距太大,则直接拽到目标点 // ObjTransform.position = new Vector3( // m_LightSkillTargetPos.x, // ActiveScene.GetTerrainPosition(m_LightSkillTargetPos).y, // m_LightSkillTargetPos.z // ); // 既然结束了,强制设到目标点会有什么问题? //} // end [12/27/2014 yuxiaoxi] //恢复寻路和胶囊碰撞 if (NavAgent) { NavAgent.enabled = true; } m_LightSkillTargetPos = Vector3.zero; //开启拖尾特效 //ShowLightShadowEffect(false); //主角的话停止播放音效 if (ObjType == Games.GlobeDefine.GameDefine_Globe.OBJ_TYPE.OBJ_MAIN_PLAYER) { if (null != GameManager.gameManager.SoundManager) { GameManager.gameManager.SoundManager.StopSoundEffect(149); } //关闭拖尾特效 if (null != ObjEffectController) { ObjEffectController.StopEffect(GlobeVar.LIGHT_SKILL_TAIL); } } if (null != ObjEffectController) { ObjEffectController.StopEffect(GlobeVar.LIGHT_SKILL_EFFECT); } }