Unity 中的对象不会触发,尽管碰撞器和代码是正确的

Object in Unity won't trigger, although the colliders and code are correct

近一个星期以来,我一直在测试 Unity 制作游戏的能力。问题如下: 我在玩家周围有一个敌人和一个圆圈,它们都有一个 IsTrigger 处于活动状态的对撞机。在代码中,有一个针对敌人的 OnTriggerEnter 和 OnTriggerExit 事件。如果敌人进入玩家的圈子,则 bool 变为 true 并且应该发生其他事情。但只有这种情况发生: 敌人直接进入玩家内部,然后 bool 才变为真(我测试了很多次,就是这样)即使玩家本身没有对撞机,只有它周围的圆圈(玩家当然有一个角色控制器,但这不可能是触发器,对吗?)

敌人有一个简单的 AI,并且总是走向玩家的方向,所以也许只有当他在那里时才会触发。因为这似乎发生了什么。代码就在这里:

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;
    }

此代码实际上属于 Jimmy Vegas。我正在从他的 YouTube 教程中学习,在他的视频中效果很好。这就是为什么我很困惑。

编辑:敌人无视我的玩家。即使我将对撞机添加到播放器本身,它也不会触发。如果我关闭了敌人的 IsTrigger,他就会让我出故障。我不知道这是什么。

在编辑器中不要对两者使用 isTrigger objects.Use 它只对一个使用。

尝试使用 void OnTriggerEnter(Collider collider){ ... } 函数。

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

" 仅当其中一个对撞机还附加了刚体时才会发送触发事件"

两个游戏对象都必须包含一个 Collider 组件。必须启用 Collider.isTrigger,并包含刚体。