我正在使用运行时 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 形的房间,由原始立方体作为墙壁制成。有问题的游戏对象是一件家具。