public static void UpdateBounds(HLOD hlod) { var renderers = hlod.GetComponentsInChildren <Renderer>(); Bounds bounds = renderers[0].bounds; for (int i = 0; i != renderers.Length; i++) { bounds.Encapsulate(renderers[i].bounds); } var lodgroup = hlod.GetComponent <LODGroup>(); lodgroup.size = bounds.size.magnitude; lodgroup.localReferencePoint = lodgroup.transform.InverseTransformPoint(bounds.center); }
public void HlodControllerIsNotNull() { Assert.NotNull(hlod.GetComponent <HLODControllerBase>()); }
public void ComponentTest() { Assert.NotNull(m_hlodGameObject); Assert.NotNull(m_hlod); Assert.NotNull(m_hlod.GetComponent <AddressableHLODController>()); }
public static void GenerateCombinedMesh(HLOD hlod, Transform sourceLOD, Transform generatedLOD, int lodIndex, List <Mesh> generatedMeshes) { const float fieldOfView = 60.0F; const float distanceBias = 0.0F; var instances = new Dictionary <Material, List <CombineInstance> >(); var lodGroups = sourceLOD.GetComponentsInChildren <LODGroup>(); var hlodSwitchDistance = LODGroupExtensions.CalculateLODSwitchDistance(fieldOfView, hlod.GetComponent <LODGroup>(), lodIndex - 1); foreach (var group in lodGroups) { float cullingDistance = LODGroupExtensions.CalculateLODSwitchDistance(fieldOfView, group, group.lodCount - 1); if (cullingDistance + distanceBias < hlodSwitchDistance) { continue; } var renderers = group.GetLODs()[group.lodCount - 1].renderers; foreach (var renderer in renderers) { var meshRenderer = renderer as MeshRenderer; if (meshRenderer == null) { continue; } var instance = new CombineInstance(); instance.transform = generatedLOD.worldToLocalMatrix * renderer.transform.localToWorldMatrix; var materials = meshRenderer.sharedMaterials; for (int m = 0; m != materials.Length; m++) { if (!instances.ContainsKey(materials[m])) { instances[materials[m]] = new List <CombineInstance>(); } instance.mesh = meshRenderer.GetComponent <MeshFilter>().sharedMesh; instance.subMeshIndex = m; instances[materials[m]].Add(instance); } } } while (generatedLOD.childCount != 0) { Object.DestroyImmediate(generatedLOD.GetChild(0).gameObject); } var generatedRenderers = new List <Renderer>(); foreach (var instance in instances) { var mesh = new Mesh(); mesh.name = "CombinedLowLOD"; mesh.CombineMeshes(instance.Value.ToArray(), true, true, false); var go = new GameObject("CombinedLowLOD", typeof(MeshRenderer), typeof(MeshFilter)); go.GetComponent <MeshFilter>().sharedMesh = mesh; go.GetComponent <MeshRenderer>().sharedMaterial = instance.Key; generatedRenderers.Add(go.GetComponent <MeshRenderer>()); generatedMeshes.Add(mesh); go.transform.SetParent(generatedLOD, false); } var lodGroup = generatedLOD.GetComponent <LODGroup>(); var lods = lodGroup.GetLODs(); lods[0].renderers = generatedRenderers.ToArray(); lodGroup.SetLODs(lods); }