Speler 3D- en 2D-muursprong-tutorial voor Unity

Walljumpen, een mechanisme dat veel voorkomt in platformgames en actiegames, stelt spelers in staat van muren af ​​te springen, wat de navigatie complexer en veelzijdiger maakt. Deze tutorial is bedoeld om muurspringen te integreren in de meegeleverde FPS-controller. Tegen het einde kan het personage van de speler muursprongen uitvoeren in zowel 2D- als 3D-instellingen.

Implementatie van Wall Jump voor 3D met behulp van het 'SC_FPSController'-script

Beginnend met de gegeven basiscode uit de Unity FPS Controller tutorial, introduceren we het muursprongmechanisme.

Stap 1: Wanddetectie instellen

  • Voeg een nieuwe laag toe in Unity met de naam "Wall" voor objecten waar vanaf de muur gesprongen kan worden.
  • Update de klasse 'SC_FPSController', die u kunt verkrijgen in onze Unity FPS Controller-tutorial, met de volgende variabelen:
public LayerMask wallLayer;
public float wallJumpForce = 10f;
private bool isTouchingWall = false;

Stap 2: De muur detecteren

  • Neem de volgende logica op in de 'Update()'-methode om een ​​muur te detecteren:
RaycastHit hit;
if (Physics.Raycast(transform.position, transform.right, out hit, 1f, wallLayer) || Physics.Raycast(transform.position, -transform.right, out hit, 1f, wallLayer))
{
    isTouchingWall = true;
}
else
{
    isTouchingWall = false;
}

Deze raycast in de bovenstaande code detecteert muren links en rechts van de speler.

Stap 3: Implementatie van de Wall Jump voor 3D

  • Binnen de 'Update()'-methode, na de grondspronglogica, voegt u het volgende in:
else if (Input.GetButton("Jump") && canMove && isTouchingWall)
{
    moveDirection.y = wallJumpForce;

    // This adds a bit of horizontal force opposite the wall for a more dynamic jump
    if (Physics.Raycast(transform.position, transform.right, 1f, wallLayer))
    {
        moveDirection += -transform.right * wallJumpForce / 2.5f; // Adjust the divisor for stronger/weaker push.
    }
    else if (Physics.Raycast(transform.position, -transform.right, 1f, wallLayer))
    {
        moveDirection += transform.right * wallJumpForce / 2.5f;
    }
}

Deze logica in de bovenstaande code controleert of de speler op de springknop drukt, kan bewegen en een muur raakt. Als dat zo is, oefent het een verticale kracht en een lichte horizontale kracht uit, weg van de muur.

Implementatie van Wall Jump voor 2D met behulp van het 'CharacterController2D'-script

Beginnend met de gegeven basiscode uit de 2D Character Controller voor Unity tutorial, introduceren we het wall jump mechanisme.

Stap 1: Wanddetectie instellen

  • Voeg een nieuwe laag toe in Unity met de naam "Wall" voor objecten waar vanaf de muur gesprongen kan worden.
  • Update de klasse 'CharacterController2D', die u kunt verkrijgen via onze tutorial 2D Character Controller voor Unity, met de volgende variabelen:
public LayerMask wallLayer;
public float wallJumpForce = 10f;
private bool isTouchingWall = false;

Stap 2: De muur in 2D detecteren

  • Neem de volgende logica op in de 'Update()'-methode om een ​​muur te detecteren:
RaycastHit2D wallHitLeft = Physics2D.Raycast(transform.position, Vector2.left, 1f, wallLayer);
RaycastHit2D wallHitRight = Physics2D.Raycast(transform.position, Vector2.right, 1f, wallLayer);

if (wallHitLeft.collider != null || wallHitRight.collider != null)
{
    isTouchingWall = true;
}
else
{
    isTouchingWall = false;
}

Stap 3: Implementatie van de Wall Jump voor 2D

  • Binnen de 'Update()'-methode, na de grondspronglogica, voegt u het volgende in:
if (Input.GetKeyDown(KeyCode.W) && isTouchingWall && !isGrounded)
{
    r2d.velocity = new Vector2(r2d.velocity.x, jumpHeight);
    if (wallHitLeft.collider != null)
    {
        r2d.AddForce(new Vector2(wallJumpForce, 0)); // Push to the right when wall is on the left
    }
    else if (wallHitRight.collider != null)
    {
        r2d.AddForce(new Vector2(-wallJumpForce, 0)); // Push to the left when wall is on the right
    }
}

Beantwoorde vragen:

  1. Hoe kan een personage een muur detecteren in Unity?: Een personage kan muren detecteren met behulp van raycasting. Door een onzichtbare straal van de speler in de gewenste richting te schieten, kan men bepalen of een object, zoals een muur, deze straal snijdt.
  2. Wat is het verschil tussen 2D- en 3D-implementatie van muursprongen in Unity?: In Unity gebruikt 2D-fysica 'Physics2D' methoden (zoals 'Physics2D.Raycast()'), terwijl de 3D-fysica 'Physics'-methoden gebruikt (zoals 'Physics.Raycast()'). De logica blijft relatief vergelijkbaar, maar de methoden en richtingen (Vector2 voor 2D, Vector3 voor 3D) variëren.

Conclusie

Door deze toevoeging kan het personage in de 2D-ruimte van muren springen. Experimenteren met de krachtwaarden kan nodig zijn om een ​​soepele gameplay te garanderen. Door deze stappen te integreren zullen spelers merken dat de bewegingen van het 2D-personage veelzijdiger en dynamischer zijn in omgevingen met muren.

Voorgestelde artikelen
Ondersteuning voor dubbele sprongen toegevoegd aan een 2D-platformgame-personagecontroller in Unity
Dialoogsysteem voor eenheid
RTS- en MOBA-spelercontroller voor Unity
Helikoptercontroller voor Unity
Autocontroller voor Unity
Vliegtuigcontroller voor Unity
Hurken toevoegen aan FPS-speler in Unity