У меня есть своего рода отставание в игре, которую я делаю, используя единство, это о проверке на местности - PullRequest
0 голосов
/ 26 марта 2020

Когда бегун касается земли, значение bool не остается верным все время, пока он находится на земле

Я сделал два бегунка-коляски2D для бегуна: от одного до сталкиваются с землей, а другой устанавливается как триггер, чтобы проверить, заземлен ли он

Здесь бегун сталкивается с землей, но значение bool не установлено как истинное

Я сделал то же самое для наземного спрайта

Но когда скорость равна 0, она работает нормально ... и, конечно, тогда она бесполезна

Да, и еще одна вещь, когда префаб на земле продолжает генерировать здесь код геттера бегуна, застрявший в какой-то момент ... и когда он это делает, он помечается, что он заземлен ... любая идея как исправить зависание? PS: я пытался изменить размер поля boxcollider2D, но это не сработало: (((

Вот часть кода, относящаяся к проверке на земле (предполагается, что это хороший звуковой эффект шага) тоже)

 private void OnTriggerEnter2D(Collider2D collision)
{
    if(collision.tag == "Ground")
    {
        isGrounded = true;
        footSteps.Play();
    }
}

private void OnTriggerExit2D(Collider2D collision)
{
    if (collision.tag == "Ground")
    {
        isGrounded = false;
        footSteps.Stop();
    }
}

Может быть, если я просто покажу вам весь код, вы сможете мне лучше помочь (надеюсь, мой код не такой грязный)

public float speed;
public float jumpForce = 10f;
public float speedMultiplier;
public float speedIncreasedMilestone;
private float speedMilestoneCount;

private Rigidbody2D rb;
private Collider2D myCollider;

public Animator anim;
public AudioSource footSteps;
public bool isGrounded = false;



void Start()
{
    rb = GetComponent<Rigidbody2D>();

}


void Update()
{
    if(transform.position.x < speedMilestoneCount)
    {
        speedMilestoneCount += speedIncreasedMilestone;

        speedIncreasedMilestone = speedIncreasedMilestone * speedMultiplier;
        speed = speed * speedMultiplier;
    }

   if(isGrounded == true)
    {
        rb.velocity = new Vector2(-speed * Time.deltaTime, rb.velocity.y);
        anim.SetBool("Condition",true);
    }
   if(Input.GetKeyDown(KeyCode.Space) && isGrounded == true)
    {
        anim.SetBool("Condition", false);
        rb.velocity = new Vector2(rb.velocity.x,jumpForce);
    }     
}

private void OnTriggerEnter2D(Collider2D collision)
{
    if(collision.tag == "Ground")
    {
        isGrounded = true;
        footSteps.Play();
    }
}

private void OnTriggerExit2D(Collider2D collision)
{
    if (collision.tag == "Ground")
    {
        isGrounded = false;
        footSteps.Stop();
    }
}

}

1 Ответ

0 голосов
/ 26 марта 2020

Всякий раз, когда вы сталкиваетесь с этой проблемой (т.е. действие занимает больше времени, чем нужно), вы можете выбрать одну из двух стратегий:

  1. Проверьте, можете ли вы выполнять действие реже
  2. Проверьте, можете ли вы выполнить действие быстрее

В этом случае кажется, что вам нужно знать только, заземлен ли игрок, когда игрок пытается выполнить прыжок. Вот когда вы захотите выполнить проверку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...