【问题标题】:Detect when player is colliding with a particle - Unity检测玩家何时与粒子碰撞 - Unity
【发布时间】:2019-12-26 20:26:48
【问题描述】:

我刚刚制作了一个 粒子系统,它每 1 秒生成一个 “熔岩” 粒子(使用 各种尺寸、颜色等)。我需要玩家在与这些熔岩粒子之一碰撞时重生respawn() 函数已经存在并且可以工作,现在只需要在正确的时间调用它)。我对 Unity answers 和其他网站以及 StackOverflow 做了很多研究,但不明白如何做到这一点。

这是粒子系统现在的样子的屏幕截图。我启用了 trigger 复选框并尝试更改一些内容但没有成功:

并且该代码应该在玩家接触到熔岩粒子时调用

private void OnParticleCollision(GameObject collision)
{
    if (collision.CompareTag("Lava"))
    {
        StartCoroutine(TouchedLava());
    }
}

我在控制台中没有收到任何错误(即使在运行时)。

提前致谢!

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    您必须检查粒子系统的碰撞部分,就在触发器上方,然后将碰撞类型设置为世界。

    我认为本教程可能会对您有所帮助:

    https://www.youtube.com/watch?v=JRa2g3vgzBo&list=PLX2vGYjWbI0QJJfR-jSqxonYuCHrUhAvN

    编辑:

    这是我的工作脚本:

    public class ParticleTest : MonoBehaviour
    {
        public ParticleSystem part;
    
        void Start()
        {
            part = GetComponent<ParticleSystem>();
        }
    
        void OnParticleCollision(GameObject other)
        {
            if(other.tag == "Player")
               Debug.Log(other.tag);
        }
    }
    

    【讨论】:

    • 感谢您的回答,但您的建议没有奏效。
    • 好的,这是我的工作脚本,以防万一: public classparticleTest : MonoBehaviour { public ParticleSystem part; void Start() { part = GetComponent(); } void OnParticleCollision(GameObject other) { if(other.tag == "Player") Debug.Log(other.tag); } }
    • 非常感谢。我不确定将带有onParticleCollisionEvent(); 的脚本放在哪里,并且在 colliders 部分中有 3d 模式而不是 2d(当我的游戏是 2d 时!)。所以,感谢您的回答和编辑! :)
    猜你喜欢
    • 2016-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多