void Update() { if (MeshAdded) { MeshAdded = false; var prefabMeshes = DeformedMesh.DMBranches[DeformedMesh.SplinePlus.SPData.Selections._BranchKey].PrefabMeshes; var prefabMesh = new PrefabMesh(); prefabMesh.Prefab = NewMeshAdded; prefabMesh.LayerName = NewMeshAdded.name; var importedMat = prefabMesh.Prefab.GetComponent <MeshRenderer>().sharedMaterial; if (importedMat != null) { prefabMesh.Material = importedMat; } else { prefabMesh.Material = (Material)EditorGUIUtility.Load("Assets/ElseForty/Assets/Materials/Base.mat"); } prefabMeshes.Add(prefabMesh); DeformedMesh._Layer = prefabMeshes.Count - 1; UpdateMaterials(); DeformedMesh.IsUpdateBase = true; DeformedMesh.DrawMeshOnEachBranch(); } }
void DuplicateMeshLayer() { var prefabMeshes = DeformedMesh.DMBranches[DeformedMesh.SplinePlus.SPData.Selections._BranchKey].PrefabMeshes; var origMeshLayer = prefabMeshes[DeformedMesh._Layer]; var prefabMesh = new PrefabMesh(); prefabMesh.Prefab = origMeshLayer.Prefab; prefabMesh.LayerName = origMeshLayer.Prefab.name; prefabMesh.UniqueMat = origMeshLayer.UniqueMat; prefabMesh.Material = origMeshLayer.Material; prefabMesh._mat = origMeshLayer._mat; prefabMesh.RandomOffset = origMeshLayer.RandomOffset; prefabMesh.RandomRotation = origMeshLayer.RandomRotation; prefabMesh.RandomScale = origMeshLayer.RandomScale; prefabMesh.Offset = origMeshLayer.Offset; prefabMesh.Rotation = origMeshLayer.Rotation; prefabMesh.Scale = origMeshLayer.Scale; prefabMesh.UniformScale = origMeshLayer.UniformScale; prefabMesh.ROffset = origMeshLayer.ROffset; prefabMesh.RRotation = origMeshLayer.RRotation; prefabMesh.RScale = origMeshLayer.RScale; prefabMesh.RUniformScale = origMeshLayer.RUniformScale; prefabMesh.Uniform = origMeshLayer.Uniform; prefabMesh.Tiling = origMeshLayer.Tiling; prefabMesh.Spacing = origMeshLayer.Spacing; prefabMesh.RandomSpacing = origMeshLayer.RandomSpacing; prefabMesh.LinkedSpacing = origMeshLayer.LinkedSpacing; prefabMesh.Placement = origMeshLayer.Placement; prefabMesh.LockRot = origMeshLayer.LockRot; prefabMesh.LockRotation = origMeshLayer.LockRotation; prefabMesh._Axis = origMeshLayer._Axis; prefabMesh._DeformationType = origMeshLayer._DeformationType; prefabMesh.Mirror = origMeshLayer.Mirror; prefabMesh.MirrorOffset = origMeshLayer.MirrorOffset; prefabMesh._MirrorAxis = origMeshLayer._MirrorAxis; prefabMesh.Visible = origMeshLayer.Visible; prefabMeshes.Add(prefabMesh); DeformedMesh._Layer = prefabMeshes.Count - 1; UpdateMaterials(); DeformedMesh.IsUpdateBase = true; DeformedMesh.DrawMeshOnEachBranch(); }
Mesh MeshDeformation(Mesh mesh, Branch branch, DMBranch dMBranch, PrefabMesh prefabMesh, int n) { var newVertices = new Vector3[mesh.vertices.Length]; float verDistOnAxis = 0; Vector3 VerPosOnAxis = Vector3.zero; for (int i = 0; i < newVertices.Length; i++) { verDistOnAxis = dMBranch.PrefabMeshes[n].VerticesPosition[i].z; VerPosOnAxis = dMBranch.PrefabMeshes[n].VerticesPosition[i]; if (prefabMesh._MeshTrim == MeshTrim.Both) { VerPosOnAxis.z = 0; } else if (prefabMesh._MeshTrim == MeshTrim.Left) { if (verDistOnAxis > 0) { VerPosOnAxis.z = 0; } } else if (prefabMesh._MeshTrim == MeshTrim.Right) { if (verDistOnAxis < branch.BranchDistance) { VerPosOnAxis.z = 0; } if (verDistOnAxis > branch.BranchDistance) { VerPosOnAxis.z -= branch.BranchDistance; } } else { if (verDistOnAxis > 0 && verDistOnAxis < branch.BranchDistance) { VerPosOnAxis.z = 0; } if (verDistOnAxis > branch.BranchDistance) { VerPosOnAxis.z -= branch.BranchDistance; } } var distanceData = DistanceDataClass.DataExtraction(branch, verDistOnAxis); newVertices[i] = (distanceData.Rotation * VerPosOnAxis) + distanceData.Position; } mesh.vertices = newVertices; return(mesh); }