Member 14135033 Ответов: 3

Почему мой код не выполняется каждый раз


У меня есть две башни, которые стреляют пулями, у меня есть вражеский скрипт с моим кодом обнаружения столкновений пуль, если он поражен электрическим током, враг получает удар током, если он поражен водяной бомбой, играйте в анимацию удара водой и с определенным уроном для каждой пули,


водяная бомба работает но электрическая нет

если я удалю вторую часть кода о водяной бомбе если n еще то работает электричество

Что я уже пробовал:

void OnTriggerEnter2D (Collider2D other)
{
    if (other.gameObject.CompareTag("bullet"))
    {
        SkelAnim.state.SetAnimation(0,electrick,true);

        moveScript.WalkSpeed = 0f;

        TakeDamgeEnemy (15f);

    }else{

        electrickcuted -= Time.deltaTime;

        SkelAnim.state.SetAnimation(0,walk,true);

        moveScript.WalkSpeed = 1f;
    }
    if (other.gameObject.CompareTag("WaterBomb"))
    {
        SkelAnim.state.SetAnimation(0,stand,true);

        moveScript.WalkSpeed = 0f;

        TakeDamgeEnemy (50f);
    }else{
        electrickcuted -= Time.deltaTime;

        SkelAnim.state.SetAnimation(0,walk,true);

        moveScript.WalkSpeed = 1f;
    }
}

3 Ответов

Рейтинг:
2

Patrice T

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

void OnTriggerEnter2D (Collider2D other)
{
    if (other.gameObject.CompareTag("bullet"))
    {
        SkelAnim.state.SetAnimation(0,electrick,true);

        moveScript.WalkSpeed = 0f;

        TakeDamgeEnemy (15f);

    }else{

        electrickcuted -= Time.deltaTime;

        SkelAnim.state.SetAnimation(0,walk,true);

        moveScript.WalkSpeed = 1f;
    }
    if (other.gameObject.CompareTag("WaterBomb"))
    {
        SkelAnim.state.SetAnimation(0,stand,true);

        moveScript.WalkSpeed = 0f;

        TakeDamgeEnemy (50f);
    }else{
        electrickcuted -= Time.deltaTime;

        SkelAnim.state.SetAnimation(0,walk,true);

        moveScript.WalkSpeed = 1f;
    }
}
} // this char does not fit with this code

Стиль отступа - Википедия[^]

Профессиональные редакторы программистов имеют эту функцию и другие, такие как сопоставление скобок и подсветка синтаксиса.
Блокнот++ Главная Страница[^]
личные[^]

Цитата:
У меня есть Debug.Log("попадание пули"); и Debug.Log("попадание воды"); это работает ,

Отладка-это гораздо больше, чем файл журнала.
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не знает, что должен делать ваш код, он не находит ошибок, он просто помогает вам, показывая, что происходит. Когда код не делает того, что ожидается, вы близки к ошибке.
Чтобы увидеть, что делает ваш код: просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]

Отладка кода C# в Visual Studio - YouTube[^]

Отладчик здесь только для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.


Member 14135033

Спасибо за вашу помощь, я продолжу работу с вышеприведенной информацией, которую вы предоставили, и посмотрю, как я справлюсь. Теперь я буду перепечатывать код с синтаксисом

Member 14135033

Я удалил символ, как вы сказали, и он говорит, что его ожидали с ошибкой.

Patrice T

char может понадобиться из-за кода, который вы не показали.

Member 14135033

Ах да, я понимаю, да я не хотел вставлять весь код, я думал, что это будет раздражать людей, просто кажется таким странным, что это работает, для каждой башни независимо, но не для обеих вместе. Я установить точку останова

Member 14135033

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

Patrice T

Посмотрите, может ли ваш редактор заменить табуляции пробелами, прежде чем вставлять код сюда, это предотвратит беспорядок.

Рейтинг:
1

KarstenK

Вы должны сами отлаживать свой код, но я думаю, что вы постоянно вызываете этот обработчик. Может быть, через какой-нибудь обратный вызов или таймер.

Я бы удалил пулю из игрового объекта или модели, когда она будет обработана.

Совет: сделайте некоторые выходные данные на консоли.


Member 14135033

Спасибо за ваш ответ , у меня есть Debug.Log("попадание пули"); и Debug.Log("попадание воды"); это работает , он просто делает первый обнаруженный им Коллисон , а не другой, если я переключаю башни вокруг, то другой работает

Рейтинг:
1

CPallini

Вы понимаете, что задано первым if блок ("пуля") затем немедленно перезаписывается вторым ("водяная бомба")?


Member 14135033

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

void OnTriggerEnter2D (Collider2D другое)
{



if (other.gameObject.CompareTag("пуля"))
{

Debug.Log("попадание пули");
Скеланим.государство.SetAnimation(0,electrick,true);

moveScript.WalkSpeed = 0С;

TakeDamgeEnemy (15f);

}


else if (other.gameObject.CompareTag("WaterBomb"))
{
Отладки.Журнал("попадание воды");
Скеланим.государство.SetAnimation(0,stand,true);

moveScript.WalkSpeed = 0С;

TakeDamgeEnemy (50р);



}еще{

electrickcuted -= Time.deltaTime;

Скеланим.государство.SetAnimation(0,walk,true);

moveScript.WalkSpeed = 1Ф;

}

Member 14135033

так что если попал купить пули // сделать это или если ударить по waterbullet этого// другим

CPallini

Молодец, я рад, что ты сам определил проблему. :большой палец вверх: