2.5D Stairs platformer problem

I am trying to recreate the situation you find in some 2d platformers where the player can walk up stairs and then turn around and head the other way but not go back down the stairs. Sometimes the player can press down while moving and then lets them take the stairs if they want to go back down.

I was wondering what the common or best method people use to solve this problem was.

A picture illustrates what I mean below. The green block is the player.
alt text

Thanks for any help anyone can provide!

1 Answer

1

I would create a trigger at the top of your staircase along with a script that contains an OnTriggerStay method that checks against your player input.

For example:

C#

void OnTriggerStay( Collider other )
{
    // if the player is already on the stairs, bail out
    if( Player.IsOnStairs )
        return;

    // check to see if down is being held and the player is moving
    // in the direction of the stairs (a la Castlevania)
    if( Input.GetAxis("Vertical") < 0 && Player.MovementDir == this.Direction )
    {
        // change player state to stair mode
        MyPlayerObject.SetOnStairs( this );    // or whatever your code for that is...
    }
}

Obviously you need to use your own methods for the behaviour you want, but the principle is there. For actually moving up and down, I’d constrain your character controller to a path that runs in the direction of your stairs when in ‘stair mode’.

Another option could be to disable collision with the floor to drop the player on to the stairs and then re-enable collisions when the player has cleared the trigger (OnTriggerExit), though the path method above would give you more control.