/// <summary> /// Set the visuals of <pararef name="partObject"/> to use <paramref name="meshDetails"/>. /// </summary> /// <param name="partObject">The part object</param> /// <param name="meshDetails">The mesh details.</param> /// <remarks> /// Adds multiple children to <paramref name="partObject"/> when <paramref name="meshDetails"/> /// contains multiple mesh objects. /// </remarks> protected virtual void SetMesh(ShapeComponent partObject, MeshCache.MeshDetails meshDetails) { // Clear all children as a hard reset. foreach (Transform child in partObject.GetComponentsInChildren <Transform>()) { if (child.gameObject != partObject.gameObject) { child.parent = null; GameObject.Destroy(child.gameObject); } } // Add children for each mesh sub-sub-part. int subPartNumber = 0; foreach (Mesh mesh in meshDetails.FinalMeshes) { GameObject partMesh = new GameObject(); partMesh.name = string.Format("sub-part{0}", subPartNumber); partMesh.transform.localPosition = meshDetails.LocalPosition; partMesh.transform.localRotation = meshDetails.LocalRotation; partMesh.transform.localScale = meshDetails.LocalScale; MeshFilter filter = partMesh.AddComponent <MeshFilter>(); filter.sharedMesh = mesh; MeshRenderer renderer = partMesh.AddComponent <MeshRenderer>(); renderer.material = meshDetails.Material; renderer.material.color = partObject.Colour; partMesh.transform.SetParent(partObject.transform, false); ++subPartNumber; } }