【问题标题】:Unity 2D C# - no collision inside an objectUnity 2D C# - 对象内部没有碰撞
【发布时间】:2016-12-23 18:38:33
【问题描述】:

我想知道,如何在对象内部不发生碰撞。 我有一个大圆圈,圆圈内是一个较小的正方形。游戏开始时,圆圈正在缩小。 我想要的是检查碰撞,如果圆圈接触或在正方形内。

你能帮帮我吗?谢谢

【问题讨论】:

  • 圆和正方形的圆心相同吗?因为如果是这样,您可以使用基本的数学运算,根本不需要任何碰撞检测。
  • 是的,他们有相同的中心。还有一件事,我想提的是关于改变游戏对象的精灵。圆可以在三角形或正方形等几何东西上改变
  • 但是没关系,如果你告诉我如何检测这两个物体的碰撞(方形 - 圆形)

标签: c# collision-detection collision unity3d-2dtools unity3d-gui


【解决方案1】:

据我所知,在 Unity 中没有内置的方法来实现这一点(也没有内置的方法来检测对撞机是否完全在另一个对撞机内)。

如果我对你的理解正确,你的圈子会缩小,当它到达这一点时

你想做某事例如执行一些代码

仅基于数学,您可以使其适用于圆形和方形的方法是:

如果你的正方形边的长度为a,而你的圆的半径为r,那么此时你在上图中看到它们两者之间的关系是:

r = a / sqrt(2)

因此您可以在Update 函数中检查if (r <= a / Mathf.Sqrt(2)),并基于该调用某个函数。 (也许添加另一个布尔值以确保该函数只被调用一次。)

您可以使用

获取精灵宽度
width = GetComponent<SpriteRenderer>().bounds.size.x;

你的圆的半径显然是圆形精灵宽度的一半。

您可能还应该将SpriteRenderer 存储在一个变量中一次,而不是在每一帧上调用GetComponent

等边三角形的方程是

r = a / sqrt(3)

其中a 是三角形边的长度。

【讨论】:

  • 哦,非常感谢。那么那个三角形呢?如果三角形将在那里而不是正方形(大圆圈 - 较小的三角形)
  • 嗯,这将取决于特定的三角形形状。是等边三角形吗?
  • 是的,那个三角形
  • @CallMany 我也将其添加到答案中。
  • @CallMany 你确定你把你的圆形精灵宽度除以二来得到半径吗?如果你不这样做,你将简单地使用直径而不是半径来计算,只要你乘以 sqrt(2) 而不是除以。
猜你喜欢
  • 2018-02-18
  • 1970-01-01
  • 2015-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-31
相关资源
最近更新 更多