protected CullingArea_Manual CreateOcclusionArea(Transform rendererChild) { Transform occlusionChild = OcclusionAreaParent.gameObject.FindOrCreateChild(rendererChild.name); occlusionChild.transform.rotation = Quaternion.identity; //occlusion bounds don't respect rotation CullingArea_Manual occlusionArea = occlusionChild.gameObject.GetOrAdd <CullingArea_Manual> (); //resize the occlusion area to fit Renderer[] occlusionAreaRenderers = rendererChild.GetComponentsInChildren <Renderer> (true); Bounds combinedBounds = new Bounds(rendererChild.position, Vector3.one); foreach (Renderer occlusionAreaRenderer in occlusionAreaRenderers) { combinedBounds.Encapsulate(occlusionAreaRenderer.bounds); } occlusionArea.transform.position = combinedBounds.center; occlusionArea.transform.localScale = combinedBounds.size; occlusionArea.gizmoColor = Colors.RandomColor(0.25f); return(occlusionArea); }
void EnableGroupsFromCollider(CullingArea_Manual area) { if (disableCullingForTest) { return; } //We are in this area, so enable all this areas settings! foreach (CullingAreaGroupSettings cullGroup in area.groupsList) { if (cullGroup.cullingOptions == CullingOptions.Show) { //This area want to show a certain group. Check it with the masterscript first foreach (CullingAreaGroupSettings liveCullGroup in allCullingGroups) { if (liveCullGroup.script == cullGroup.script) { if (!(liveCullGroup.cullingOptions == CullingOptions.AlwaysHide)) { liveCullGroup.cullingOptions = CullingOptions.Show; } break; } } } else if (cullGroup.cullingOptions == CullingOptions.AlwaysHide) { foreach (CullingAreaGroupSettings liveCullGroup in allCullingGroups) { if (liveCullGroup.script == cullGroup.script) { liveCullGroup.cullingOptions = CullingOptions.AlwaysHide; break; } } } } }
public void LinkOcclusionGroups( ) { //first make sure all the occlusion areas are created ModuleOcclusionAreas.Clear(); TransitionOcclusionAreas.Clear(); for (int i = 0; i < Modules.Count; i++) { ModuleOcclusionAreas.Add(CreateOcclusionArea(Modules [i].transform)); } for (int i = 0; i < Transitions.Count; i++) { TransitionOcclusionAreas.Add(CreateOcclusionArea(Transitions [i].transform)); } //now create links for every module for (int i = 0; i < Modules.Count; i++) { CullingArea_Manual occlusionArea = ModuleOcclusionAreas [i]; for (int j = 0; j < Modules.Count; j++) { CullingAreaGroupSettings groupSettings = new CullingAreaGroupSettings(); groupSettings.script = Modules [j].OcclusionGroup; if (i == j) { //for now, only show our own group groupSettings.cullingOptions = CullingOptions.Show; } else { groupSettings.cullingOptions = CullingOptions.AlwaysHide; } occlusionArea.groupsList.Add(groupSettings); } //now add the transitions = these are always on for (int k = 0; k < Transitions.Count; k++) { CullingAreaGroupSettings groupSettings = new CullingAreaGroupSettings(); groupSettings.script = Transitions [k].OcclusionGroup; groupSettings.cullingOptions = CullingOptions.Show; occlusionArea.groupsList.Add(groupSettings); } } //finally create links for every transition //transitions are always visible from all groups for (int i = 0; i < TransitionOcclusionAreas.Count; i++) { CullingArea_Manual occlusionArea = TransitionOcclusionAreas [i]; for (int j = 0; j < Modules.Count; j++) { CullingAreaGroupSettings groupSettings = new CullingAreaGroupSettings(); groupSettings.script = Modules [j].OcclusionGroup; groupSettings.cullingOptions = CullingOptions.AlwaysHide; occlusionArea.groupsList.Add(groupSettings); } for (int k = 0; k < Transitions.Count; k++) { CullingAreaGroupSettings groupSettings = new CullingAreaGroupSettings(); groupSettings.script = Transitions [k].OcclusionGroup; groupSettings.cullingOptions = CullingOptions.Show; occlusionArea.groupsList.Add(groupSettings); } } }