protected virtual IEnumerator MoveActiveUnitAlongPath(List <SrpgNode> path) { _activeUnitAnimating = true; float eachFrameTime = _unitMoveTime / _unitMoveFrame; for (int movei = 0; movei < path.Count - 1; movei++) { SrpgNode startNode = path[movei]; SrpgNode destNode = path[movei + 1]; _activeUnit.BeginMoveAnimation(startNode, destNode); // 현재 위치 타일에서 목표 위치 타일로 이동 Vector3 startPos = _map.CalcTilePosition(startNode.x, startNode.y); Vector3 destPos = _map.CalcTilePosition(destNode.x, destNode.y); Vector3 startToDest = destPos - startPos; for (int framei = 0; framei < _unitMoveFrame; framei++) { _activeUnit.transform.position = _activeUnit.transform.position + startToDest.normalized * startToDest.magnitude / _unitMoveFrame; yield return(new WaitForSeconds(eachFrameTime)); } _activeUnit.x = destNode.x; _activeUnit.y = destNode.y; } _activeUnitAnimating = false; _activeUnit.BeginIdleAnimation(); OnActiveUnitMoveEnd(); }
public override void BeginMoveAnimation(SrpgNode startNode, SrpgNode destNode) { Animator animator = GetComponent <Animator>(); animator.SetBool("Walking", true); if (destNode.x == startNode.x && destNode.y > startNode.y) { // up animator.SetFloat("DirectionX", 0f); animator.SetFloat("DirectionY", 1f); } else if (destNode.x == startNode.x && destNode.y < startNode.y) { // down animator.SetFloat("DirectionX", 0f); animator.SetFloat("DirectionY", -1f); } else if (destNode.x > startNode.x && destNode.y == startNode.y) { // right animator.SetFloat("DirectionX", 1f); animator.SetFloat("DirectionY", 0f); } else if (destNode.x < startNode.x && destNode.y == startNode.y) { // left animator.SetFloat("DirectionX", -1f); animator.SetFloat("DirectionY", 0f); } else { Debug.Log("Move Diagonal"); } }
public abstract void BeginMoveAnimation(SrpgNode startNode, SrpgNode destNode);