【问题标题】:Object in Unity won't trigger, although the colliders and code are correctUnity 中的对象不会触发,尽管碰撞器和代码是正确的
【发布时间】:2021-05-01 17:35:17
【问题描述】:

近一周以来,我一直在测试 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,他只会让我走开。我不知道这是什么。

【问题讨论】:

    标签: c# unity3d game-engine game-development icsharpcode


    【解决方案1】:

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

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

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

    【讨论】:

    • 酷,我链接了 OnTriggerStay(在进入开始动画时,在停留做东西时,在退出停止动画时)所以你也可以考虑删除布尔条件——很高兴你明白了跨度>
    • 哇。对此没有任何想法。谢谢+1
    【解决方案2】:

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

    【讨论】:

    • 如果我只用它一个,什么都不会发生。所以敌人只是跑到我身上,什么也不做。我已经尝试过两者。
    【解决方案3】:

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

    【讨论】:

    • 没什么区别,不过还是谢谢
    猜你喜欢
    • 2022-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-04
    • 2018-02-18
    • 2021-06-08
    相关资源
    最近更新 更多