/// <summary> /// 获取到某个资源 /// </summary> /// <param name="path">资源路径</param> /// <param name="onSucc">成功时的回调</param> /// <param name="onFail">失败时的回调</param> /// <param name="resType">资源类型,默认是UnKnow,如果是在bundle模式下,并且传入Unknow类型,会改成AssetBundle类型,如果text或AudioClip不打成bungle,必须传入类型,获取资源使用特定的方法</param> /// <returns>返回当前加载的Resource</returns> public Resource GetResource(string path, ResourceHandler onSucc = null, ResourceHandler onFail = null, ResourceType resType = ResourceType.UnKnow) { if (string.IsNullOrEmpty(path)) { CLog.LogError("[GetResource]ResName can not is null!"); return(null); } Resource res; _mapRes.TryGetValue(GetRealResourcePath(path), out res); if (res != null) { if (res.isDone) { if (res.isSucc && onSucc != null) { ResourceHandler tempOnSucc = onSucc; onSucc = null; tempOnSucc.Invoke(res, path); tempOnSucc = null; } } else { AddListener(res, path, onSucc, onFail); } return(res); } res = new Resource(); res.realPath = GetRealResourcePath(path); res.resType = (!DirectLoadMode && resType == ResourceType.UnKnow) ? ResourceType.AssetBundle : resType; //这个需要在加载依赖之前放入字典中(如果出现循环引用时需要直接获取) _mapRes.Add(res.realPath, res); res.Retain(); //获取到当前资源的依赖资源(可能没法保证顺序,所以拿的时候需要保证所有依赖资源都已经加载好) if (!DirectLoadMode && res.resType == ResourceType.AssetBundle) { string[] listDependResPath = GetDependResPath(path); if (listDependResPath != null && listDependResPath.Length > 0) { List <Resource> listDependRes = new List <Resource>(); for (int i = 0; i < listDependResPath.Length; i++) { //加载依赖资源 Resource dependRes = GetResource(listDependResPath[i]); listDependRes.Add(dependRes); } res.SetDependsRes(listDependRes); } } //真正加载当前资源 //_mapRes.Add(res.realPath, res); //res.Retain(); AddListener(res, path, onSucc, onFail); _resLoader.Load(res); return(res); }
public bool RunFrameData(int frameIndex) { if (Status != SocketClientStatus.Connected) { return(false); } if (frameIndex >= m_cFrameData.recvFrameIndex) { return(false); } var lst = m_cFrameData.GetFrameData(frameIndex); if (lst != null) { for (int i = 0; i < lst.Count; i++) { try { HandleRecvData(lst[i]); } catch (Exception e) { CLog.LogError("handle frame data error,opcode=" + lst[i].recvOpcode + ",\n" + e.ToString()); } } } m_cFrameData.RemoveFrameData(frameIndex); return(true); }
public void LoadList(List <string> names, Action <MultiResourceLoader> OnComplete = null, Action <Resource> OnProgress = null, ResourceType resType = ResourceType.UnKnow) { if (names == null || names.Count == 0) { return; } for (int i = 0; i < names.Count; i++) { if (_loadList.Contains(names[i])) { CLog.LogError("Can not has same name in one MultiResourceLoader"); return; } else { _loadList.Add(names[i]); } } this._OnComplete = OnComplete; this._OnProgress = OnProgress; for (int i = 0; i < names.Count; i++) { _resourceContainer.GetResource(names[i], OnFinish, OnFinish, resType); } }
public void Open(string name, ViewParam param = null) { if (!_views.ContainsKey(name)) { string clsName = name + "Controller"; Type type = Type.GetType(clsName); if (type == null) { type = typeof(BaseViewController); } object obj = Activator.CreateInstance(type); if (obj == null) { CLog.LogError("Cannot find class with type [" + type + "]."); return; } BaseViewController controller = obj as BaseViewController; controller.viewName = name; controller.viewPath = GetViewPath(name); //_views.Add(name, controller); m_cContainer.Add(controller, param); } else { _views[name].Open(param); } }
private void Update() { if (m_dicLoadingQueue.Count == 0) { return; } foreach (var item in m_dicLoadingQueue) { if (item.Key.isDone) { m_dicLoadedQueue.Add(item.Key, item.Value); } } foreach (var item in m_dicLoadedQueue) { item.Value.isDone = true; if (item.Key.asset == null) { item.Value.errorTxt = "Load resource [" + item.Value.realPath + "] fail!"; CLog.LogError(item.Value.errorTxt); } else { item.Value.SetDirectObject(item.Key.asset); } m_dicLoadingQueue.Remove(item.Key); OnDone(item.Value); } m_dicLoadedQueue.Clear(); }
private void Update() { if (m_dicLoadingQueue.Count == 0) { return; } foreach (var item in m_dicLoadingQueue) { if (item.Key.isDone) { m_dicLoadedQueue.Add(item.Key, item.Value); } } foreach (var item in m_dicLoadedQueue) { item.Value.isDone = true; if (item.Key.assetBundle != null) { item.Value.SetBundle(item.Key.assetBundle); } else { string errorTxt = "Load resource [" + GetInResPath(item.Value) + "] fail!"; item.Value.errorTxt = errorTxt; CLog.LogError(errorTxt); } m_dicLoadingQueue.Remove(item.Key); OnDone(item.Value); } m_dicLoadedQueue.Clear(); }
private void Update() { if (m_dicLoadingQueue.Count == 0) { return; } foreach (var item in m_dicLoadingQueue) { if (item.Key.isDone) { m_dicLoadedQueue.Add(item.Key, item.Value); } } foreach (var item in m_dicLoadedQueue) { item.Value.isDone = true; if (string.IsNullOrEmpty(item.Key.error)) { item.Value.SetWWWObject(item.Key); } else { item.Value.errorTxt = item.Key.error; CLog.LogError("Load resource [" + item.Key.url + "] fail!"); } m_dicLoadingQueue.Remove(item.Key); item.Key.Dispose(); OnDone(item.Value); } m_dicLoadedQueue.Clear(); }
/// <summary> /// 复制整个目录,包含子目录和文件 /// </summary> public bool CopyDirectory(string srcDir, string destDir) { try { if (!Directory.Exists(srcDir)) { CLog.LogError("CopyDirectory Error, srcDir not exist!srcDir=" + srcDir); return(false); } if (!Directory.Exists(destDir)) { Directory.CreateDirectory(destDir); } DirectoryInfo srcDirInfo = new DirectoryInfo(srcDir); FileInfo[] files = srcDirInfo.GetFiles("*", SearchOption.TopDirectoryOnly); foreach (FileInfo file in files) { file.CopyTo(Path.Combine(destDir, file.Name)); } DirectoryInfo[] directories = srcDirInfo.GetDirectories(); foreach (DirectoryInfo dir in directories) { CopyDirectory(Path.Combine(srcDir, dir.Name), Path.Combine(destDir, dir.Name)); } return(true); } catch (Exception e) { CLog.LogError("CopyDirectory Error!srcDir=" + srcDir + ",destDir=" + destDir + ",msg=" + e.Message + ",StackTrace=" + e.StackTrace); return(false); } }
private void OnResLoadCache(Resource res, string path) { if (res.isSucc) { ResourceObjectQueue resQueue = m_dicGO[path]; resQueue.prefab = res.GetAsset(path); resQueue.isDone = true; List <CacheCallbackStruct> lstCallbackStruct = null; if (m_dicCacheCallback.TryGetValue(path, out lstCallbackStruct)) { while (lstCallbackStruct.Count > 0) { var callbackStruct = lstCallbackStruct[0]; lstCallbackStruct.RemoveAt(0); if (!callbackStruct.isPrefab) { for (int i = 0; i < callbackStruct.count; i++) { var go = GetGameObject(resQueue.prefab, path); SaveObject(path, go); } } callbackStruct.callback.Invoke(path); } } } else { CLog.LogError("加载GameObject资源" + path + "失败"); } }
public void RegistUIPath(string viewName, string prefabPath) { if (m_dicPath.ContainsKey(viewName)) { CLog.LogError("已注册viewName=" + viewName + "的配置"); return; } m_dicPath.Add(viewName, prefabPath); }
protected string GetViewPath(string viewName) { string path = ""; if (!m_dicPath.TryGetValue(viewName, out path)) { CLog.LogError("找不到viewName=" + viewName + "的UI配置"); } return(path); }
private bool CheckReceiveZero(int count) { if (count == 0) { CLog.LogError("SocketReceiver receive count = 0"); m_bLostConnect = true; return(true); } return(false); }
private void OnResLoad(Resource res, string path) { if (res.isSucc) { m_lstAsyncQueue.AddLast(LoadAssetAndCallback(res, path)); } else { CLog.LogError("加载GameObject资源" + path + "失败"); } }
public override void SendNetData(NetSendData data) { if (m_cSender != null) { m_cSender.SendData(data); } else { CLog.LogError("socket not connected,can not send net Data!"); } }
public override int RecvNetData(Queue <NetRecvData> queue) { if (m_cReceiver != null) { m_cReceiver.RecvNetData(queue); } else { CLog.LogError("socket not connected,can not recv net Data!"); } return(0); }
private void OnFinish(Resource res) { if (res.isSucc) { res.Retain(); _mapRes.Add(res.path, res); } else { CLog.LogError("[MultiResourceLoader] load " + res.path + " fail!"); } _finishCount++; List <Action <Resource> > list; _mapTryGetRes.TryGetValue(res.path, out list); if (list != null) { _mapTryGetRes.Remove(res.path); for (int i = 0; i < list.Count; i++) { list[i].Invoke(res); } } if (_OnProgress != null) { Action <Resource> tempAction = _OnProgress; tempAction.Invoke(res); } if (_finishCount == _loadList.Count) { foreach (var item in _mapTryGetRes) { Resource tempRes; _mapRes.TryGetValue(item.Key, out tempRes); if (tempRes == null) { continue; } for (int i = 0; i < item.Value.Count; i++) { item.Value[i].Invoke(tempRes); } } _mapTryGetRes.Clear(); if (_OnComplete != null) { Action <MultiResourceLoader> tempAction = _OnComplete; _OnComplete = null; tempAction.Invoke(this); } } }
private void OnLoadAsset(string path, UnityEngine.Object prefab) { if (prefab == null) { CLog.LogError("加载资源path=" + path + "的预制为空"); } ResourceObjectQueue resQueue; if (m_dicGO.TryGetValue(path, out resQueue)) { resQueue.prefab = prefab; } }
private bool CheckEndToPoint(string ip, int port, out IPEndPoint point) { point = null; IPAddress ipAddress; if (IPAddress.TryParse(ip, out ipAddress)) { point = new IPEndPoint(ipAddress, port); return(true); } CLog.LogError("ip=" + ip + ",port=" + port + " can not arrived!(or format error)"); return(false); }
private GameObject GetGameObject(UnityEngine.Object prefab, string path) { try { GameObject go = (GameObject)GameObject.Instantiate(prefab); return(go); } catch (Exception e) { CLog.LogError("路径为" + path + "传入预设为空"); } return(null); }
public void DestroyEffectGO(GameObject go) { EffectCtrl effectCtrl = go.GetComponent <EffectCtrl>(); if (effectCtrl != null) { DestroyEffect(effectCtrl); } else { CLog.LogError("销毁特效的对象上必须有EffectCtrl脚本"); } }
public static void AddUIEffect(this Transform go, GameObject effect) { go.gameObject.AddChildToParent(effect); #if UNITY_EDITOR Renderer[] renders = effect.GetComponentsInChildren <Renderer>(); for (int i = 0; i < renders.Length; i++) { if (renders[i].material.renderQueue != 3000 || renders[i].sortingOrder != 0 || renders[i].sortingLayerName != "Default") { CLog.LogError("特效name=" + effect.name + "中的render=" + renders[i].gameObject.name + "渲染层次不符合法,请美术重新修改"); } } #endif }
public void RemoveFile(string path) { try { if (!File.Exists(path)) { return; } File.Delete(path); }catch (Exception e) { CLog.LogError("Remove File Error!path=" + path); } }
protected void OnTick(float dt) { _isUpdating = true; // CLog.Log ("_listSchedulerEntity.count:"+_listSchedulerEntity.Count); for (int i = 0; i < _listSchedulerEntity.Count; i++) { SchedulerEntity entity = _listSchedulerEntity [i]; if (entity.state == SchedulerEntityState.Error) { continue; } if (entity.state == SchedulerEntityState.ToDoAction) { try { if (!entity.OnTick(dt)) { entity.state = SchedulerEntityState.ToRemove; SchedulerEntity RemoveEntity = _pool.GetObject(); RemoveEntity.Init(entity.handler); RemoveEntity.state = SchedulerEntityState.ToRemove; _listOperateEntity.Add(RemoveEntity); } } //捕获异常,防止有异常后整个scheduler全部卡死 catch (System.Exception ex) { entity.state = SchedulerEntityState.Error; CLog.LogError(ex.Message + "\n" + ex.StackTrace); } } } _isUpdating = false; for (int i = 0; i < _listOperateEntity.Count; i++) { SchedulerEntity entity = _listOperateEntity [i]; if (entity.state == SchedulerEntityState.ToAdd) { AddScheduler(entity.handler, entity.delay, entity.times); } else if (entity.state == SchedulerEntityState.ToRemove) { RemoveScheduler(entity.handler); } _pool.SaveObject(entity); } _listOperateEntity.Clear(); }
private void OnResourceDone(Resource res) { if (res.isSucc) { List <ResourceHandlerStruct> succList; _succCallbacks.TryGetValue(res, out succList); _succCallbacks.Remove(res); if (succList != null) { while (succList.Count > 0) { var callbackStruct = succList[0]; succList.RemoveAt(0); callbackStruct.callback.Invoke(res, callbackStruct.path); } } res.Release(); } else { //失败的话,将资源先移除掉 if (res.refCount > 1) { CLog.LogError("DestroyResource[resPath=" + res.realPath + "],RefCount>1."); } else { _mapRes.Remove(res.realPath); } List <ResourceHandlerStruct> failList; _failCallbacks.TryGetValue(res, out failList); _failCallbacks.Remove(res); if (failList != null) { while (failList.Count > 0) { var callbackStruct = failList[0]; failList.RemoveAt(0); callbackStruct.callback.Invoke(res, callbackStruct.path); } } res.Release(); if (res.refCount <= 0) { res.DestroyResource(); } } }
public bool Remove(IDynamicObj obj) { if (RemoveObj(obj)) { if (OnRemove != null) { OnRemove(obj, null); } return(true); } else { CLog.LogError("移除" + obj.key + "失败!"); } return(false); }
/// <summary> /// /// </summary> /// <param name="moveRadius">anchorPosition的宽度为准</param> /// <param name="fixedBase"></param> public void Init(float moveRadius, bool fixedBase) { m_defaultBasePosition = mBase.anchoredPosition; m_fMoveRadius = moveRadius; m_bFixedBase = fixedBase; //关闭遥感的Raycast ForbidRaycastTarget(transform as RectTransform); //关闭mEffectTransfrom与mBase与mMove下的碰撞检测 //ForbidRaycastTarget(mEffectTransfrom); //ForbidRaycastTarget(mBase); //ForbidRaycastTarget(mMove); if (mBase.parent != mMove.parent) { CLog.LogError("mBase与mMove必须在相同父节点下"); } }
public void Update(object param = null) { m_bIsUpdating = true; int count = m_lstEntity.Count; for (int i = 0; i < count; i++) { var entity = m_lstEntity[i]; if (entity.state == DCState.Error) { continue; } if (entity.state == DCState.ToDoAction) { try { if (OnUpdate != null) { OnUpdate(entity.obj, param); } } catch (System.Exception ex) { entity.state = DCState.Error; Remove(entity.obj); CLog.LogError(ex.Message + "\n" + ex.StackTrace); } } } m_bIsUpdating = false; int count1 = m_lstOperateEntity.Count; for (int i = 0; i < count1; i++) { var entity = m_lstOperateEntity[i]; if (entity.state == DCState.ToAdd) { AddObj(entity.obj, entity.param); } else if (entity.state == DCState.ToRemove) { RemoveObj(entity.obj); } m_cEntityPool.SaveObject(entity); } m_lstOperateEntity.Clear(); }
private void OnLoadManifest(Resource res, string path) { if (res.isSucc) { m_cManifest = (AssetBundleManifest)res.GetAsset(null); } else { CLog.LogError("AssetBundleFile文件初始化失败!"); } if (m_cCallback != null) { var callback = m_cCallback; m_cCallback = null; callback.Invoke(res.isSucc); } }
public override void DisConnect() { try { if (m_cSocket != null) { if (m_cAsyncResult != null) { m_cSocket.EndConnect(m_cAsyncResult); } if (Status == SocketClientStatus.Connected) { m_cSocket.Shutdown(SocketShutdown.Both); } } }catch (Exception e) { CLog.LogError(e.Message + "\n" + e.StackTrace); } finally { try { if (m_cSocket != null) { m_cSocket.Close(); } } catch (Exception e) { CLog.LogError(e.Message + "\n" + e.StackTrace); } if (m_cSender != null) { m_cSender.Dispose(); m_cSender = null; } if (m_cReceiver != null) { m_cReceiver.Dispose(); m_cReceiver = null; } m_cSocket = null; m_cAsyncResult = null; base.DisConnect(); } }
void Update() { for (int i = 0; i < m_arrChannel.Length; i++) { try { if (m_arrChannel[i] != null) { m_arrChannel[i].OnUpdate(); } } catch (Exception e) { CLog.LogError(e.Message + "\n" + e.StackTrace); } } }