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); } }
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); }
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); } } }
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; } } } }
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); } }