Player 3D og 2D Wall Jump Tutorial for Unity
Wall jumping, en mekaniker som er utbredt i plattformspill og actionspill, lar spillere hoppe av vegger, noe som gir kompleksitet og allsidighet til navigasjonen. Denne opplæringen tar sikte på å integrere vegghopping i den medfølgende FPS-kontrolleren. Mot slutten vil spillerkarakteren være i stand til å utføre vegghopp i både 2D- og 3D-innstillinger.
Implementering av Wall Jump for 3D ved å bruke 'SC_FPSController'-skriptet
Fra og med den gitte grunnkoden fra Unity FPS Controller-opplæringen, introduserer vi vegghoppmekanikeren.
Trinn 1: Sette opp veggdeteksjon
- Legg til et nytt lag i Unity kalt "Wall" for objekter som kan hoppes av på veggen.
- Oppdater 'SC_FPSController'-klassen, som du kan få fra vår Unity FPS Controller-opplæring, med følgende variabler:
public LayerMask wallLayer;
public float wallJumpForce = 10f;
private bool isTouchingWall = false;
Trinn 2: Oppdage veggen
- Inkorporer følgende logikk i 'Update()'-metoden for å oppdage en vegg:
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;
}
Denne raycasten i koden ovenfor vil oppdage vegger til venstre og høyre for spilleren.
Trinn 3: Implementering av Wall Jump for 3D
- Innenfor 'Update()'-metoden, etter bakkehopplogikken, sett inn:
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;
}
}
Denne logikken i koden ovenfor sjekker om spilleren trykker på hoppknappen, kan bevege seg og berører en vegg. I så fall gir den en vertikal kraft og en liten horisontal kraft bort fra veggen.
Implementering av Wall Jump for 2D ved å bruke 'CharacterController2D'-skriptet
Fra og med den gitte grunnkoden fra 2D Character Controller for Unity-opplæringen, introduserer vi wall jump-mekanikeren.
Trinn 1: Sette opp veggdeteksjon
- Legg til et nytt lag i Unity kalt "Wall" for objekter som kan hoppes av på veggen.
- Oppdater 'CharacterController2D'-klassen, som du kan få fra vår 2D Character Controller for Unity-opplæringen, med følgende variabler:
public LayerMask wallLayer;
public float wallJumpForce = 10f;
private bool isTouchingWall = false;
Trinn 2: Oppdage veggen i 2D
- Inkorporer følgende logikk i 'Update()'-metoden for å oppdage en vegg:
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;
}
Trinn 3: Implementering av Wall Jump for 2D
- Innenfor 'Update()'-metoden, etter bakkehopplogikken, sett inn:
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
}
}
Spørsmål adressert:
- Hvordan kan en karakter oppdage en vegg i Unity?: En karakter kan oppdage vegger ved å bruke raycasting. Ved å skyte en usynlig stråle fra spilleren i ønsket retning, kan man finne ut om en gjenstand, som en vegg, skjærer denne strålen.
- Hva er forskjellen mellom 2D- og 3D-vegghoppimplementering i Unity?: I Unity bruker 2D-fysikk 'Physics2D'-metoder (som 'Physics2D.Raycast()'), mens 3D-fysikk bruker 'Physics'-metoder (som 'Physics.Raycast()'). Logikken forblir relativt lik, men metoder og retninger (Vector2 for 2D, Vector3 for 3D) varierer.
Konklusjon
Dette tillegget gjør det mulig for karakteren i 2D-rommet å hoppe av vegger. Eksperimentering med kraftverdiene kan være nødvendig for å sikre jevn spilling. Ved å integrere disse trinnene vil spillerne finne at 2D-karakterens bevegelse er mer allsidig og dynamisk i miljøer med vegger.