Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit e1c9cc5

Browse files
Fix HLOD update when deleting all scene objects; Clean up code/logging; Update submodule
1 parent b117812 commit e1c9cc5

File tree

7 files changed

+38
-35
lines changed

7 files changed

+38
-35
lines changed

‎Scripts/Editor/AutoLOD.cs‎

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -204,11 +204,10 @@ static void UpdateDependencies()
204204
if (sceneLODEnabled && !SceneLOD.activated)
205205
{
206206
if (!SceneLOD.instance)
207-
Debug.Log("SceneLOD failed to start");
207+
Debug.LogError("SceneLOD failed to start");
208208
}
209209
else if (!sceneLODEnabled && SceneLOD.activated)
210210
{
211-
Debug.Log("Destroying SceneLOD instance");
212211
UnityObject.DestroyImmediate(SceneLOD.instance);
213212
}
214213
#else

‎Scripts/Editor/Batchers/SimpleBatcher.cs‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ public IEnumerator Batch(GameObject go)
4343
var renderers = go.GetComponentsInChildren<Renderer>();
4444
var materials = new HashSet<Material>(renderers.SelectMany(r => r.sharedMaterials));
4545

46-
//foreach (var material in materials) { Debug.Log(material); }
4746
var textures = new HashSet<Texture2D>(materials.Select(m =>
4847
{
4948
if (m)

‎Scripts/Editor/SceneLOD.cs‎

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -111,8 +111,6 @@ void OnEnable()
111111
#if UNITY_2017_3_OR_NEWER
112112
if (LayerMask.NameToLayer(LODVolume.HLODLayer) == -1)
113113
{
114-
Dbg.LogWarning("Adding missing HLOD layer");
115-
116114
var layers = TagManager.GetRequiredLayers();
117115
foreach (var layer in layers)
118116
{
@@ -129,7 +127,7 @@ void OnEnable()
129127
if (s_Activated)
130128
AddCallbacks();
131129

132-
m_ServiceCoroutineQueue=null;
130+
ResetServiceCoroutineQueue();
133131
#endif
134132
}
135133

@@ -286,14 +284,9 @@ IEnumerator UpdateOctree()
286284
if (!m_RootVolume)
287285
{
288286
if (m_CreateRootVolumeForScene == SceneManager.GetActiveScene().name)
289-
{
290-
Dbg.Log("Creating root volume");
291287
m_RootVolume = LODVolume.Create();
292-
}
293288
else
294-
{
295289
yield break;
296-
}
297290
}
298291
}
299292

@@ -427,10 +420,12 @@ IEnumerator SetRootLODVolume()
427420

428421
void EditorUpdate()
429422
{
430-
if ((m_CoroutineQueue.Count > 0 || m_SceneDirty || (m_RootVolume && m_RootVolume.dirty)) && m_ServiceCoroutineQueue == null)
423+
if ((m_CoroutineQueue.Count > 0 || m_SceneDirty || (m_RootVolume && m_RootVolume.dirty))
424+
&& m_ServiceCoroutineQueue == null)
425+
{
431426
m_ServiceCoroutineQueue = MonoBehaviourHelper.StartCoroutine(ServiceCoroutineQueue());
427+
}
432428
}
433-
434429
IEnumerator ServiceCoroutineQueue()
435430
{
436431
m_ServiceCoroutineExecutionTime.Start();
@@ -445,8 +440,15 @@ IEnumerator ServiceCoroutineQueue()
445440
m_CoroutineQueue.Enqueue(m_RootVolume.UpdateHLODs());
446441

447442
while (m_CoroutineQueue.Count > 0)
443+
{
448444
yield return MonoBehaviourHelper.StartCoroutine(m_CoroutineQueue.Dequeue());
445+
}
449446

447+
ResetServiceCoroutineQueue();
448+
}
449+
450+
void ResetServiceCoroutineQueue()
451+
{
450452
m_ServiceCoroutineQueue = null;
451453
m_ServiceCoroutineExecutionTime.Reset();
452454
}

‎Scripts/Extensions/LODGroupExtensions.cs‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,10 @@ public static void SetRenderersEnabled(this LODGroup lodGroup, bool enabled)
2222
public static void SetEnabled(this LODVolume.LODGroupHelper lodGroupHelper, bool enabled)
2323
{
2424
var lodGroup = lodGroupHelper.lodGroup;
25-
if (lodGroup.enabled != enabled)
25+
if (lodGroup==null||lodGroup.enabled != enabled)
2626
{
27-
lodGroup.enabled = enabled;
27+
if (lodGroup)
28+
lodGroup.enabled = enabled;
2829
SetRenderersEnabled(lodGroupHelper.lods, enabled);
2930
}
3031
}

‎Scripts/Helpers/MonoBehaviourHelper.cs‎

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -226,12 +226,8 @@ IEnumerator ContinuallyFindObjects()
226226
counter++;
227227
renderers.Clear();
228228

229-
//yield return StartCoroutine(ObjectUtils.FindObjectsOfType(renderers), 5f);
230-
//Debug.Log(Time.renderedFrameCount);
231-
//yield return ((MonoBehaviour)instance).StartCoroutine(ObjectUtils.FindObjectsOfType(renderers));
232229
yield return ObjectUtils.FindObjectsOfType(renderers);
233230

234-
//Debug.Log(Time.renderedFrameCount);
235231
Debug.Log("Renderers: " + renderers.Count);
236232

237233
if (counter > 1000)
@@ -247,9 +243,6 @@ IEnumerator BurnCycles()
247243
counter++;
248244
yield return null;
249245

250-
//if (counter % 1000 == 0)
251-
// Debug.Log(counter);
252-
253246
if (counter > 10000)
254247
break;
255248
}

‎Scripts/LODVolume.cs‎

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ public List<object> cached
108108
{
109109
if (m_Cached.Count == 0)
110110
{
111+
renderers.RemoveAll(r => r == null);
111112
foreach (var r in renderers)
112113
{
113114
var lg = r.GetComponentInParent<LODGroup>();
@@ -284,8 +285,6 @@ public IEnumerator RemoveRenderer(Renderer renderer)
284285
{
285286
if (renderers != null && renderers.Remove(renderer))
286287
{
287-
//Debug.Log("Removing " + renderer);
288-
289288
foreach (Transform child in transform)
290289
{
291290
var lodVolume = child.GetComponent<LODVolume>();
@@ -295,8 +294,6 @@ public IEnumerator RemoveRenderer(Renderer renderer)
295294
yield return null;
296295
}
297296

298-
renderers.RemoveAll(r => r == null);
299-
300297
if (!transform.parent)
301298
yield return Shrink();
302299

@@ -424,25 +421,37 @@ IEnumerator Grow(Bounds targetBounds)
424421

425422
IEnumerator Shrink()
426423
{
427-
var populatedChildrenNodes = newList<LODVolume>();
424+
var populatedChildrenNodes = 0;
428425
foreach (Transform child in transform)
429426
{
430427
var lodVolume = child.GetComponent<LODVolume>();
431428
var renderers = lodVolume.renderers;
432-
if (renderers != null && renderers.Count > 0)
433-
populatedChildrenNodes.Add(lodVolume);
429+
if (renderers != null && renderers.Count > 0&&renderers.Count(r =>r!=null)>0)
430+
populatedChildrenNodes++;
434431

435432
yield return null;
436433
}
437434

438-
if (populatedChildrenNodes.Count== 1)
435+
if (populatedChildrenNodes<= 1)
439436
{
440-
var newRootVolume = populatedChildrenNodes[0];
441-
newRootVolume.transform.parent = null;
442-
CleanupHLOD();
437+
var lodVolumes = GetComponentsInChildren<LODVolume>();
438+
LODVolume newRootVolume = null;
439+
if (lodVolumes.Length > 0)
440+
{
441+
newRootVolume = lodVolumes[lodVolumes.Length - 1];
442+
newRootVolume.transform.parent = null;
443+
}
444+
445+
// Clean up child HLODs before destroying the GameObject; Otherwise, we'd leak into the scene
446+
foreach (var lodVolume in lodVolumes)
447+
{
448+
if (lodVolume != newRootVolume)
449+
lodVolume.CleanupHLOD();
450+
}
443451
DestroyImmediate(gameObject);
444452

445-
yield return newRootVolume.Shrink();
453+
if (newRootVolume)
454+
yield return newRootVolume.Shrink();
446455
}
447456
}
448457

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /