我正在使用运行时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,但是,如果它是这样的不规则形状:
计算Bounds值,它将是不正确的,因为Bounding box / bounds将始终以方形/盒形状计算并且将给出不正确的max和min值,使得gameObject超出形状。
我使用下面的RuntimeGizmo来翻译我的gameObject。 https://github.com/HiddenMonk/Unity3DRuntimeTransformGizmo
P.S。在我的情况下,形状是一个方形和一个L形的房间,通过使用原始立方体作为墙壁。有问题的游戏对象是一件家具。