public uint Execute(PacketDistributed ipacket) { GC_PLAY_MODELSOTRY packet = (GC_PLAY_MODELSOTRY)ipacket; if (null == packet) { return((uint)PACKET_EXE.PACKET_EXE_ERROR); } //enter your logic if (packet.ModelStoryID == GlobeVar.YanMenGuan_ModelStoryID) { Obj_MainPlayer mainplayer = Singleton <ObjManager> .Instance.MainPlayer; if (mainplayer == null) { return((uint)PACKET_EXE.PACKET_EXE_ERROR); } //mainplayer.CameraController.InitCameraTrack(mainplayer.Position, curBoss.Position); mainplayer.ModelStoryID = packet.ModelStoryID; mainplayer.StopMove(); Vector3 posTarget = new Vector3(13.9f, 0, 27.4f); Vector3 posTargetTerrain = ActiveScene.GetTerrainPosition(posTarget); mainplayer.MoveTo(posTargetTerrain); } return((uint)PACKET_EXE.PACKET_EXE_CONTINUE); }
void OnSceneMapClick() { Vector3 worldPos = UICamera.currentCamera.ScreenToWorldPoint(UICamera.lastTouchPosition); Vector3 localPos = m_TextureMap.transform.InverseTransformPoint(worldPos); Vector3 mapPos = MapPosToScenePos(localPos, m_curTabScene); AutoSearchPoint point = new AutoSearchPoint(m_curSceneID, mapPos.x, mapPos.z); if (GameManager.gameManager && GameManager.gameManager.AutoSearch) { if (Singleton <ObjManager> .GetInstance().MainPlayer) { //验证导航是否可达,如果不可达,不进行移动 Vector3 testVec = new Vector3(point.PosX, 0, point.PosZ); testVec = ActiveScene.GetTerrainPosition(testVec); if (!Singleton <ObjManager> .GetInstance().MainPlayer.IsMoveNavAgent(testVec)) { return; } } GameManager.gameManager.AutoSearch.ProcessAutoSearch(point); } if (m_ClickEffectSprite != null && m_ClickEffectTran != null) { m_ClickEffectTran.localPosition = localPos; m_ClickEffectSprite.gameObject.SetActive(true); } else { LogModule.ErrorLog("OnSceneMapClick::m_ClickEffectSprite = null || m_ClickEffectTran = null"); } }
private void UpdateFellowMove() { SetMoveSpeedAsMainPlayer(); Obj_MainPlayer mainPlayer = Singleton <ObjManager> .GetInstance().MainPlayer; //TODO 判读是否在战斗 Vector3 targetPos = GetFellowPos(mainPlayer); if (Vector3.Distance(Position, targetPos) >= 6) { //距离太远 直接拉过去 if (NavAgent != null) { UnityEngine.GameObject.DestroyImmediate(NavAgent); } m_ObjTransform.position = ActiveScene.GetTerrainPosition(new Vector3(targetPos.x, 0f, targetPos.z)); if (NavAgent == null) { InitNavAgent(); } } else if (Vector3.Distance(Position, targetPos) >= 2 || (IsMoving && Vector3.Distance(Position, targetPos) >= 1)) { MoveTo(targetPos, null, 0f); } }
/// <summary> /// 重计算路径 /// </summary> /// <returns><c>true</c>, if path was calculated, <c>false</c> otherwise.</returns> private bool CalculatePath() { if (null == m_mainPlayer) { return(false); } m_fReCalcPathtimer = m_fReCalcPathInterval; if (m_mainPlayer.NavAgent == null || m_mainPlayer.NavAgent.enabled == false) { return(false); } // navMeshAgent寻路的当前场景目标点 Vector3 currentSceneDestination = Vector3.zero; // 如果目标点在当前场景 if (m_Destination.SceneID == GameManager.gameManager.RunningScene) { currentSceneDestination = new Vector3(m_Destination.PosX, 0, m_Destination.PosZ); currentSceneDestination = ActiveScene.GetTerrainPosition(currentSceneDestination); // 判断是否已经到了目标点 Vector3 playerPos = m_mainPlayer.Position; float distanceSqr = (playerPos.x - currentSceneDestination.x) * (playerPos.x - currentSceneDestination.x) + (playerPos.y - currentSceneDestination.y) * (playerPos.y - currentSceneDestination.y) + (playerPos.z - currentSceneDestination.z) * (playerPos.z - currentSceneDestination.z); if (distanceSqr < m_fCornerReachCheckDistanceSqr) { return(false); } } else { // todo AutoSearchPoint startPoint = AutoSearchPoint.MakePoint(m_mainPlayer.gameObject); m_Path.ResetPath(); if (GameManager.gameManager.AutoSearch.FindPath(startPoint, m_Destination, ref m_Path)) { } return(false); } // 利用NavMeshAgent寻得路径 if (m_mainPlayer.NavAgent.CalculatePath(currentSceneDestination, m_NavPath)) { m_NavPathCorners = m_NavPath.corners; // 第0个点是当前位置 m_nNextCornerIdx = 1; return(true); } else { CancelGuide(); return(false); } }
public bool Init(ObjSnare_Init_Data initData) { if (null == m_ObjTransform) { m_ObjTransform = transform; } //服务器发过来的信息 ServerID = initData.m_ServerID; SnareId = initData.m_SnareID; OwerobjID = initData.m_OwnerObjId; OwnerGuid = initData.m_OwerGuid; m_ObjTransform.position = ActiveScene.GetTerrainPosition(new Vector3(initData.m_fX, 0, initData.m_fZ)); Obj_Character ownerCharacter = Singleton <ObjManager> .GetInstance().FindObjCharacterInScene(OwerobjID); //修正陷阱的高度和陷阱释放者一样 if (ownerCharacter != null) { Vector3 newPosVector3 = m_ObjTransform.position; newPosVector3.y = ownerCharacter.ObjTransform.position.y; m_ObjTransform.position = newPosVector3; } //初始化特效 if (ObjEffectController == null) { ObjEffectController = gameObject.AddComponent <ObjEffectBehaviourController>(); } Tab_SnareObjInfo SnareInfo = TableManager.GetSnareObjInfoByID(SnareId, 0); if (SnareInfo != null) { //播放生存期特效 for (int i = 0; i < SnareInfo.getAliveEffectIdCount(); i++) { int AliveEffectId = SnareInfo.GetAliveEffectIdbyIndex(i); if (AliveEffectId != -1 && ObjEffectController != null) { PlayEffect(AliveEffectId); } } //播放生存期音效 for (int i = 0; i < SnareInfo.getAliveSoundIdCount(); i++) { int AliveSoundId = SnareInfo.GetAliveSoundIdbyIndex(i); if (AliveSoundId != -1) { GameManager.gameManager.SoundManager.PlaySoundEffect(AliveSoundId); } } } return(true); }
public uint Execute(PacketDistributed ipacket) { GC_TELEMOVE packet = (GC_TELEMOVE )ipacket; if (null == packet) { return((uint)PACKET_EXE.PACKET_EXE_ERROR); } //enter your logic Obj_Character _objChar = Singleton <ObjManager> .GetInstance().FindObjCharacterInScene(packet.ObjId); if (_objChar == null) { return((uint)PACKET_EXE.PACKET_EXE_CONTINUE); } Vector3 targetPos = new Vector3(packet.TargetPosX / 100.0f, 0, packet.TargetPosZ / 100.0f); targetPos = ActiveScene.GetTerrainPosition(targetPos); //如果_objChar为轻功状态,则打断轻功 if (_objChar.IsLightState) { //_objChar.EndLightSkillMove(); _objChar.BeginTeleMoveInLight(targetPos); } //是否需要改变朝向 if (packet.NeedChangeFaceto == 1) { _objChar.FaceTo(targetPos); } else { _objChar.IsMoveToNoFaceTo = true; } AutoMove autoMove = _objChar.AutoMoveComponent; if (autoMove != null) { autoMove.ResetAutoMove(); } //向目标点移动 _objChar.MoveTo(targetPos, null, 0); //是否需要播放附加动作 if (packet.HasAnimaId && _objChar.AnimLogic != null) { _objChar.AnimLogic.Stop(); _objChar.AnimLogic.Play(packet.AnimaId); //现在这里播放击退效果 todo临时的 _objChar.PlayEffect(121); } return((uint)PACKET_EXE.PACKET_EXE_CONTINUE); }
/// <summary> /// 设置引导目的地,外部调用接口 /// </summary> /// <param name="sceneId">Scene identifier.</param> /// <param name="posX">Position x.</param> /// <param name="posZ">Position z.</param> public void SetDest(int sceneId, float posX, float posZ, int showDestEffect) { if (null == m_mainPlayer) { m_mainPlayer = Singleton <ObjManager> .GetInstance().MainPlayer; } if (sceneId == -1) { CancelGuide(); return; } m_bHasDestination = true; m_Destination.SceneID = sceneId; m_Destination.PosX = posX; m_Destination.PosZ = posZ; m_bShowDestEffect = (showDestEffect != 0); if (CalculatePath() == false) { Invoke("ReTrySetDest", 2); // CancelGuide(); return; } ShowGuideArrow(); // 设定指针初始位置 Vector3 rotateTo = new Vector3(m_NavPathCorners[m_nNextCornerIdx].x, m_arrowTrans.position.y, m_NavPathCorners[m_nNextCornerIdx].z); m_arrowTrans.LookAt(rotateTo); if (sceneId == GameManager.gameManager.RunningScene && m_bShowDestEffect) { if (m_destEffectTrans == null) { if (LoadDestEffect() == false) { return; } } Vector3 currentSceneDestination = new Vector3(m_Destination.PosX, 0, m_Destination.PosZ); currentSceneDestination = ActiveScene.GetTerrainPosition(currentSceneDestination); m_destEffectTrans.position = currentSceneDestination + new Vector3(0, -0.14f, 0); ShowDestEffect(); ShowArrawEffect(); } else { HideDestEffect(); } }
public void GotoNextScene() { if (CurrentSceneTag == 1) { ShowSceneObject("SceneModel/Scene"); //关闭导航 if (Singleton <ObjManager> .GetInstance().MainPlayer != null) { if (Singleton <ObjManager> .GetInstance().MainPlayer.NavAgent != null) { Singleton <ObjManager> .GetInstance().MainPlayer.NavAgent.gameObject.SetActive(false); } } CurrentSceneTag = 2; if (Singleton <ObjManager> .GetInstance().MainPlayer != null) { Vector3 curPosition = Singleton <ObjManager> .GetInstance().MainPlayer.Position; Singleton <ObjManager> .GetInstance().MainPlayer.Position = ActiveScene.GetTerrainPosition(curPosition); if (Singleton <ObjManager> .GetInstance().MainPlayer.NavAgent != null) { Singleton <ObjManager> .GetInstance().MainPlayer.NavAgent.gameObject.SetActive(true); Singleton <ObjManager> .GetInstance().MainPlayer.InitNavAgent(); Singleton <ObjManager> .GetInstance().MainPlayer.Rotation = Quaternion.Euler(0, 30, 0); } } if (ShaChenGameObject != null) { ShaChenGameObject.SetActive(true); } GCGame.Utils.PlaySceneMusic(207); //second scene if (m_OldSceneObject != null) { DestroyObject(m_OldSceneObject); Resources.UnloadUnusedAssets(); GC.Collect(); } } }
//private bool IsReachPoint(AutoMovePos pos) //{ // //先判断序列号 // if (pos.m_nPosSerial != m_nCurPosSerial) // { // return false; // } // Vector2 dstPos = new Vector2(pos.m_fDstPosX, pos.m_fDstPosZ); // Vector2 curPos = new Vector2(gameObject.transform.position.x, gameObject.transform.position.z); // if (Vector2.Distance(curPos, dstPos) < 0.5f) // { // return true; // } // return false; //} //到达当前点,删除当前点,向下一个点移动 // private void ReachPoint() // { // if (null == m_posList || m_posList.Count <= 0) // { // return; // } //#if UNITY_ANDROID // BeginMove(m_posList[0]); // 移除当前点 // m_posList.RemoveAt(0); //#else // 移除当前点 // m_posList.RemoveAt(0); // 判断剩余点 // if (m_posList.Count <= 0) // { // 已经无点,停止移动 // StopMove(); // } // else // { // BeginMove(m_posList[0]); // } //#endif // } //移动开始 private void BeginMove(AutoMovePos dstPos) { if (null == m_BindObj) { return; } //记录当前点序列号 m_nCurPosSerial = dstPos.m_nPosSerial; //开始移动 Vector3 dest = new Vector3(dstPos.m_fDstPosX, 0.0f, dstPos.m_fDstPosZ); dest = ActiveScene.GetTerrainPosition(dest); // m_bIsMove = true; m_BindObj.MoveTo(dest, null, 0.0f); }
public uint Execute(PacketDistributed ipacket) { GC_FORCE_SETPOS packet = (GC_FORCE_SETPOS )ipacket; if (null == packet) { return((uint)PACKET_EXE.PACKET_EXE_ERROR); } //enter your logic Obj obj = Singleton <ObjManager> .Instance.FindObjInScene(packet.ServerID); if (obj != null) { if (obj.ObjType == Games.GlobeDefine.GameDefine_Globe.OBJ_TYPE.OBJ_MAIN_PLAYER || obj.ObjType == Games.GlobeDefine.GameDefine_Globe.OBJ_TYPE.OBJ_OTHER_PLAYER || obj.ObjType == Games.GlobeDefine.GameDefine_Globe.OBJ_TYPE.OBJ_ZOMBIE_PLAYER || obj.ObjType == Games.GlobeDefine.GameDefine_Globe.OBJ_TYPE.OBJ_FELLOW || obj.ObjType == Games.GlobeDefine.GameDefine_Globe.OBJ_TYPE.OBJ_NPC) { Obj_Character objChar = obj as Obj_Character; Vector3 vec = new Vector3((float)packet.PosX / 100, 0, (float)packet.PosZ / 100); if (objChar.NavAgent != null) { UnityEngine.GameObject.DestroyImmediate(objChar.NavAgent); } objChar.Position = ActiveScene.GetTerrainPosition(vec); if (objChar.NavAgent == null) { objChar.InitNavAgent(); } if (obj.ObjType == Games.GlobeDefine.GameDefine_Globe.OBJ_TYPE.OBJ_MAIN_PLAYER && JtddSceneControl.Instance() != null && GameManager.gameManager.RunningScene == (int)Games.GlobeDefine.GameDefine_Globe.SCENE_DEFINE.SCENE_FB_CABALINTRO) { JtddSceneControl.Instance().GotoNextScene(); GameManager.gameManager.SoundManager.PlayBGMusic(180, 0.5f, 0.5f); Cutscene.CutsceneManager.Instance.CloseSyncPos = false; } } } return((uint)PACKET_EXE.PACKET_EXE_CONTINUE); }
//向最新点移动 void BeginMove() { if (m_Path.AutoSearchPosCache.Count > 0) { //首先检测场景是否对应,如果不对则直接返回 if (GameManager.gameManager.RunningScene != m_Path.AutoSearchPosCache[0].SceneID) { return; } Vector3 pos = new Vector3(m_Path.AutoSearchPosCache[0].PosX, 0, m_Path.AutoSearchPosCache[0].PosZ); pos = ActiveScene.GetTerrainPosition(pos); if (Singleton <ObjManager> .GetInstance().MainPlayer.IsCanOperate_Move()) { Singleton <ObjManager> .GetInstance().MainPlayer.MoveTo(pos, null, 1.0f, true); } } }
public bool Init(ObjYanHua_Init_Data initData) { if (null == m_ObjTransform) { m_ObjTransform = transform; } //服务器发过来的信息 ServerID = initData.m_ServerID; YanHuaId = initData.m_nYanHuaID; OwerobjID = initData.m_OwnerObjId; OwnerGuid = initData.m_OwerGuid; m_ObjTransform.position = ActiveScene.GetTerrainPosition(new Vector3(initData.m_fX, 0, initData.m_fZ)); Obj_Character ownerCharacter = Singleton <ObjManager> .GetInstance().FindObjCharacterInScene(OwerobjID); if (ownerCharacter != null) { Vector3 newPosVector3 = m_ObjTransform.position; newPosVector3.y = ownerCharacter.ObjTransform.position.y; m_ObjTransform.position = newPosVector3; } //初始化特效 if (ObjEffectController == null) { ObjEffectController = gameObject.AddComponent <ObjEffectBehaviourController>(); } //播放特效 Tab_YanHua TabYanHua = TableManager.GetYanHuaByID(YanHuaId, 0); if (TabYanHua != null) { int AliveEffectId = TabYanHua.AliveEffectId; if (AliveEffectId != -1 && ObjEffectController != null) { PlayEffect(AliveEffectId); } } return(true); }
void ObjMovePlay() { if (null == m_transform) { return; } Obj_Character _objChar = this.gameObject.GetComponent <Obj_Character>(); if (_objChar) { Vector3 _selfVector3 = new Vector3(m_transform.localPosition.x, 0, m_transform.localPosition.z); Vector3 _newVector3 = ActiveScene.GetTerrainPosition(_selfVector3); if (Time.fixedTime - m_StartTime <= m_MotionTime) { m_transform.localPosition += (m_Velocity * Time.deltaTime); _selfVector3 = new Vector3(m_transform.localPosition.x, 0, m_transform.localPosition.z); _newVector3 = ActiveScene.GetTerrainPosition(_selfVector3); if (Time.fixedTime - m_StartTime >= m_MotionTime / 2 && m_transform.localPosition.y <= _newVector3.y) { m_transform.localPosition = _newVector3; m_bGoing = false; m_StartTime = 0; m_Velocity = m_OriginVelocity; } m_Velocity += (m_Acceleration * Time.deltaTime); } else { m_bGoing = false; m_transform.localPosition = _newVector3; m_StartTime = 0; m_Velocity = m_OriginVelocity; } } }
public override bool Init(Obj_Init_Data initData) { if (null == m_ObjTransform) { m_ObjTransform = transform; } m_ObjTransform.position = ActiveScene.GetTerrainPosition(new Vector3(initData.m_fX, 0, initData.m_fZ)); BaseAttr.RoleBaseID = initData.m_RoleBaseID; BaseAttr.MoveSpeed = initData.m_MoveSpeed; Tab_RoleBaseAttr roleBaseTab = TableManager.GetRoleBaseAttrByID(BaseAttr.RoleBaseID, 0); if (roleBaseTab != null) { m_NpcType = (Games.GlobeDefine.GameDefine_Globe.NPC_TYPE)roleBaseTab.NpcType; //初始化CharModelID,并读取部分客户端信息 ModelID = roleBaseTab.CharModelID; Tab_CharModel charModel = TableManager.GetCharModelByID(ModelID, 0); if (null != charModel) { BaseAttr.HeadPic = charModel.HeadPic; //设置动作路径 AnimationFilePath = charModel.AnimPath; //设置名字版高度 DeltaHeight = charModel.HeadInfoHeight; transform.localScale = Vector3.one; } } //服务器发过来的信息 this.ServerID = initData.m_ServerID; this.BornPosX = initData.m_fX; this.BornPosY = gameObject.transform.position.y; this.BornPosZ = initData.m_fZ; BaseAttr.RoleName = initData.m_StrName; BaseAttr.Force = initData.m_Force; BaseAttr.Die = initData.m_IsDie; m_ObjTransform.rotation = Utils.DirServerToClient(initData.m_fDir); StealthLev = initData.m_StealthLev; m_bIsBornCreate = initData.m_bNpcBornCreate; OptStealthLevChange(); // NPC挂任务 AddDialogMission(); //组件在初始化数据后进行 //初始化寻路代理 InitNavAgent(); //初始化动画,需要在AnimationFilePath被赋值后进行 AnimLogic = gameObject.GetComponent <AnimationLogic>(); if (AnimLogic == null) { AnimLogic = gameObject.AddComponent <AnimationLogic>(); } //初始化特效 ObjEffectController = gameObject.GetComponent <CharacterEffectBehaviourController>(); if (ObjEffectController == null) { ObjEffectController = gameObject.AddComponent <CharacterEffectBehaviourController>(); } //初始化AutoMove功能模块 if (gameObject.GetComponent <AutoMove>() == null) { gameObject.AddComponent <AutoMove>(); } if (IsDie()) { OnCorpse(); } else { if (Objanimation != null) { Objanimation.Stop(); } CurObjAnimState = Games.GlobeDefine.GameDefine_Globe.OBJ_ANIMSTATE.STATE_NORMOR; } //创新跟玩家一样的模型 m_ModelVisualID = initData.m_ModelVisualID; m_nProfession = initData.m_nProfession; m_WeaponDataID = initData.m_WeaponDataID; m_WeaponEffectGem = initData.m_WeaponDataID; if (initData.m_ModelVisualID != GlobeVar.INVALID_ID && initData.m_nProfession != -1) { ReloadPlayerModelVisual(initData.m_ModelVisualID, initData.m_nProfession); } //初始化名字版 //InitNameBoard(); if (!m_IsNameBoard) { InitNameBoard(); } else { if (m_MissionBoard != null) { //m_MissionBoard.SetActive(true); ShowNameBoard(); } } m_mainPlayer = Singleton <ObjManager> .GetInstance().MainPlayer; // 帮会活动NPC判断 m_bIsGuildActivityBoss = IsGuildBoss(); m_SceneNpcId = initData.m_SceneNpcId; return(base.Init(initData)); }
public virtual bool Init(Obj_DroopItemData initData) { if (null == m_ObjTransform) { m_ObjTransform = transform; } if (null != GameManager.gameManager.ActiveScene && null != GameManager.gameManager.ActiveScene.DropItemBoardRoot) { m_ObjTransform.parent = GameManager.gameManager.ActiveScene.DropItemBoardRoot.transform; } else { LogModule.ErrorLog("GameManager.gameManager.ActiveScene.DropItemBoardRoot is null"); } DropType = initData.m_nType; ItemId = initData.m_nItemId; ItemCount = initData.m_nItemCount; ServerID = initData.m_nServerID; OwnerGuid = initData.m_OwnerGuid; float fScaling = 0.005f; Vector3 pos = new Vector3(initData.m_fX, 0, initData.m_fZ); if (null != Singleton <ObjManager> .Instance.MainPlayer) { pos.y = Singleton <ObjManager> .Instance.MainPlayer.Position.y; } else { pos = ActiveScene.GetTerrainPosition(pos); } pos.y += 0.2f; if (GameManager.gameManager.RunningScene == (int)Games.GlobeDefine.GameDefine_Globe.SCENE_DEFINE.SCENE_FB_HUNDUNZHIDI) { pos.y = 15.1f; } m_ObjTransform.position = pos; //暂时 写死了 后面再用服务器 m_ObjTransform.Rotate(Vector3.up * 135); //初始化特效 if (ObjEffectController == null) { ObjEffectController = gameObject.AddComponent <ObjEffectBehaviourController>(); } InitEffect(); if (DropType == (int)Games.GlobeDefine.GameDefine_Globe.DROP_TYPE.DROP_ITEM) { Tab_CommonItem line = TableManager.GetCommonItemByID(m_nItemId, 0); if (line != null) { fScaling = line.DropScaling; int nEffectId = line.DropEffectId; if (nEffectId != -1) { PlayEffect(nEffectId); } } } Vector3 posScale = m_ObjTransform.localScale; m_ObjTransform.localScale = posScale * fScaling; m_localScale = m_ObjTransform.localScale; return(true); }
//开始使用轻功技能 public void PlayLightSkill(Vector3 dstPos, int nStep) { //首先判断是否为二段跳 //if (IsLightState && m_bIsLightSecondStepState) //{ // m_bIsLightSecondStepActived = true; //} //暂时只支持一段跳 if (nStep != 1) { return; } //判断场景内是否可以使用轻功 Tab_SceneClass sceneClass = TableManager.GetSceneClassByID(GameManager.gameManager.RunningScene, 0); if (null != sceneClass && sceneClass.IsCanUseLight != 1) { return; } Tab_LightSkill lightSkill = TableManager.GetLightSkillByID(nStep, 0); if (null == lightSkill) { return; } //设置开始时间和持续时间 m_fLightStartTime = Time.time; //将目标点的Y进行赋值,由于不考虑落差,所以先按照当前点的y值进行计算 if (null != ObjTransform) { Vector3 targetPos = new Vector3(dstPos.x, ActiveScene.GetTerrainPosition(dstPos).y, dstPos.z); if (BaseAttr.MoveSpeed > 0) { Vector2 vecSrc = new Vector2(ObjTransform.position.x, ObjTransform.position.z); Vector2 vecDst = new Vector2(dstPos.x, dstPos.z); m_fLightLastTime = Vector2.Distance(vecSrc, vecDst) / BaseAttr.MoveSpeed; if (BaseAttr.MoveSpeed > 5.0f) { // 如果客户端因为乘骑,加速等,速度大于5,则按5的速度计算轻功所需时间 m_fLightLastTime = Vector2.Distance(vecSrc, vecDst) / 5.0f; // 轻功一律按照5的速度算 } m_fLightWantHight = 0.1f + (Vector2.Distance(vecSrc, vecDst) / 3f); // 计算轻功最高的高度,防止距离短但是飞的高 if (m_fLightWantHight < 0.1f) { m_fLightWantHight = 0.1f; } if (m_fLightWantHight > 3) { m_fLightWantHight = 3; } } m_fMoveSpeed = BaseAttr.MoveSpeed; if (m_fLightLastTime <= 0 || m_fLightLastTime > 5.0f) { m_fLightLastTime = 5.0f; //否则给默认值5秒,和服务器的最长时间相同 } StartLightSkillMove(lightSkill.AnimId, targetPos); if (ObjType == Games.GlobeDefine.GameDefine_Globe.OBJ_TYPE.OBJ_MAIN_PLAYER && null != SkillBarLogic.Instance()) { //SkillBarLogic.Instance().BeginLightCD(); } } }
protected void UpdateLightSkill() { if (false == m_bIsLightState || m_LightSkillTargetPos == Vector3.zero) { return; } if (ObjTransform == null) { return; // 判空 } m_fMoveSpeed = BaseAttr.MoveSpeed; //如果在轻功过程中产生强制移动行为,则进行强制移动的Update,忽略轻功本身的路径 if (m_bTeleMoveInLight) { if (Vector3.Distance(m_vecLightTelePos, ObjTransform.position) <= 1.0f) { EndLightSkillMove(); m_bTeleMoveInLight = false; // 被击退情况结束了,置回来 } return; } //轻功结束 //if (Vector3.Distance(m_LightSkillTargetPos, ObjTransform.position) <= 2.0f) if (Vector2.Distance( new Vector2(m_LightSkillTargetPos.x, m_LightSkillTargetPos.z), new Vector2(ObjTransform.position.x, ObjTransform.position.z) ) <= 0.5f) { EndLightSkillMove(); } //进行高度修正,目前的轨迹是一条正弦曲线 if (m_fLightLastTime > 0.0f) { float timeElps = Time.time - m_fLightStartTime; if (timeElps <= m_fLightLastTime) { //float fAngle = (timeElps / m_fLightLastTime) * 3.1415f; //float fHeightRefix = Mathf.Cos(fAngle) * 0.1f; ////由于现在地表高度为精确高度,所以发现到达地面的时候则停止轻功 //if (fHeightRefix < 0.0f && ObjTransform.position.y < ActiveScene.GetTerrainPosition(ObjTransform.position).y) //{ // EndLightSkillMove(); //} ////if (ObjTransform.position.y + fHeightRefix < 8.0f) ////限制高度 //if (m_fTotalLightHightRefix >=3.0f && fHeightRefix>0) //{ // fHeightRefix = 0.0f; //} //else if (m_fTotalLightHightRefix < 1.0f && fHeightRefix < 0) //{ // fHeightRefix = 0.0f; //} //m_fTotalLightHightRefix += fHeightRefix; //ObjTransform.position = new Vector3(ObjTransform.position.x, ObjTransform.position.y + fHeightRefix, ObjTransform.position.z); if (m_fLightLastTime == 0) { m_fLightLastTime = 0.1f; // 判除零 } float fAngle = (timeElps / m_fLightLastTime) * 3.1415f; float fHeightRefix = Mathf.Sin(fAngle) * m_fLightWantHight; // 最高距离是3米 float old_offsety = m_fTotalLightHightRefix; m_fTotalLightHightRefix = fHeightRefix; float new_y = ObjTransform.position.y - old_offsety + m_fTotalLightHightRefix; // 当前位置,减去上次位置,加上这次位置 if (new_y < ActiveScene.GetTerrainPosition(ObjTransform.position).y) { // 如果算出来的位置小于地形高度,则是地形高度 new_y = ActiveScene.GetTerrainPosition(ObjTransform.position).y; } ObjTransform.position = new Vector3( ObjTransform.position.x, new_y, ObjTransform.position.z); } else { EndLightSkillMove(); } float fBeforeTime = 0.35f; if (ObjType == Games.GlobeDefine.GameDefine_Globe.OBJ_TYPE.OBJ_MAIN_PLAYER || ObjType == Games.GlobeDefine.GameDefine_Globe.OBJ_TYPE.OBJ_OTHER_PLAYER) { Obj_OtherPlayer _Player = this as Obj_OtherPlayer; if (_Player) { switch (_Player.Profession) { case (int)CharacterDefine.PROFESSION.SHAOLIN: fBeforeTime = 0.35f; break; case (int)CharacterDefine.PROFESSION.TIANSHAN: fBeforeTime = 0.35f; break; case (int)CharacterDefine.PROFESSION.XIAOYAO: fBeforeTime = 0.35f; break; case (int)CharacterDefine.PROFESSION.DALI: fBeforeTime = 0.35f; break; } } } if (AnimLogic != null && AnimLogic.CurAnimData != null) { // 判空 if (AnimLogic.CurAnimData.AnimID != (int)CharacterDefine.CharacterAnimId.LIGHTSKILLEND) { if (m_fLightLastTime - timeElps <= fBeforeTime || Vector3.Distance(m_LightSkillTargetPos, ObjTransform.position) <= 1.75f) { AnimLogic.Stop(); AnimLogic.Play((int)CharacterDefine.CharacterAnimId.LIGHTSKILLEND); } } } } //暂时屏蔽二段跳 //如果在轻功状态并且二段跳还未被激活,则判断是否可以进行二段跳跃 //if (!m_bIsLightSecondStepState && !m_bIsLightSecondStepActived) //{ // //激活二段跳(只能激活一次) // if (Vector3.Distance(m_LightSkillTargetPos, ObjTransform.position) <= 5.0f) // { // m_bIsLightSecondStepState = true; // m_bIsLightSecondStepActived = false; // } //} }
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); } }
public override bool Init(Obj_Init_Data initData) { if (null == m_ObjTransform) { m_ObjTransform = gameObject.transform; } m_ObjTransform.position = ActiveScene.GetTerrainPosition(new Vector3(initData.m_fX, 0, initData.m_fZ)); //暂时 写死了 后面再用服务器 m_ObjTransform.Rotate(Vector3.up * 135); //服务器发过来的信息 this.ServerID = initData.m_ServerID; BaseAttr.RoleBaseID = initData.m_RoleBaseID; BaseAttr.RoleName = initData.m_StrName; m_OwnerObjId = initData.m_OwnerObjId; StealthLev = initData.m_StealthLev; m_Quality = initData.m_FellowQuality; OptStealthLevChange(); //防止伙伴追上人物导致动作不流畅 把客户端主角伙伴速度修改为和人物一样 if (IsOwnedByMainPlayer() == true) { Singleton <ObjManager> .GetInstance().MainPlayer.CurFellowObjId = ServerID; Singleton <ObjManager> .GetInstance().MainPlayer.CurFellowObjGuid = initData.m_Guid; BaseAttr.MoveSpeed = Singleton <ObjManager> .GetInstance().MainPlayer.BaseAttr.MoveSpeed; } else { Obj_OtherPlayer otherPlayer = Singleton <ObjManager> .Instance.FindObjInScene(m_OwnerObjId) as Obj_OtherPlayer; if (null != otherPlayer) { otherPlayer.FellowID = ServerID; m_bVisible = otherPlayer.IsVisibleChar(); } BaseAttr.MoveSpeed = initData.m_MoveSpeed; } Tab_CabalFellowAttr fellowAttrTab = TableManager.GetCabalFellowAttrByID(BaseAttr.RoleBaseID, 0); if (fellowAttrTab != null) { //初始化CharModelID,并读取部分客户端信息 ModelID = fellowAttrTab.ModelId; Tab_CharModel charModel = TableManager.GetCharModelByID(ModelID, 0); if (null != charModel) { BaseAttr.HeadPic = charModel.HeadPic; //设置动作路径 AnimationFilePath = charModel.AnimPath; //设置名字版高度 DeltaHeight = charModel.HeadInfoHeight; m_ObjTransform.localScale = new Vector3(charModel.Scale, charModel.Scale, charModel.Scale); m_ObjTransform.localRotation = Utils.DirServerToClient(initData.m_fDir); } } //初始化寻路代理 InitNavAgent(); //初始化AutoMove功能模块 //if (gameObject.GetComponent<AutoMove>() == null) //{ gameObject.AddComponent <AutoMove>(); //} //初始化动画,需要在AnimationFilePath被赋值后进行 if (AnimLogic == null) { AnimLogic = gameObject.AddComponent <AnimationLogic>(); } //初始化特效 if (ObjEffectController == null) { ObjEffectController = gameObject.AddComponent <CharacterEffectBehaviourController>(); } //召出播放特效 if (Singleton <ObjManager> .GetInstance().MainPlayer != null) { if (m_OwnerObjId == Singleton <ObjManager> .GetInstance().MainPlayer.ServerID) { if (GameManager.gameManager.PlayerDataPool.FellowPlayerEffect == true) { //PlayEffect(52); GameManager.gameManager.PlayerDataPool.FellowPlayerEffect = false; } } } if (IsDie()) { OnCorpse(); } else { if (Objanimation != null) { Objanimation.Stop(); } CurObjAnimState = Games.GlobeDefine.GameDefine_Globe.OBJ_ANIMSTATE.STATE_NORMOR; } InitNameBoard(); return(base.Init(initData)); }
public uint Execute(PacketDistributed ipacket) { GC_RET_RELIVE packet = (GC_RET_RELIVE )ipacket; if (null == packet) { return((uint)PACKET_EXE.PACKET_EXE_ERROR); } //enter your logic Obj_MainPlayer MainPlayer = Singleton <ObjManager> .GetInstance().MainPlayer; if (null == MainPlayer) { return((uint)PACKET_EXE.PACKET_EXE_ERROR); } int objId = packet.ObjId; Obj_Character TargetObj = Singleton <ObjManager> .GetInstance().FindObjCharacterInScene(objId); if (TargetObj == null) { return((uint)PACKET_EXE.PACKET_EXE_CONTINUE); } if (objId == MainPlayer.ServerID) { // 自己 if (packet.HasReviveTime) { MainPlayer.ReliveEntryTime = packet.ReviveTime; } //主玩家自己。判断当前地形数据是否可用,如果不可用,更新地形数据 //if (GameManager.gameManager != null) //{ // if (GameManager.gameManager.ActiveScene != null) // { // if (GameManager.gameManager.ActiveScene.TerrainData != null) // { // //地形数据存在,但数据没有加载成功 // if (!GameManager.gameManager.ActiveScene.TerrainData.RawDataOK) // { // GameManager.gameManager.m_loadErrorNum = 0; // GameManager.gameManager.ActiveScene.SetTerrainData(); // } // } // else // { // //地形数据不存在,加载地形数据 // GameManager.gameManager.m_loadErrorNum = 0; // GameManager.gameManager.ActiveScene.SetTerrainData(); // } // } //} } if (packet.HasPos_x && packet.HasPos_z && packet.HasFacedir) { float fEnterPosX = ((float)packet.Pos_x) / 100; float fEnterPosZ = ((float)packet.Pos_z) / 100; Vector3 newPosition = new UnityEngine.Vector3(fEnterPosX, 0, fEnterPosZ); //if (GameManager.gameManager.ActiveScene.IsT4MScene()) //{ newPosition.y = GameManager.gameManager.ActiveScene.GetTerrainHeight(newPosition); //} //else if (null != Terrain.activeTerrain) //{ //newPosition.y = GameManager.gameManager.ActiveScene.GetNavSampleHeight(newPosition); //} //Temp,保证版本正确性 newPosition = ActiveScene.GetTerrainPosition(newPosition); // if (GameManager.gameManager.RunningScene == (int)Games.GlobeDefine.GameDefine_Globe.SCENE_DEFINE.SCENE_ERHAI) // { // newPosition.y = 18.0f; // } // else if (GameManager.gameManager.RunningScene == (int)Games.GlobeDefine.GameDefine_Globe.SCENE_DEFINE.SCENE_YANGWANGGUMU // || GameManager.gameManager.RunningScene == (int)Games.GlobeDefine.GameDefine_Globe.SCENE_DEFINE.SCENE_WANGYOUGU // || GameManager.gameManager.RunningScene == (int)Games.GlobeDefine.GameDefine_Globe.SCENE_DEFINE.SCENE_TIANSHAN) // { // newPosition.y = 22.5f; // } TargetObj.Position = newPosition; } //主角位置特殊处理 if (objId == MainPlayer.ServerID) { MainPlayer.LastSyncPos = MainPlayer.Position; if (null == MainPlayer.NavAgent) { MainPlayer.InitNavAgent(); MainPlayer.NavAgent.destination = MainPlayer.Position; } } TargetObj.OnRelife(); return((uint)PACKET_EXE.PACKET_EXE_CONTINUE); }