Unity Spieler klebt an Wänden?
Hallo! Ich möchte ein Spiel in Unity erstellen, doch jetzt ist mir aufgefallen, dass der Spieler an den Wänden festklebt wenn ich ihn in diese richtung laufen lasse.
Kann mir vielleicht jemand helfen/einen code schicken?
Danke!
Hier der Code:
using System.Collections;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using UnityEngine;
public class movement : MonoBehaviour
{
public float speed = 5;
public float jump = 5;
float moveVelocity;
private Animator anim;
private Rigidbody2D body;
bool grounded = true;
private void Awake()
{
anim = GetComponent<Animator>();
body = GetComponent<Rigidbody2D>();
}
void Update()
{
//Jumping
if (Input.GetKeyDown(KeyCode.Space) || Input.GetKeyDown(KeyCode.UpArrow) || Input.GetKeyDown(KeyCode.Z) || Input.GetKeyDown(KeyCode.W))
{
if (grounded)
{
GetComponent<Rigidbody2D>().velocity = new Vector2(GetComponent<Rigidbody2D>().velocity.x, jump);
grounded = false;
anim.SetBool("grndd", false);
}
}
moveVelocity = 0;
//Left Right Movement
if (Input.GetKey(KeyCode.LeftArrow) || Input.GetKey(KeyCode.A))
{
moveVelocity = -speed;
}
if (Input.GetKey(KeyCode.RightArrow) || Input.GetKey(KeyCode.D))
{
moveVelocity = speed;
}
GetComponent<Rigidbody2D>().velocity = new Vector2(moveVelocity, GetComponent<Rigidbody2D>().velocity.y);
float horizontalInput = Input.GetAxis("Horizontal");
if (horizontalInput > 0.01f)
transform.localScale = new Vector3(3, 3, 1);
else if (horizontalInput < -0.01f)
transform.localScale = new Vector3(-3, 3, 1);
anim.SetBool("run", horizontalInput != 0);
}
//Check if Grounded
void OnCollisionEnter2D(Collision2D collision)
{
grounded = true;
anim.SetBool("grndd", true);
}
}
1 Antwort
Ich denke deine Kollisionsbehandlung testet nicht nur den Kontakt mit dem Boden, sondern mit jeglichem Objekt.
Wenn dein Spieler jetzt direkt an der Wand steht, dann ist die Kollision womöglich immer wahr und er kann deshalb nicht Springen, da seine Geschwindigkeit in y-Richtung gleich wieder auf 0 gesetzt wird.
Aber vielleicht ist das Problem auch noch komplizierter, da musst du denke ich etwas rumprobieren, bis du den Fehler findest.