示例#1
0
    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();
    }
示例#2
0
    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");
        }
    }
示例#3
0
 public abstract void BeginMoveAnimation(SrpgNode startNode, SrpgNode destNode);