示例#1
0
    public void Control()
    {
        Vector2 velocity = rb.velocity;

        float moveX = MOVEMENT_X_AIR;

        if (pressedJump && Input.GetAxis("Vertical") > 0 && timeJumpPressed < JUMP_TIME_LIMIT_PRESS)
        {
            timeJumpPressed += Time.deltaTime;
            velocity.y       = MOVEMENT_Y * Time.deltaTime;
        }
        else
        {
            pressedJump = false;
        }

        if (isGround())
        {
            pressedJump     = false;
            timeReloadJump -= Time.deltaTime;
            moveX           = MOVEMENT_X_GROUND;
            velocity.x      = 0;
            if (Input.GetAxis("Vertical") > 0 && timeReloadJump <= 0)
            {
                // Jump
                velocity.y      = MOVEMENT_Y * Time.deltaTime;
                timeReloadJump  = JUMP_RELOAD;
                timeJumpPressed = 0;
                isGrounded      = false;
                pressedJump     = true;
            }
            else if (Input.GetAxis("Vertical") < 0)
            {
                // DownTheLadder
            }
        }

        wallCollidingDirection wallHitting = isHittingWall();

        if (canMove && wallHitting != wallCollidingDirection.Booth)
        {
            if (Input.GetAxis("Horizontal") > 0 && wallHitting != wallCollidingDirection.Right)
            {
                // Right
                velocity.x = moveX;
            }
            else if (Input.GetAxis("Horizontal") < 0 && wallHitting != wallCollidingDirection.Left)
            {
                // Left
                velocity.x = -moveX;
            }
        }

        rb.velocity = velocity;
    }
示例#2
0
    private wallCollidingDirection isHittingWall()
    {
        wallCollidingDirection collidingDirection = wallCollidingDirection.None;

        Vector2 positionR = transform.position;

        positionR.x += bc.bounds.extents.x;
        positionR.y += bc.bounds.extents.y;

        Vector2 positionR2 = transform.position;

        positionR2.x  = positionR.x;
        positionR2.y -= bc.bounds.extents.y;

        if (isCollidingInDirection(positionR, Vector3.right) || isCollidingInDirection(positionR2, Vector3.right))
        {
            collidingDirection = wallCollidingDirection.Right;
        }

        Vector2 positionL = transform.position;

        positionL.x -= bc.bounds.extents.x;
        positionL.y += bc.bounds.extents.y;

        Vector2 positionL2 = transform.position;

        positionL2.x  = positionL.x;
        positionL2.y -= bc.bounds.extents.y;


        if (isCollidingInDirection(positionL, Vector3.left) || isCollidingInDirection(positionL2, Vector3.left))
        {
            if (collidingDirection != wallCollidingDirection.None)
            {
                collidingDirection = wallCollidingDirection.Booth;
            }
            else
            {
                collidingDirection = wallCollidingDirection.Left;
            }
        }

        return(collidingDirection);
    }