private void FixedUpdate()
    {
        switch (state)
        {
        case State.Normal:
            rigidbody3D.velocity = moveDir * MOVE_SPEED;

            if (isDashButtonDown)
            {
                float   dashAmount   = 5f;
                Vector3 dashPosition = transform.position + lastMoveDir * dashAmount;

                RaycastHit2D raycastHit2d = Physics2D.Raycast(transform.position, lastMoveDir, dashAmount, dashLayerMask);
                if (raycastHit2d.collider != null)
                {
                    dashPosition = raycastHit2d.point;
                }

                // Spawn visual effect
                DashEffect.CreateDashEffect(transform.position, lastMoveDir, Vector3.Distance(transform.position, dashPosition));

                rigidbody3D.MovePosition(dashPosition);
                isDashButtonDown = false;
            }
            break;

        case State.Rolling:
            rigidbody3D.velocity = rollDir * rollSpeed;
            break;

        case State.Busy:
            break;
        }
    }
Esempio n. 2
0
    private void FixedUpdate()
    {
        rigidbody2D.velocity = moveDir * MOVE_SPEED;

        if (isDashButtonDown)
        {
            float   dashAmount   = 50f;
            Vector3 dashPosition = transform.position + moveDir * dashAmount;

            RaycastHit2D raycastHit2d = Physics2D.Raycast(transform.position, moveDir, dashAmount, dashLayerMask);
            if (raycastHit2d.collider != null)
            {
                dashPosition = raycastHit2d.point;
            }

            // Spawn visual effect
            DashEffect.CreateDashEffect(transform.position, moveDir, Vector3.Distance(transform.position, dashPosition));

            rigidbody2D.MovePosition(dashPosition);
            isDashButtonDown = false;
        }
    }