Beispiel #1
0
        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;
                    }
                }
            }
        }
    }
Beispiel #3
0
 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);
         }
     }
 }