private void StartMoveToTarget(Vector3 target) { if (isStunned) { return; } if (startGameManager.inSetup) { return; } start = transform.position; this.target = new Vector3(target.x, transform.position.y, target.z); startDist = Vector3.Distance(start, this.target); SetMoving(true); transform.LookAt(this.target); //TODO with sequence to lerp up then steady then down if (moveTween != null && moveTween.IsPlaying()) { moveTween.SetTarget(this.target); moveTween.ChangeValues(start, this.target, startDist / speed); } else { moveTween = transform.DOMove(this.target, startDist / speed); moveTween.OnUpdate(() => { var t = (Mathf.Sin(moveTween.ElapsedPercentage().Remap(0, 1, -Mathf.PI + Mathf.PI / 2, Mathf.PI + Mathf.PI / 2)) + 1) / 2.0f; animator.SetFloat("Speed", t); if (!isMoving || isStunned) { moveTween.Kill(); } }); moveTween.OnComplete(() => { SetMoving(false); }); moveTween.OnKill(() => { SetMoving(false); }); } }