Одна строка останавливает скрипт C # Unity - PullRequest
1 голос

Некоторая часть кода работает (hp1 -= damage1;), но вторая часть не работает.Где я допустил ошибку?

Вот части двух скриптов:

Player1.cs

private Bullet1 b1;

void Start()
{
    b1 = FindObjectOfType<Bullet1>();
}

void OnCollisionEnter2D(Collision2D col)
{
    if (col.gameObject.tag == "Bullet1")
    {
        hp1 -= damage1; // it works, my player loses hp
        Destroy1(); // doesn't work
    }
}

void Destroy1()
{
    b1.hit1 = true; // hit for bullet1.cs
}

Bullet1.cs

public bool hit1;

void Update()
{
    if (hit1)
    {
        hit1 = false;
        Destroy(gameObject);
    }
}

Если я переключу bool hit = true в режиме реального времени в Unity, уничтожаются работы.Это означает, что Bullet1.cs не может получить hit = true;

Если я поменяю местами hp1 -= damage1; и Destroy1();, мой игрок не сможет получить урон,Итак, Destroy1(); останавливает мой код и не может активировать другие строки.Также, если я изменю Destroy1(); на b1.hit1 = true;, ничего нового не произойдет.

1 Ответ

2 голосов
/ 31 мая 2019

Просто уничтожьте пулю через столкновение вместо использования логического значения.Это создает ненужное использование ресурса.Из данного кода это все, что вам нужно сделать, чтобы уничтожить пулю, используя скрипт игрока.Части показанного сценария пули не нужны.Если вы хотите, чтобы дополнительная логика была обработана внутри маркера при уничтожении, используйте для этого функцию OnDestroy .

void OnCollisionEnter2D(Collision2D col)
{
    if (col.gameObject.tag == "Bullet1")
    {
        hp1 -= damage1;
        Destroy(col.gameobject); 
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...