コード例 #1
0
        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();
        }