由於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 = 0; i < normals.Length; ++i)
{
normals[i] = -normals[i];
}
mesh2.normals = normals;
for (int i = 0; i < mesh2.subMeshCount; ++i)
{
int[] triangles = mesh2.GetTriangles(i);
for (int j = 0; j < triangles.Length; j += 3)
{
int temp = triangles[j];
triangles[j] = triangles[j + 1];
triangles[j + 1] = temp;
}
mesh2.SetTriangles(triangles, i);
}
gameObject.AddComponent<MeshCollider>().sharedMesh = mesh2;
}
}
也可以參考Unity提供的API: Physics.queriesHitBackfaces