public void Generate(int resolutionIndex, int resolution, bool forceRegenerate) { CubeMeshGenerator.CubeData cubeData = null; Mesh currentMesh = meshes[resolutionIndex]; if (forceRegenerate || !meshesInitialized[resolutionIndex]) { lock (_lock) { cubeData = meshGenerator.GenerateCube(resolution); } } Dispatcher.InvokeAsync(() => { if (this == null) { return; } if (colliderEnabled == physicsCollider.isTrigger) { physicsCollider.isTrigger = !colliderEnabled; } if (cubeData != null) { if (colliderEnabled) { float minh = cubeData.minmax.x, maxh = cubeData.minmax.y; colliderRadiuses[resolutionIndex] = minh + (maxh - minh) * .9f; } currentMesh.Clear(); currentMesh.vertices = cubeData.vertices; currentMesh.triangles = cubeData.triangles; currentMesh.uv = cubeData.uvs; currentMesh.RecalculateNormals(); currentMesh.RecalculateTangents(); meshesInitialized[resolutionIndex] = true; } if (colliderEnabled) { physicsCollider.radius = colliderRadiuses[resolutionIndex]; } filter.sharedMesh = meshes[resolutionIndex]; region.root.NotifyRendered(); }); }
public void Generate() { var promise = new Future <CubeMeshGenerator.CubeData>(); promise.OnSuccess(cubeDataFuture => { var cubeData = cubeDataFuture.value; mesh.Clear(); mesh.vertices = cubeData.vertices; mesh.triangles = cubeData.triangles; mesh.uv = cubeData.uvs; mesh.RecalculateNormals(); // mesh.RecalculateBounds(); mesh.RecalculateTangents(); }); promise.Process(() => g.GenerateCube(resolution)); }