Игрок не стреляет снарядами, когда он в движении - PullRequest
1 голос
/ 05 мая 2019

Когда я стреляю, а игрок стоит на месте, снаряды работают нормально, но когда я двигаюсь или прыгаю вперед, снаряды не работают.

Я думаю, что это происходит из-за моего кода пули. Я новичок в Unity, поэтому я думаю, что с кодом что-то не так.

void Update()
{
    transform.Translate(Vector3.right * speed * Time.deltaTime);
}

private void OnTriggerEnter2D(Collider2D other)
{
    Destroy(gameObject);
}

1 Ответ

1 голос
/ 05 мая 2019

Я почти уверен, что знаю, почему у вас возникла эта проблема, но я потрачу некоторое время, чтобы показать вам, как вы могли бы отладить это в будущем.

Итак, вы говорите: "Снаряды дон'работа', которая на самом деле ничего не значит, но я предполагаю, что это означает "Они не появляются".

Это может быть вызвано двумя причинами:

  1. Что-то мешает им порождать
  2. Они немедленно удаляются

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

Чтобы убедиться, что это так, вы можете проверить, какой объект вызывает удаление,редактирование кода столкновения:

private void OnTriggerEnter2D(Collider2D other)
{
    Debug.Log(other.name);
    Destroy(gameObject);
}

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

  1. При проверке на столкновение поместите Destroy в условный оператор, такой как: if (other.tag != "Player")
  2. Добавьте слой в маркер и предотвратите этот слойот столкновения со слоем игрока.
  3. Исключите столкновения между пулей и игроком в методе Start () с Physics.IgnoreCollision(MyCollider, PlayerCollider); (или Physics2D, если 2D)

Радипростота / решение вашей проблемы, давайте с номером 1;отредактируйте свой код столкновения, чтобы он был условным:

private void OnTriggerEnter2D(Collider2D other)
{
    if (other.tag != "Player") 
    {
        Destroy(gameObject);
    }
}

, затем перейдите к объекту игрока и создайте новый слой с именем "Player", и назначьте его объекту игрока.

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