如图所示,Unity 中有一个基于图块的道路或人行道系统,如图所示,我会看到刚体在其接缝处移动时会出现小凹凸(即使对于相同的垂直位置和比例,并且在每个图块使用盒式碰撞器时也是如此)。有没有好的方法,例如将碰撞网格合并为一个超级简化且全平面的网格?我没有运气,例如导出为对象(都不使用我的网格简化器),因为在重新导入并摆脱单个盒子碰撞器时,明显的小凹凸仍然存在。我的要求并不是它必须是实时的(尽管如果没有缺点的话,这将是一个优点)。谢谢!
你可以试试网格.组合网格把所有的小对撞机变成一个大对撞机。
[RequireComponent(typeof(MeshCollider))]
public class MeshCompositeCollider : MonoBehaviour
{
void Start()
{
var meshColliders = GetComponentsInChildren<MeshCollider>();
var combine = new CombineInstance[meshColliders.Length];
for (int i = 0; i < meshColliders.Length; i++)
{
combine[i].mesh = meshColliders[i].sharedMesh;
combine[i].transform = meshColliders[i].transform.localToWorldMatrix;
meshColliders[i].enabled = false;
}
var compositeMesh = new Mesh();
compositeMesh.CombineMeshes(combine);
//WeldVertices(compositeMesh);
GetComponent<MeshCollider>().sharedMesh = compositeMesh;
GetComponent<MeshCollider>().enabled = true;
}
}
需要注意的一件事:生成的组合网格位于世界空间坐标中,因此如果附加到的游戏对象有任何变换更改,它们也将被应用。
如果你有 MeshCollider -> Cooking Options -> 这可能就足够了焊接共置顶点启用它应该合并具有相同位置的顶点。
如果没有,您可以尝试weld自己检查顶点,看看是否可以解决问题。
public static void WeldVertices(Mesh aMesh, float aMaxDistDelta = 0.01f)
{
var aMaxDelta = aMaxDistDelta * aMaxDistDelta;
var verts = aMesh.vertices;
List<int> newVerts = new List<int>();
int[] map = new int[verts.Length];
// create mapping and filter duplicates.
for (int i = 0; i < verts.Length; i++)
{
var p = verts[i];
bool duplicate = false;
for (int i2 = 0; i2 < newVerts.Count; i2++)
{
int a = newVerts[i2];
if ((verts[a] - p).sqrMagnitude <= aMaxDelta)
{
map[i] = i2;
duplicate = true;
break;
}
}
if (!duplicate)
{
map[i] = newVerts.Count;
newVerts.Add(i);
}
}
// create new vertices
var verts2 = new Vector3[newVerts.Count];
for (int i = 0; i < newVerts.Count; i++)
{
int a = newVerts[i];
verts2[i] = verts[a];
}
// map the triangle to the new vertices
var tris = aMesh.triangles;
for (int i = 0; i < tris.Length; i++)
{
tris[i] = map[tris[i]];
}
aMesh.Clear();
aMesh.vertices = verts2;
aMesh.triangles = tris;
}
Here is an example (before and after): Above 6 colliders with clear gaps, below 1 collider with no gaps.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)