0

我正在做一个魔方模拟器。为了让两边转动,我在每一边都有一个碰撞器,我让碰撞器在点击时成为它们内部的所有东西的父级,然后转动侧面。

一侧的图片

为了得到碰撞器中的每个对象,我使用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 / 2transform.lossy Scale / 2但它不起作用。我该怎么办?

4

2 回答 2

0

两种变换比例(有损和局部)都是乘数而不是单位,而 OverlapBox 使用单位来表示它的位置和大小。如果您的比例为 1 且网格大小为 0.1,则对象占用 0.1 个单位,而不是 1。为确保准确,您需要使用 Mesh.bounds.size 并将其乘以 transform.lossyScale。这将为您提供准确的单位尺寸。

于 2020-10-06T21:18:22.843 回答
0

我让它工作了!另一边的碎片因为靠得太近而与另一边重叠。我通过在它们之间放置更多偏移来修复它。

于 2020-10-07T16:12:01.700 回答