MoveToTargetPosShow.cs 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. using UnityEngine;
  2. namespace GameLogic.Combat.Skill.MagicSkill
  3. {
  4. public class MoveToTargetPosShow : MagicAttShowBasic
  5. {
  6. protected Vector3 _targetPos;
  7. protected Vector3 _startPos;
  8. private float _currTime;
  9. private float _speed = 15;
  10. private float _timeAdd;
  11. public void SetTargetPos(Vector3 targetPos)
  12. {
  13. _targetPos = targetPos;
  14. _startPos = _skillBasic.CombatHeroEntity.dotPos;
  15. _timeAdd = 1.0f / (Vector3.Distance(_startPos, _targetPos) / _speed);
  16. _currTime = 0;
  17. _skillBasic.ActivationTimeLineData("run");
  18. }
  19. protected override void ProUpdate(float t)
  20. {
  21. if (!isUpdate)
  22. {
  23. return;
  24. }
  25. _currTime += t * _timeAdd;
  26. Vector3 lasetPos = _skillBasic.CombatHeroEntity.dotPos;
  27. Vector3 p = Vector3.Lerp(_startPos, _targetPos, _currTime);
  28. _skillBasic.CombatHeroEntity.combatHeroGameObject.SetPosition(p);
  29. Quaternion quaternion = Quaternion.LookRotation((p - lasetPos).normalized);
  30. _skillBasic.CombatHeroEntity.GameObject.transform.rotation =
  31. Quaternion.Lerp(_skillBasic.CombatHeroEntity.GameObject.transform.rotation, quaternion, 0.5f);
  32. if (_currTime >= 1)
  33. {
  34. isUpdate = false;
  35. callBack?.Invoke();
  36. }
  37. }
  38. }
  39. }