/// <summary> /// Gets the skill move effect path. return 0 - effectStart path, 1 - effectEnd,2 - action /// </summary> /// <returns>The skill move effect path.0 - effectStart path, 1 - effectEnd,2 - action</returns> /// <param name="id">Identifier.</param> public List <string> GetSkillMoveEffectPath(uint id) { SkillMoveConfig skillInfo = ConfigReader.GetSkillMoveConfig((int)id); if (skillInfo != null) { string startPath = GameConstDefine.LoadGameSkillEffectPath + "release/" + skillInfo.effectStart; string endPath = GameConstDefine.LoadGameSkillEffectPath + "release/" + skillInfo.effectEnd; return(new List <string>() { startPath, endPath, skillInfo.action }); } return(null); }
/// <summary> /// 执行强制移动 /// </summary> public virtual void OnExecuteForceMove() { if (RealEntity == null || this.entityType == EntityType.Building) { return; } SkillMoveConfig skillInfo = ConfigReader.GetSkillMoveConfig(EntitySkillModelId); if (skillInfo != null) { this.RealEntity.PlayerAnimation(skillInfo.action); } float timeSinceStartup = Time.realtimeSinceStartup; float fTimeSpan = timeSinceStartup - m_pcGOSSI.fBeginTime; float fMoveDist = fTimeSpan * m_pcGOSSI.fForceMoveSpeed; m_pcGOSSI.sServerSyncPos = m_pcGOSSI.sServerBeginPos + m_pcGOSSI.sServerDir * fMoveDist; float fDistToSyncPos = Vector3.Distance(m_pcGOSSI.sServerSyncPos, objTransform.position); if (fDistToSyncPos > 10) { objTransform.position = m_pcGOSSI.sServerSyncPos; objTransform.rotation = Quaternion.LookRotation(EntityFSMDirection); m_pcGOSSI.sLocalSyncDir = EntityFSMDirection; return; } if (fDistToSyncPos < 1) { return; } //1到10之间 Vector3 sThisSyncDir = m_pcGOSSI.sServerSyncPos - objTransform.position; sThisSyncDir.Normalize(); float fThisMoveSpeed = m_pcGOSSI.fForceMoveSpeed; float fThisSyncDist = fThisMoveSpeed * Time.deltaTime; Vector3 sNewPos = sThisSyncDir * fThisSyncDist + objTransform.position; this.objTransform.position = sNewPos; Quaternion DestQuaternion = Quaternion.LookRotation(sThisSyncDir); Quaternion sMidQuater = Quaternion.Lerp(objTransform.rotation, DestQuaternion, 3 * Time.deltaTime); objTransform.rotation = sMidQuater; }
//public bool CheckGuideMove(Vector3 pos) { // if (!SceneGuideTaskManager.Instance().CheckObstructTaskCanMove(pos)) { // RealEntity.PlayerFreeAnimation(); // OnCameraUpdatePosition(); // if (FSM != null && FSM.State != FsmState.FSM_STATE_FREE) // CGLCtrl_GameLogic.Instance.EmsgToss_AskStopMove(); // return false; // } // return true; //} /// <summary> /// 执行强制移动 /// (好像不能Iselfplay使用,因为没有RealEntity.Collider,暂时不知道在哪里赋值) /// 其他对象可以用这个状态,应该是网络慢的情况下,快速移动各对象到正确位置 /// </summary> public override void OnExecuteForceMove() { //base.OnExecuteForceMove(); Quaternion DestQuaternion = Quaternion.LookRotation(EntityFSMDirection); Quaternion sMidQuater = Quaternion.Lerp(RealEntity.GetTransform().rotation, DestQuaternion, 10 * Time.deltaTime); RealEntity.GetTransform().rotation = sMidQuater; float fTimeSpan = Time.realtimeSinceStartup - m_pcGOSSI.fBeginTime; float fMoveDist = fTimeSpan * m_pcGOSSI.fForceMoveSpeed; m_pcGOSSI.sServerSyncPos = m_pcGOSSI.sServerBeginPos + m_pcGOSSI.sServerDir * fMoveDist; SkillMoveConfig skillInfo = ConfigReader.GetSkillMoveConfig(EntitySkillModelId); if (skillInfo != null) { this.RealEntity.PlayerAnimation(skillInfo.action); } //2D位置同步 Vector3 serverPos2D = new Vector3(m_pcGOSSI.sServerSyncPos.x, 60, m_pcGOSSI.sServerSyncPos.z); Vector3 realPos2D = new Vector3(RealEntity.GetTransform().position.x, 60, RealEntity.GetTransform().position.z); Vector3 sSyncDir = serverPos2D - realPos2D; sSyncDir.y = 0; sSyncDir.Normalize(); float fDistToServerPos = Vector3.Distance(serverPos2D, realPos2D); float fThisMoveSpeed = EntityFSMMoveSpeed; if (fDistToServerPos > 10) { RealEntity.GetTransform().position = m_pcGOSSI.sServerBeginPos; GameMethod.GetMainCamera.FixedUpdatePosition(); return; } Vector3 pos = realPos2D + EntityFSMMoveSpeed * Time.deltaTime * sSyncDir; //this.realObject.transform.position = pos; this.RealEntity.Controller.Move(sSyncDir * m_pcGOSSI.fForceMoveSpeed * Time.deltaTime); GameMethod.GetMainCamera.FixedUpdatePosition(); }
public ReadSkillMoveConfig(string xmlFilePath) { //TextAsset xmlfile = Resources.Load(xmlFilePath) as TextAsset; ResourceItem xmlfileUnit = ResourcesManager.Instance.loadImmediate(xmlFilePath, ResourceType.ASSET); TextAsset xmlfile = xmlfileUnit.Asset as TextAsset; if (!xmlfile) { //Debug.LogError(" error infos: 没有找到指定的xml文件:" + xmlFilePath); } xmlDoc = new XmlDocument(); xmlDoc.LoadXml(xmlfile.text); XmlNodeList infoNodeList = xmlDoc.SelectSingleNode("SkillCfg_move ").ChildNodes; for (int i = 0; i < infoNodeList.Count; i++) {//(XmlNode xNode in infoNodeList) if ((infoNodeList[i] as XmlElement).GetAttributeNode("un32ID") == null) { continue; } string typeName = (infoNodeList[i] as XmlElement).GetAttributeNode("un32ID").InnerText; //Debug.LogError(typeName); SkillMoveConfig skillinfo = new SkillMoveConfig(); skillinfo.id = Convert.ToInt32(typeName); //SkillConfigInfo.NpcId = Convert.ToInt32(typeName); foreach (XmlElement xEle in infoNodeList[i].ChildNodes) { switch (xEle.Name) { #region 搜索 case "szName:": { skillinfo.name = Convert.ToString(xEle.InnerText); } break; case "MoveBeginEffect": { skillinfo.effectStart = Convert.ToString(xEle.InnerText); } break; case "MoveEndEffect": { skillinfo.effectEnd = Convert.ToString(xEle.InnerText); } break; case "n32Speed": { skillinfo.speed = Convert.ToInt32(xEle.InnerText) / 100.0f; } break; case "MoveAction": { skillinfo.action = Convert.ToString(xEle.InnerText); } break; #endregion } } ConfigReader.skillMoveInfoDic.Add(skillinfo.id, skillinfo); } }