MeshCollider双面化脚本

时间:2023-03-09 15:19:44
MeshCollider双面化脚本

由于MeshCollider组件可以挂载多个,所以不需要Mesh重新合并了。

除了反转法线还需要反转所有三角面的顺序

脚本如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine; public class DoubleSideMeshCollider : MonoBehaviour
{
public MeshCollider meshCollider; void Start()
{
var mesh1 = meshCollider.sharedMesh;
var mesh2 = Instantiate(mesh1); var normals = mesh2.normals;
for (int i = ; i < normals.Length; ++i)
{
normals[i] = -normals[i];
}
mesh2.normals = normals; for (int i = ; i < mesh2.subMeshCount; ++i)
{
int[] triangles = mesh2.GetTriangles(i);
for (int j = ; j < triangles.Length; j += )
{
int temp = triangles[j];
triangles[j] = triangles[j + ];
triangles[j + ] = temp;
}
mesh2.SetTriangles(triangles, i);
} gameObject.AddComponent<MeshCollider>().sharedMesh = mesh2;
}
}

MeshCollider双面化脚本

相关文章