【问题标题】:Check the Collision2D without a Rigidbody2D检查没有 Rigidbody2D 的 Collision2D
【发布时间】:2015-12-15 23:30:54
【问题描述】:

所以我的场景中有很多正方形(大约 200-300)。他们移动了一点,他们不需要互相遮盖。计算机很难将Rigidbody2D 添加到它们。我尝试在每个对象上添加BoxCollider2DMesh Colliders,并在脚本中添加代码OnCollisionEnter2D,但它不起作用。 Convex MeshColliders 不起作用(我想在 2D 时。为什么?)。那么如果不使用Rigidbody,我该如何处理呢? Collider2D的使用方式不对吗?

编辑:

首先,我很抱歉我的英语不好。

第二,我要感谢大家的回答。这些都是很好的参考资料,我会花很多时间来深入了解。 我找到了答案,它是quadtreethis page中有一个很好的例子/教程

【问题讨论】:

  • 当有很多实体交互时,如果你只想知道碰撞,你可以实现自己的算法,比如quadtrees。有一个很好的例子/教程in this page,pd。我不知道 OnCollisionEnter2D 是否使用这种方法
  • 哦,非常感谢!这正是我要找的:)

标签: unity3d unityscript unity3d-2dtools unity5


【解决方案1】:

“计算机很难将 Rigidbody2D 添加到它们。”你的意思是它有性能成本吗?

刚体用于检测碰撞。您不需要碰撞的两侧都具有刚体。例如,如果您的场景中有 100 个方格作为障碍物,如果您的玩家对象(例如作为球的圆)具有刚体组件,您可能会发生碰撞。本例中,小球需要CircleCollider2D+Rigidbody2D,障碍物只需要BoxCollider2D。

【讨论】:

  • 是的,如果我添加大约 80 个 Rigidbody2D,场景加载会非常缓慢。游戏不需要支持physics2D。
  • 如果只有一侧的碰撞部分,物理也起作用。对于 2D,所有对撞机都必须具有“2D”后置修复。因为 Unity 的 2D 物理引擎是 Box2D 而 3D 物理引擎是 PhysX,所以不能混合效果(例如 Rigidbody2D 不会与 SphereCollider 发生碰撞)。
【解决方案2】:

您应该使用盒子碰撞器而不是网格碰撞器。通过这种方式,您可以获得更多的性能。并且应该检查对撞机的“Is Trigger”属性。也应该检查刚体组件的“运动学”属性。通过这种方式,场景中的所有游戏对象都会相互检测碰撞。

OnTriggerEnter2D() 函数可以帮助您捕捉场景中游戏对象之间的碰撞检测。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-10
    • 2016-12-08
    相关资源
    最近更新 更多