示例#1
0
        public void SceneUnloaded(string sceneName)
        {
            if (_sceneNameToId.ContainsKey(sceneName))
            {
                var sceneIndex = _sceneNameToId[sceneName];
                var goes       = _loadedGoes[sceneIndex];

                var count = goes.Count;
                for (int i = 0; i < count; i++)
                {
                    _streamingResourceHandler.UnloadGo(goes[i], sceneIndex);
                }

                _sceneNameToId.Remove(sceneName);
                _loadedGoes.Remove(sceneIndex);
                _goRoot.Remove(sceneIndex);
            }
        }
示例#2
0
        public bool SetGoActivatiton(DistCullingCat cat, bool isActivated, IStreamingResourceHandler handler)
        {
            bool ret = false;

            if (cat == Cat)
            {
                switch (Status)
                {
                case StreamingGoStatus.NotLoaded:
                    if (isActivated)
                    {
                        handler.LoadGo(Key.SceneIndex, Key.GoIndex);
                        Status = StreamingGoStatus.Loading;
                    }

                    break;

                case StreamingGoStatus.Loading:
                    if (!isActivated)
                    {
                        Status = StreamingGoStatus.NotLoaded;
                    }

                    break;

                case StreamingGoStatus.Loaded:
                    if (!isActivated)
                    {
                        handler.UnloadGo(Go, Key.SceneIndex);

                        Status = StreamingGoStatus.NotLoaded;
                        RemoveHandlers();
                        Go  = null;
                        ret = true;
                    }

                    break;
                }
            }

            return(ret);
        }
示例#3
0
        public void Delete(IStreamingResourceHandler handler)
        {
            var count = _streamingGoes.Count;

            for (int i = 0; i < count; i++)
            {
                var streamingGo = _streamingGoes[i];
                if (streamingGo.Go != null)
                {
                    handler.UnloadGo(streamingGo.Go, streamingGo.Key.SceneIndex);
                }
            }

            count = _children.Length;
            for (int i = 0; i < count; i++)
            {
                if (_children[i] != null)
                {
                    _children[i].Delete(handler);
                }
            }
        }
示例#4
0
        public void AssignGo(UnityObject unityObj, CullingHandler handler, StreamingGoKey key,
                             Vector3 position, Vector3 size, IStreamingResourceHandler resHandler)
        {
            if (_height > 0 && FitInOneChild(size))
            {
                var index = GetChildIndex(position);
                _children[index].AssignGo(unityObj, handler, key, position, size, resHandler);
            }
            else
            {
                var streamingGo = _streamingGoMap[key];
                if (streamingGo.SetGo(unityObj))
                {
                    while (handler != null)
                    {
                        handler.StateChanged(_cullingState[(int)handler.Category] != CullState.Culled);
                        var sibling = handler.Sibling;
                        handler.Sibling = null;

                        streamingGo.AddHandler(handler);
                        ChangeCullingCount(handler.Category, 1);

                        handler = sibling;
                    }
                }
                else
                {
                    resHandler.UnloadGo(unityObj, key.SceneIndex);
                    while (handler != null)
                    {
                        var sibling = handler.Sibling;
                        handler.Free();
                        handler = sibling;
                    }
                }
            }
        }
示例#5
0
        public void GoLoaded(int sceneIndex, int goIndex, UnityObject unityObj)
        {
            if (_sceneOctrees.ContainsKey(sceneIndex))
            {
                var sceneDesc = _sceneDesc[sceneIndex];
                var goDesc    = sceneDesc.Objects[goIndex];

                var handlerHead = _cullingItemFactory.CreateCullingHandlers(unityObj, goDesc.SceneTag);

                _sceneOctrees[sceneIndex].AssignGo(unityObj, handlerHead,
                                                   new StreamingGoKey
                {
                    SceneIndex = sceneIndex,
                    GoIndex    = goIndex
                },
                                                   goDesc.Position, goDesc.Size, _resourceHandler);

                unityObj.AsGameObject.transform.SetParent(_goRoot[sceneIndex].transform);
            }
            else
            {
                _resourceHandler.UnloadGo(unityObj, sceneIndex);
            }
        }