Объект в Unity не срабатывает, хотя коллайдеры и код верны

Уже почти неделю я тестирую Unity для создания игр. Проблема в следующем: у меня есть враг и круг вокруг игрока, у которых есть коллайдер с активным IsTrigger. В коде есть события OnTriggerEnter и OnTriggerExit для противника. Если враг входит в круг игрока, выполняется логическое значение и должны происходить другие вещи. Но происходит только это: враг входит прямо внутрь игрока, и только тогда логическое значение становится истинным (я много раз тестировал его, и вот он), даже если у самого игрока нет коллайдера, только круг вокруг него (игрок есть, конечно, контроллер персонажа, но ведь это не может быть триггером?)

У врага простой ИИ, и он всегда идет в направлении игрока, поэтому, возможно, он срабатывает только тогда, когда он рядом. Потому что это то, что, кажется, происходит. Код здесь:

public GameObject thePlayer;
    public GameObject theEnemy;
    public float enemySpeed = 0.01f;
    public bool attackTrigger = false;
    public bool isAttacking = false;

    void Update () {
        transform.LookAt(thePlayer.transform);
        if (attackTrigger == false)
        {
            enemySpeed = 0.01f;
            theEnemy.GetComponent<Animation>().Play("walk");
            transform.position = Vector3.MoveTowards(transform.position, thePlayer.transform.position, enemySpeed);
        }
        if (attackTrigger == true && isAttacking == false)
        {
            enemySpeed = 0;
            theEnemy.GetComponent<Animation>().Play("attack");
            StartCoroutine(InflictDamage());
        }

    }

    void OnTriggerEnter()
    {
        attackTrigger = true;
    }

    void OnTriggerExit()
    {
        attackTrigger = false;
    }


    IEnumerator InflictDamage()
    {
        isAttacking = true;
        yield return new WaitForSeconds(1.1f);
        GlobalHealth.currentHealth -= 5;
        yield return new WaitForSeconds(0.2f);
        isAttacking = false;
    }

Этот Кодекс на самом деле принадлежит Джимми Вегасу. Я учусь из его учебника на YouTube, и в его видео он работал нормально. Вот почему я так сбита с толку.

Изменить: враг игнорирует моего игрока. Даже когда я добавляю коллайдер к самому плееру, он не срабатывает. Если у меня отключен IsTrigger от противника, он меня просто глючит. Я не знаю, что это.


person CreepyGamerCat    schedule 27.01.2021    source источник


Ответы (3)


https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnTriggerStay.html

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

Оба GameObject должны содержать компонент Collider. Один должен иметь включенный Collider.isTrigger и содержать Rigidbody.

person Neinth    schedule 28.01.2021
comment
Боже, спасибо. Это работает сейчас - person CreepyGamerCat; 28.01.2021
comment
Круто, я связал OnTriggerStay (анимация запуска при входе, анимация остановки при выходе, анимация остановки при выходе), чтобы вы могли подумать об удалении условия bool - рад, что вы его получили - person Neinth; 29.01.2021

В редакторе не используйте isTrigger для обоих объектов, используйте его только для одного.

person bata kos    schedule 27.01.2021
comment
Если я использую только для одного, ничего не происходит. Так что враг просто наезжает на меня и ничего не делает. Я пробовал это уже с каждым из них. - person CreepyGamerCat; 28.01.2021

Попробуйте использовать функцию void OnTriggerEnter(Collider collider){ ... }.

person Cornelis    schedule 28.01.2021
comment
Это не имеет значения, но все равно спасибо - person CreepyGamerCat; 28.01.2021