2

将近一周以来,我一直在测试 Unity 是否可以制作游戏。问题如下:我有一个敌人和一个围绕玩家的圆圈,它们都有一个 IsTrigger 处于活动状态的对撞机。在代码中,有一个针对敌人的 OnTriggerEnter 和 OnTriggerExit 事件。如果敌人进入玩家的圈子,则布尔值变为真,并且应该发生其他事情。但只会发生这种情况:敌人直接进入玩家内部,然后 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,他只会让我走开。我不知道这是什么。

4

3 回答 3

2

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

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

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

于 2021-01-28T10:03:32.193 回答
1

在编辑器中,不要对两个对象都使用 isTrigger。只对一个对象使用它。

于 2021-01-27T22:06:05.173 回答
0

尝试使用该void OnTriggerEnter(Collider collider){ ... }功能。

于 2021-01-28T00:38:24.267 回答