void ActionHandler(SkillActionData actData) { m_PlayerBehaviour.Invincible = (actData.m_invincible == 1); m_PlayerBehaviour.IronBody = (actData.m_ironBody == 1); m_actData = (SkillActionData)actData.Clone(); m_isAnimPlayed = false; m_PlayerBehaviour.ChangeDisplayState(m_actData.m_moveType); }
public void ActionHandler(SkillActionData actData) { m_PlayerBehaviour.Invincible = (actData.m_invincible == 1); m_PlayerBehaviour.IronBody = (actData.m_ironBody == 1); m_isAnimPlayed = false; m_lockedTarget = null; m_actData = (SkillActionData)actData.Clone(); ((PlayerBehaviour)this.m_roleBehaviour).ChangeDisplayState(m_actData.m_moveType); //2014-10-09 普通攻击的锁定目标计算规则有修改 //if (actData.m_ani_followtype == 1 // && m_PlayerBehaviour.ActionLockTarget!=null // && m_PlayerBehaviour.ActionLockTarget.GO!=null // && CheckAtAttackRange(m_PlayerBehaviour.ActionLockTarget)) if (actData.m_ani_followtype == 6 && //定速到达 m_PlayerBehaviour.ActionLockTarget != null && m_PlayerBehaviour.ActionLockTarget.GO != null) { m_lockedTarget = m_PlayerBehaviour.ActionLockTarget; var targetPosition = m_PlayerBehaviour.ActionLockTarget.GO.transform.position; m_PlayerBehaviour.ThisTransform.LookAt(new Vector3(targetPosition.x, m_PlayerBehaviour.ThisTransform.position.y, targetPosition.z)); } else { m_PlayerBehaviour.ThisTransform.Rotate(0, m_actData.m_startAngle, 0); } m_attackDire = Quaternion.Euler(0, m_actData.m_angle, 0) * Vector3.forward; //影子玩家参考主角方向 if (m_PlayerBehaviour.IsCopy) { m_attackDire = m_hero.transform.TransformDirection(m_attackDire); } else { m_attackDire = m_PlayerBehaviour.ThisTransform.TransformDirection(m_attackDire); } //判断Action的移动类型是否必达,如果是,则判断是为点还是可移动目标(目前只有点)。计算移动速度 if (m_skillBase.SkillData.m_directionParam == 2 && m_actData.m_ani_followtype == 3) { m_PlayerBehaviour.ChangeForward(m_touchPoint); dis = Vector3.Distance(m_playerStartPosition, m_touchPoint); s = dis / (m_actData.m_duration / 1000.0f); s = s * Time.deltaTime; } //技能施放位置修正 Vector3 correctPos = new Vector3(m_actData.m_startPos.x, 0, m_actData.m_startPos.y); correctPos = m_PlayerBehaviour.ThisTransform.TransformDirection(correctPos); m_PlayerBehaviour.ThisTransform.Translate(correctPos); this.IsStateReady = true; }
public void ActionHandler(SkillActionData actData) { m_PlayerBehaviour.Invincible = (actData.m_invincible == 1); m_PlayerBehaviour.IronBody = (actData.m_ironBody == 1); m_actData = (SkillActionData)actData.Clone(); m_scrollDire = Quaternion.Euler(0, m_actData.m_angle, 0) * Vector3.forward; //影子玩家参考主角方向 if (m_PlayerBehaviour.IsCopy) { m_scrollDire = m_hero.transform.TransformDirection(m_scrollDire); } else { m_scrollDire = m_PlayerBehaviour.ThisTransform.TransformDirection(m_scrollDire); } //TraceUtil.Log("开始滚动技能"); this.IsStateReady = true; }
public void ActionHandler(SkillActionData actData) { m_PlayerBehaviour.Invincible = (actData.m_invincible == 1); m_PlayerBehaviour.IronBody = (actData.m_ironBody == 1); m_isAnimPlayed = false; m_lockedTarget = null; marchForwardTargetPos = m_PlayerBehaviour.ThisTransform.position; hitRadius = 0; //Debug.Log("Action Start Time:" + Time.realtimeSinceStartup); //2014-10-09 普通攻击的锁定目标计算规则有修改 //if (actData.m_ani_followtype == 1 // && m_PlayerBehaviour.ActionLockTarget!=null // && m_PlayerBehaviour.ActionLockTarget.GO!=null // && CheckAtAttackRange(m_PlayerBehaviour.ActionLockTarget)) if (actData.m_ani_followtype == 6 && //定速到达 m_PlayerBehaviour.ActionLockTarget != null && m_PlayerBehaviour.ActionLockTarget.GO != null) { m_lockedTarget = m_PlayerBehaviour.ActionLockTarget; marchForwardTargetPos = new Vector3(m_lockedTarget.GO.transform.position.x, m_PlayerBehaviour.ThisTransform.position.y, m_lockedTarget.GO.transform.position.z); m_PlayerBehaviour.ThisTransform.LookAt(marchForwardTargetPos); //hitRadius = ((MonsterBehaviour)m_lockedTarget.Behaviour).m_MonsterConfigData._hitRadius; hitRadius = CommonDefineManager.Instance.CommonDefine.ChargeOffset; } else { m_PlayerBehaviour.ThisTransform.Rotate(0, actData.m_startAngle, 0); } m_actData = (SkillActionData)actData.Clone(); m_attackDire = Quaternion.Euler(0, m_actData.m_angle, 0) * Vector3.forward; //影子玩家参考主角方向 if (m_PlayerBehaviour.IsCopy) { m_attackDire = m_hero.transform.TransformDirection(m_attackDire); } else { m_attackDire = m_PlayerBehaviour.ThisTransform.TransformDirection(m_attackDire); } this.IsStateReady = true; }
public void ActionHandler(SkillActionData actData) { m_isAnimPlayed = false; m_actData = (SkillActionData)actData.Clone(); ChangeDisplayState(m_actData.m_moveType); if (animation.GetClip(m_actData.m_animationId) == null) { TraceUtil.Log("当前角色不包含" + m_actData.m_animationId + "动画名称"); return; } var t = Time.deltaTime; var s = m_actData.m_startSpeed * t + m_actData.m_acceleration * Mathf.Pow(t, 2) * 0.5f; m_actData.m_startSpeed += Mathf.FloorToInt(m_actData.m_acceleration * t); if (!m_isAnimPlayed || animation[m_actData.m_animationId].wrapMode == WrapMode.Loop) { animation.Play(m_actData.m_animationId); m_isAnimPlayed = true; } }
void ActionHandle(SkillActionData skillActionData) { if (skillActionData.m_actionId >= 57000011 && skillActionData.m_actionId <= 57000421) { float angel = m_MonsterBehaviour.ThisTransform.eulerAngles.y; TraceUtil.Log(SystemModel.Common, TraceLevel.Error, "UID:{0}, 动作ID: {1}, 动作开始角度:{2}", m_MonsterBehaviour.RoleDataModel.SMsg_Header.uidEntity, skillActionData.m_actionId, angel); } m_MonsterBehaviour.Invincible = (skillActionData.m_invincible == 1); m_MonsterBehaviour.IronBody = (skillActionData.m_ironBody == 1); m_currentActionData = (SkillActionData)skillActionData.Clone(); m_isMomentArrives = false; ((MonsterBehaviour)this.m_roleBehaviour).ChangeDisplayState(m_currentActionData.m_moveType); switch (m_currentActionData.m_ani_followtype) { case 1: //跟随类型 TypeID typeID; var target = EntityController.Instance.GetEntityModel(m_FightTargetID, out typeID); if (target != null) { Vector3 lookAtPos = new Vector3(target.GO.transform.position.x, m_MonsterBehaviour.ThisTransform.position.y, target.GO.transform.position.z); m_MonsterBehaviour.ThisTransform.LookAt(lookAtPos); } break; case 3: // m_actionBeginPos = m_MonsterBehaviour.ThisTransform.position; var player = PlayerManager.Instance.GetEntityMode(m_FightTargetID); if (player != null) { m_targetPos = player.Behaviour.transform.TransformPoint(new Vector3(m_currentActionData.m_followPositionOffset.y, m_MonsterBehaviour.ThisTransform.position.y, m_currentActionData.m_followPositionOffset.x)); m_targetPos.y = m_high; m_MonsterBehaviour.ThisTransform.LookAt(m_targetPos); } break; case 5: m_actionBeginPos = m_MonsterBehaviour.ThisTransform.position; m_targetPos = new Vector3(skillActionData.m_followPositionOffset.x, m_MonsterBehaviour.ThisTransform.position.y, -skillActionData.m_followPositionOffset.y); m_MonsterBehaviour.ThisTransform.LookAt(m_targetPos); if (skillActionData.m_duration <= 0) { m_isMomentArrives = true; if (skillActionData.IsIgnoreBlock || !SceneDataManager.Instance.IsPositionInBlock(m_targetPos)) { m_MonsterBehaviour.AttackToPoint(m_targetPos); } } break; default: //起始转角 m_MonsterBehaviour.ThisTransform.Rotate(0, skillActionData.m_startAngle, 0); break; } //m_attackDirt = Quaternion.Euler(0,skillActionData.m_angle,0) * m_MonsterBehaviour.ThisTransform.forward;// * Vector3.forward; m_attackDirt = m_MonsterBehaviour.ThisTransform.forward; //位移方向就是怪物朝向 m_currentSkillAniName = skillActionData.m_animationId; if (skillActionData.IsIgnoreBlock) { m_roleAnimationComponent.Play(m_currentSkillAniName); } else { m_roleAnimationComponent.CrossFade(m_currentSkillAniName); } //技能施放位置修正 Vector3 correctPos = new Vector3(m_currentActionData.m_startPos.x, 0, m_currentActionData.m_startPos.y); correctPos = m_MonsterBehaviour.ThisTransform.TransformPoint(correctPos); bool isPositionInBlock = !skillActionData.IsIgnoreBlock && SceneDataManager.Instance.IsPositionInBlock(correctPos); //如果是follow类型为3 ,持续时间为0,则无视移动中的阻挡 if (!isPositionInBlock && m_currentActionData.m_ani_followtype == 3 && m_currentActionData.m_duration == 0) { //Vector3 moveToPos = correctPos + Vector3.Distance(m_actionBeginPos, m_targetPos)*m_attackDirt; Vector3 moveToPos = (correctPos - m_actionBeginPos) + m_targetPos; m_MonsterBehaviour.MoveToPoint(moveToPos); return; } m_MonsterBehaviour.ThisTransform.Rotate(0, m_currentActionData.m_angle, 0); //最后转怪物的朝向,因为在前面会影响到TransformPoint的计算 //如果进入阻挡 if (isPositionInBlock) { Vector3 curPos = m_MonsterBehaviour.ThisTransform.position; //当前位置 Vector3 move = (curPos - correctPos).normalized * 5; float allDistance = Vector3.Distance(curPos, correctPos); float moveDistance = move.magnitude; int allMoveTime = (int)(allDistance / moveDistance); for (int i = 0; i <= allMoveTime; i++) { if (i == allMoveTime) { correctPos = curPos; break; } if (SceneDataManager.Instance.IsPositionInBlock(correctPos)) { correctPos += move; } else { break; } } } m_MonsterBehaviour.MoveToPoint(correctPos); if (skillActionData.m_actionId >= 57000011 && skillActionData.m_actionId <= 57000421) { float endangel = m_MonsterBehaviour.ThisTransform.eulerAngles.y; TraceUtil.Log(SystemModel.Common, TraceLevel.Error, "UID:{0}, 动作ID: {1}, 动作结束角度:{2}", m_MonsterBehaviour.RoleDataModel.SMsg_Header.uidEntity, skillActionData.m_actionId, endangel); } }