首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一致性:对撞机在重用后未检测到的集合对象

一致性:对撞机在重用后未检测到的集合对象
EN

Stack Overflow用户
提问于 2020-02-03 05:06:03
回答 1查看 274关注 0票数 0

问题是某些物体没有被对撞机探测到。我是对象池这些游戏对象,而不是实例化它们。它们由波浪汇集而成,每波有20-30个物体.

问题就在这里:第一波--所有的东西都被对撞机的碰撞探测到了。然后第二波和其余的波被对撞机忽略。有些可能被发现,但大多数都被忽略了。第二波直到第一波中的所有游戏物体都是setActive(false)时才开始,当它们击中OnCollisionEnter的对撞机时。

当禁用对象池或启用对象池时,没有什么不同,我检查了第一波和第二波中的两个游戏对象,它们都是相同的,刚体和对撞机都启用了默认设置,从第一次生成开始。

我遗漏了什么?为什么只有第一波对象池游戏对象工作,而不是重用的对象。

代码语言:javascript
复制
private void OnCollisionEnter(Collision collision)
{
    if (collision.transform.GetChild(0).gameObject.tag == "Enemy")
    {
        Debug.Log("P: " + collision.contacts[0].point + " | N: " + collision.contacts[0].normal);

        //  Allow ALL Enemies to not be stopped by Impact
        Physics.IgnoreCollision(collision.collider, GetComponent<Collider>());
    }
}

要生成的对象池代码。

代码语言:javascript
复制
GameObject enemy = ObjectPooler.SharedInstance.GetPooledObject("Enemy");
if (enemy!= null)
{
    enemy.SetActive(true);
}

要销毁的对象池代码

代码语言:javascript
复制
enemy.SetActive(false);

我写了另一篇关于这个问题的文章,但在那篇文章中,我认为这是另一个问题,但它必须是这个问题,因为无论我在第一波中有多少物体,它们都会被探测到。只有2,3,4波被忽略。这些波中只有一些被检测到,而我猜被检测到的是对象池尚未使用的新游戏对象。请帮帮忙

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-03 05:24:47

当敌人与玩家(想必)发生碰撞时,你会设置机器人对撞机来忽略对方。但是当你重生敌人时,你并不是在重置机器人与对撞机之间的无知。你可以通过

Physics.IgnoreCollision(collision.collider, GetComponent<Collider>(), true/false);

其中,意味着对撞机会忽略对方,而平均对撞机会相互碰撞。

在链接中阅读更多关于Physics.IgnoreCollision的信息。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60033361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档