借鉴
https://www.cnblogs.com/imteach/p/10348744.html
using System.Collections.Generic;
using UnityEngine;
//[RequireComponent(typeof(SkinnedMeshRenderer), typeof(MeshCollider))]
public class DynamicMeshCollider : MonoBehaviour
{
[Header("渲染的物体")]
[SerializeField]
private SkinnedMeshRenderer[] skinnedMeshRenderer;
private List<Mesh> mesh;
private List<MeshCollider> meshCollider;
// Use this for initialization
void Awake()
{
//skinnedMeshRenderer = transform.GetChild(0).GetComponent<SkinnedMeshRenderer>();
Init();
}
// Update is called once per frame
void Update()
{
for (int i = 0; i < skinnedMeshRenderer.Length; i++)
{
skinnedMeshRenderer[i].BakeMesh(mesh[i]);
meshCollider[i].sharedMesh = mesh[i];
}
}
private void Init()
{
mesh = new List<Mesh>();
meshCollider = new List<MeshCollider>();
for (int i = 0; i < skinnedMeshRenderer.Length; i++)
{
if (!skinnedMeshRenderer[i].transform.GetComponent<MeshCollider>())
{
skinnedMeshRenderer[i].transform.gameObject.AddComponent<MeshCollider>();
}
meshCollider.Add(skinnedMeshRenderer[i].transform.GetComponent<MeshCollider>());
mesh.Add(Instantiate(skinnedMeshRenderer[i].sharedMesh) as Mesh);
skinnedMeshRenderer[i].transform.localScale = Vector3.one;
skinnedMeshRenderer[i].transform.localPosition = Vector3.zero;
skinnedMeshRenderer[i].transform.localRotation = Quaternion.Euler(Vector3.zero);
}
}
}