动态修改 MeshCollider

2023-11-02

借鉴
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);

        }

    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

动态修改 MeshCollider 的相关文章

随机推荐