// Update is called once per frame void LateUpdate() { if (_editingPoints) { return; } if (Application.isPlaying && !_skinnedMeshRenderer.isVisible) { return; } if (controlPoints == null || points == null) { return; } if (!_editingPoints && controlPoints.Length > 0) { count = controlPoints.Length; if (vertices == null || vertices.Count != _skinnedMeshRenderer.sharedMesh.vertexCount) { vertices.Clear(); _skinnedMeshRenderer.sharedMesh.GetVertices(vertices); } else { _skinnedMeshRenderer.sharedMesh.GetVertices(vertices); } updateControlPoints = false; for (c = 0; c < count; c++) { if (!updateControlPoints) { if (vertices[c] != points.GetPoint(controlPoints[c])) { updateControlPoints = true; } } if (updateControlPoints) { vertices[c] = points.GetPoint(controlPoints[c]); } } if (updateControlPoints) { _skinnedMeshRenderer.sharedMesh.SetVertices(vertices); } } }
public void UpdateControlPoints() { count = controlPoints.Length; if (vertices == null || vertices.Length != _skinnedMeshRenderer.sharedMesh.vertexCount) { #if UNITY_2020_1_OR_NEWER using (var dataArray = Mesh.AcquireReadOnlyMeshData(_skinnedMeshRenderer.sharedMesh)) { var data = dataArray[0]; if (vertices != null && vertices.IsCreated) { vertices.Dispose(); } vertices = new NativeArray <Vector3>(skinnedMeshRenderer.sharedMesh.vertexCount, Allocator.Persistent); data.GetVertices(vertices); } #else if (vertices != null && vertices.IsCreated) { vertices.Dispose(); } vertices = new NativeArray <Vector3>(skinnedMeshRenderer.sharedMesh.vertices, Allocator.Persistent); #endif } updateControlPoints = false; for (c = 0; c < count; c++) { currentControlPoint = points.GetPoint(controlPoints[c]); if (vertices[c].x != currentControlPoint.x || vertices[c].y != currentControlPoint.y || vertices[c].z != currentControlPoint.z) { updateControlPoints = true; vertices[c] = currentControlPoint; } } if (updateControlPoints) { _skinnedMeshRenderer.sharedMesh.SetVertices(vertices); } }
// Update is called once per frame void LateUpdate() { if (skinnedMeshRenderer != null && skinnedMeshRenderer.sharedMesh != null && controlPoints != null && controlPoints.Length > 0) { for (int i = 0; i < controlPoints.Length; i++) { if (points != null) { if (vertices == null || vertices.Length != skinnedMeshRenderer.sharedMesh.vertexCount) { vertices = new Vector3[skinnedMeshRenderer.sharedMesh.vertexCount]; vertices = skinnedMeshRenderer.sharedMesh.vertices; } vertices[i] = points.GetPoint(controlPoints[i]); } } skinnedMeshRenderer.sharedMesh.vertices = vertices; } }