Unity – die besten Beiträge

Unity: Sprung verbessern?

https://www.youtube.com/watch?v=fSA0z6qmyR8

Ich hätte eine Frage: Wie mache ich es, dass ich in meinem Unity-Projekt (2D RPG) die Sprungfunktion flüssiger mache. Also, sodass ich bestimmen kann, dass sich der Charakter schneller nach oben und unten bewegt.

Ich habe außerdem das Problem, dass, wenn ich nach rechts oder links springe, aber an einem Collider komme, der Charakter an dem Collider hängen bleibt. Wie behebe ich das, dass eben der Charakter dann nur am Collider ankommt, aber dann direkt nach unten fällt und nicht solange hängen bleibt, bis ich aufhöre, gegen den Collider zu gehen?

Code des PlayerController:

public class PlayerController : MonoBehaviour
{
  public float moveSpeed;
  private Animator anim;
  private Rigidbody2D playerRigidbody;
  private bool playerMoving;
  private bool playerJumping;
  
  [SerializeField]
  private float jumpVelocity;

  [SerializeField]
  private LayerMask platformsLayerMask;

  private Rigidbody2D rigidbody2d;
  private BoxCollider2D boxCollider2d;

  // Start is called before the first frame update
  void Start()
  {
    anim = GetComponent<Animator>();
    playerRigidbody = GetComponent<Rigidbody2D>();
    boxCollider2d = transform.GetComponent<BoxCollider2D>();
  }

  // Update is called once per frame
  void Update()
  {
    playerMoving = false;
    playerJumping = false;

    if (Input.GetAxisRaw("Horizontal") > 0.5f || Input.GetAxisRaw("Horizontal") < -0.5f)
    {
      playerRigidbody.velocity = new Vector2(Input.GetAxisRaw("Horizontal") * moveSpeed, playerRigidbody.velocity.y);
      playerMoving = true;
    }

    if (Input.GetAxisRaw("Horizontal") < 0.5f && Input.GetAxisRaw("Horizontal") > -0.5f)
    {
      playerRigidbody.velocity = new Vector2(0f, playerRigidbody.velocity.y);
    }

    anim.SetFloat("MoveX", Input.GetAxisRaw("Horizontal"));
    anim.SetBool("PlayerMoving", playerMoving);
    anim.SetBool("PlayerJumping", playerJumping);

    if (IsGrounded() && Input.GetKeyDown(KeyCode.Space))
    {
      // jumpVelocity = 8.8f;
      playerRigidbody.velocity = Vector2.up * jumpVelocity;
    }
  }

  private bool IsGrounded()
  {
    float extraheight = .5f;
    RaycastHit2D raycastHit = Physics2D.BoxCast(boxCollider2d.bounds.center, boxCollider2d.bounds.size, 0f, Vector2.down, extraheight, platformsLayerMask);
    Color rayColor;

    if (raycastHit.collider != null)
    {
      rayColor = Color.green;
    }
    else
    {
      rayColor = Color.red;
    }

    //Debug.DrawRay(boxCollider2d.bounds.center, Vector2.down * (boxCollider2d.bounds.extents.y + extraheight), rayColor);
    //Debug.Log(raycastHit.collider);

    return raycastHit.collider != null;
  }
}
programmieren, Unity

Meistgelesene Beiträge zum Thema Unity