private void ProcessPendingLoaders() { foreach (NodeLoadInfo nodeLoadInfo in pendingLoaders) { if (nodeLoadInfo.state == DynamicLoadingState.LOADED) // We got a callback from dyn loader that we were loaded or unloaded { unTransform transform = NodeUtils.FindFirstGameObjectTransformUnsafe(nodeLoadInfo.loader.GetNativeReference()); if (transform == null) // We have been unloaded or not registered { continue; } if (transform.childCount != 0) // We have already a child and our sub graph was loaded { continue; } // TODO: Active state node can be further up the tree and should be located and passed here GameObject go = BeginTraverse(nodeLoadInfo.node, true); // Build sub graph as result of dynamic loader if (go != null) { go.transform.SetParent(transform, false); // Connect to our parent } } else if (nodeLoadInfo.state == DynamicLoadingState.UNLOADED) { List <GameObject> list; if (NodeUtils.FindGameObjectsUnsafe(nodeLoadInfo.loader.GetNativeReference(), out list)) { foreach (var go in list) { //We need to unload all limked go in hierarchy var tr = go.transform; for (var i = tr.childCount - 1; i >= 0; i--) { Free(tr.GetChild(i)); } } } } } pendingLoaders.Clear(); }