private void CreateSelectionIndicators(RuntimeSurfaceGeometry surface, bool isfloor) { var vertices = surface.GetComponent <MeshCollider>().sharedMesh.vertices; var localToWorldMatrix = surface.transform.localToWorldMatrix; for (var i = 0; i < vertices.Length; i++) { var currentVertexWorldPosition = localToWorldMatrix.MultiplyPoint(vertices[i]); Vector3 previousVertexWorldPosition; Vector3 nextVertexWorldPosition; if (isfloor) { previousVertexWorldPosition = localToWorldMatrix.MultiplyPoint(vertices[i >= 1 ? i - 1 : vertices.Length - 1]); nextVertexWorldPosition = localToWorldMatrix.MultiplyPoint(vertices[i < vertices.Length - 1 ? i + 1 : 0]); } else { previousVertexWorldPosition = localToWorldMatrix.MultiplyPoint(vertices[i < vertices.Length - 1 ? i + 1 : 0]); nextVertexWorldPosition = localToWorldMatrix.MultiplyPoint(vertices[i >= 1 ? i - 1 : vertices.Length - 1]); } selectionVisualizationIndicators.Add(GeometryUtilities.CreateSurfaceSelectionIndicator($"Vertex ({i})", surface.transform, currentVertexWorldPosition, nextVertexWorldPosition, previousVertexWorldPosition)); } }
protected override void AssembleEntity() { base.AssembleEntity(); var floorRoot = new GameObject($"Floor (polygon: {NativeIndex})"); FloorSurface = floorRoot.AddComponent <RuntimeSurfaceGeometry>(); FloorSurface.InitializeRuntimeSurface(this, DataSources.Floor); floorRoot.transform.SetParent(transform); var ceilingRoot = new GameObject($"Ceiling (polygon: {NativeIndex})"); CeilingSurface = ceilingRoot.AddComponent <RuntimeSurfaceGeometry>(); CeilingSurface.InitializeRuntimeSurface(this, DataSources.Ceiling); ceilingRoot.transform.SetParent(transform); if (NativeObject.MediaIndex >= 0) { var mediaRoot = new GameObject($"Media (polygon: {NativeIndex})"); MediaSurface = mediaRoot.AddComponent <RuntimeSurfaceGeometry>(); MediaSurface.InitializeRuntimeSurface(this, DataSources.Media); mediaRoot.transform.SetParent(transform); } }