Unity3d - переход в функцию столкновения - PullRequest
0 голосов
/ 23 апреля 2019

Я хочу, чтобы мой персонаж прыгал только тогда, когда он стоит на земле.Несмотря на то, что я написал функцию столкновения, он не прыгает, когда я нажимаю клавишу.В чем проблема?

void OnCollisionEnter2D(Collision2D col)
{
    if (col.collider.tag == "groundTag")
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            rb2d.AddForce(new Vector2(rb2d.velocity.x, Jumpforce));
        }
    }

Ответы [ 2 ]

1 голос
/ 23 апреля 2019

OnCollisionEnter2D будет работать только тогда, когда он сталкивается с землей (один кадр). вероятно, вам нужно создать bool для этого условия. это не может быть лучшим вариантом. сделайте это правдой, когда он сталкивается с землей, и сделайте его ложным, когда он покинет землю. Напишите свой код в функции обновления.

    bool _canJump;

void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        rb2d.AddForce(new Vector2(rb2d.velocity.x, Jumpforce));
    }
}
void OnCollisionEnter2D(Collision2D col)
{

    if (col.collider.tag == "groundTag")
    {
        _canJump = true;
    }

}

void OnCollisionExit2D(Collision2D col)
{
    if (col.collider.tag == "groundTag")
    {
        _canJump = true;
    }

}
1 голос
/ 23 апреля 2019

Вы запускаете свое действие только тогда, когда вы вводите наземный триггер (функция, которую вы реализуете - OnCollisionEnter2D). Ваша функция работает, только если вы нажимаете клавишу пробела в том же кадре, когда коллайдер сталкивается с объектом groundTag.

Вы можете попробовать с OnCollisionStay2D или использовать CharacterController ; это должно облегчить реализацию символа.

...