using System.Collections; using System.Collections.Generic; using UnityEngine; using MuHua; public class PrefabPlate : MonoBehaviour, ITemplate { public Transform DesignPointParent; public Transform DesignPointTemplate; public Transform PlateEdgeParent; public Transform PlateEdgeTemplate; private DataPlate value; private Vector3 localPosition; public MeshFilter MeshFilter => GetComponent(); public MeshCollider MeshCollider => GetComponent(); public ModuleViewCamera viewCamera => ModuleCore.I.PlateDesignViewCamera; public void SetValue(DataPlate value) { this.value = value; localPosition = viewCamera.CurrentViewSpaceCenter; value.OnChange += DataPlate_OnChange; value.Compute(); } private void OnDestroy() { value.OnChange -= DataPlate_OnChange; } public void DataPlate_OnChange() { CreateDesignPoint(); //CreatePrefabEdgePoint(); CreatePolygonMesh(); //重置坐标 transform.localPosition = localPosition + value.centerOffset; localPosition = transform.localPosition; } /// 生成设计点 private void CreateDesignPoint() { DesignPointParent.Instantiate(DesignPointTemplate, value.designPoints); } /// 生成边缘点 private void CreatePrefabEdgePoint() { PlateEdgeParent.DestroySon(PlateEdgeTemplate); for (int i = 0; i < value.edgePoints.Count; i++) { Transform temp = Instantiate(PlateEdgeTemplate, PlateEdgeParent); temp.gameObject.SetActive(true); PrefabPlateEdge plateEdge = temp.GetComponent(); plateEdge.SetValue(i, value); } } /// 生成网格 private void CreatePolygonMesh() { Mesh mesh = new Mesh(); mesh.vertices = value.vertices.ToArray(); mesh.uv = value.uv.ToArray(); mesh.triangles = value.triangles.ToArray(); mesh.RecalculateBounds(); mesh.RecalculateNormals(); mesh.RecalculateTangents(); MeshFilter.mesh = mesh; MeshCollider.sharedMesh = mesh; } }