我在做一个魔方模拟器。为了使侧面转动,我在每一边都有一个对撞机,我让对撞机把它们里面的所有东西都按一下,然后只转动侧面。

为了获取对撞机中的每个对象,我使用Physics.OverlapBox,并将除其他外的所有对象都放在如下列表中:
public List<GameObject> children = new List<GameObject>();
private void Awake()
{
UpdateCubes();
}
void UpdateCubes()
{
Mesh mesh = GetComponent<MeshFilter>().mesh;
children.Clear();
foreach (Collider child in Physics.OverlapBox(transform.localPosition,
Vector3.Scale(mesh.bounds.size, transform.lossyScale) / 2, transform.rotation))
{
if (!child.transform.CompareTag("Side"))
{
children.Add(child.gameObject);
}
}
}问题是:Physics.OverlapBox看起来太大了,因为它获取了所有立方体和一些奇怪的丢失的游戏对象,如下所示:

我尝试过将transform.localScale / 2更改为transform.lossy Scale / 2,但它不起作用。我该怎么办?
发布于 2020-10-07 16:12:01
我让它起作用了!来自其他方面的碎片与其他方面重叠,因为它们是如此接近。我通过在它们之间加上更多的补偿来解决这个问题。
发布于 2020-10-06 21:18:22
两种变换尺度(有损和局部)都是乘子而不是单位,而OverlapBox使用单位来表示它的位置和大小。如果你的比例尺是1,网格大小是0.1,那么这个对象占用0.1单位,而不是1。为了确保你是准确的,你需要使用Mesh.bounds.size并乘以transform.lossyScale。这将给你准确的大小单位。
https://stackoverflow.com/questions/64226799
复制相似问题