unity ontriggerenter2d 有时不工作

Posted

技术标签:

【中文标题】unity ontriggerenter2d 有时不工作【英文标题】:Unity ontriggerenter2d not working sometimes 【发布时间】:2021-11-17 16:20:32 【问题描述】:

我正在创建一个 2D 平台汽车游戏,例如爬山赛车。我有一个功能,玩家车辆在前往目标的途中收集助推器和燃料。它是通过使用 OnTriggerEnter2D 完成的。当我在编辑器和 Bluestacks 模拟器上玩游戏时,它工作得很好。但是我没有安卓手机,所以我把他的vpk发给我的朋友测试,但他们总是抱怨助推器有时会收集,但有时它不会收集,车辆只是通过它。我将 Booster 制作为预制件并将其用于所有关卡,但他们说助推器有时会被收集,但有时即使在同一关卡中也不会收集。我对燃料和助推器使用相同的方法,但燃料工作正常。什么可能导致这个问题?我的车辆有一个刚体并设置为连续碰撞检测。并且错误可能在任何时间、任何级别发生。

碰撞处理代码:

void OnTriggerEnter2D(Collider2D col)

    if (col.gameObject.CompareTag("Nboost"))
    
        Booster.stat_boost_pick_sound.Play();
        Booster.collectedBoost += 1f;
        Destroy(col.gameObject);

    

    if (col.gameObject.CompareTag("fuel"))
    
        Booster.stat_boost_pick_sound.Play();
        Speedometer.static_fuel += 20f;
        Destroy(col.gameObject);

    

汽车运动代码:

void MoveCar()

    static_frontWheel.AddTorque(-input * static_carSpeed * Time.fixedDeltaTime);
    static_backWheel.AddTorque(-input * static_carSpeed * Time.fixedDeltaTime);
    static_car.AddTorque(-input * static_carTorque * Time.fixedDeltaTime);

【问题讨论】:

嗯,有几个问题(将答案添加到您的帖子中):您的车辆是刚体吗?你的物理和游戏时间步长是多少?这个错误是只发生在更高级别还是几乎任何时候都会发生? @SneakyPolarBear 什么是物理和游戏时间步长? 【参考方案1】:

这可能有多种原因(鉴于问题只解释得很少,我会写下所有可能的解决方案):

• 汽车是如此“快速”,以至于汽车的对撞机通过了助推器的对撞机。尝试将汽车的碰撞检测更改为连续。这可以在汽车的刚体上完成。或者,您可以增加汽车或助推器的对撞机尺寸

• 场景中的某些提升没有正确的标签。

• 场景中的一些增强位于未启用与汽车层的碰撞的层中

【讨论】:

碰撞检测持续进行。并且尺寸可能足够,因为相同尺寸的燃料没有这个错误。 Boosts 是由预制件制成的,因此每个 boosts 都有完全相同的标签。提升在默认层中。我会尝试增加 boost 的盒子对撞机的大小,看看会发生什么。我发现最有趣的是它只发生在手机中,而不是在编辑器和模拟器中。可能是由于某些 CPU 速度。我不知道。 @AmmuTammu 您可以尝试 fps 限制您的编辑器并测试 fps 是否是问题,但是将碰撞检测设置为连续应该可以有效地消除 fps“问题”。了解如何使用 fps cap 编辑器here

以上是关于unity ontriggerenter2d 有时不工作的主要内容,如果未能解决你的问题,请参考以下文章

Unity OnTriggerEnter2D

Unity OnTriggerEnter2D 未注册

unity OnTriggerEnter2D 不能重复使用

Unity OnTriggerEnter2D CompareTag ||比较标签不一致

碰撞后未调用 Unity5 OnTriggerEnter2D(2D 游戏)

Unity OnTriggerEnter2d() 不工作 |尝试在场景之间切换