1

我正在使用运行时 Gizmo 来翻译游戏中的游戏对象。我需要知道如何以不规则的形状夹住物体的运动。

例如:如果形状是 Box。

我可以n 计算此形状的边界,并使用 Bounds.max.x、Bounds.min.x、Bounds.max.y、Bounds.min.y、Bounds.max.z、Bounds.min.z 并将位置固定为这个:

Vector3 pos = gameObject.transform.position;

pos.x = Mathf.Clamp(pos.x,Bounds.min.x,Bounds.max.x);

pos.y = Mathf.Clamp(pos.y,Bounds.min.y,Bounds.max.y);

pos.x = Mathf.Clamp(pos.z,Bounds.min.z,Bounds.max.z);

gameObject.transform.position = pos;

这一切都很好,直到它是一个盒子或一个矩形,因为我可以使用 Renderer.Bounds 或 Collider.Bounds,但是,如果它是这样的不规则形状:

和我计算边界值,这将是不正确的,因为边界框/边界将始终以正方形/框形状计算,并且会给出不正确的最大值和最小值,从而使游戏对象超出形状。

我正在使用下面的 RuntimeGizmo 来翻译我的游戏对象。https://github.com/HiddenMonk/Unity3DRuntimeTransformGizmo

ps 在我的例子中,Shape 是一个方形和一个 L 形的房间,由原始立方体作为墙壁制成。有问题的游戏对象是一件家具。

4

0 回答 0