无间隙地旋转和定位一排游戏对象

问题描述 投票:0回答:1

我有一个预制的房子,上面有一条路,像这样:

我想将它们并排布置以创建一条街道,但我也想让它们倾斜一个小角度,这样这条路似乎一直延伸到远处。更像是这样的:

我已经能够放置它们并旋转它们,但我在确定位置时遇到了很多麻烦。我猜有一些我没有应用的数学技巧之类的。

到目前为止这是我的代码:

        int houseCount = 0;
        float offsetX = 0;
        float offsetZ = 0;
        while (houseCount < 30)
        {
            GameObject house = GameObject.Instantiate(housePrefab);
            house.transform.Rotate(new Vector3(0,-20f,0), Space.Self);
            house.transform.position = new Vector3(offsetX, 0, offsetZ);

            // Calculate offset for next house
            HouseUnit unit = house.GetComponent<HouseUnit>();
            MeshRenderer renderer = unit.GetHouseBase().GetComponent<MeshRenderer>();
            Vector3 size = renderer.bounds.size;
            offsetX += size.x;
            offsetZ += size.z / 2f;

            Debug.Log(size);
            houseCount++;
        }

unit.GetHouseBase()
返回路段,这是一个简单的平面。我认为这是定位的最合乎逻辑的部分,因为它是 a) 最宽的部分,b) 我需要连接的部分。

运行它会得到以下结果:

他们并没有排得太糟糕,但我不知道如何缩小差距。有没有人有任何建议或资源可以指点我?提前致谢。

c# unity-game-engine rotation position gameobject
1个回答
0
投票

renderer.bounds
是世界空间中的边界框,因此如果旋转渲染器,边界也会发生变化。您可以尝试
renderer.localBounds
Mesh.bounds
,这些属性返回局部空间中的边界框。但请注意它们是可变的,通常由所有顶点计算,这意味着它们不能保证准确。如果还是发现有缝隙,可以用内置的立方体手动测量道路的宽度,它的宽度是1.

© www.soinside.com 2019 - 2024. All rights reserved.