//读取事件压入队列 void pushAction(int type, string name, System.Action <Object> cb) { //读取缓存 Object val = null; if (resSaver.TryGetValue(name, out val)) { cb(val); return; } //事件储存 var loadAction = new loadAction(); loadAction.type = type; loadAction.name = name; loadAction.cbAction = cb; actionList.Push(loadAction); //判断是否空闲 if (isFree) { dealAction(); } }
//处理资源 void dealAction() { var popAction = actionList.Pop(); if (popAction != null) { isFree = false; loadAction action = (loadAction)popAction; if (action.name == "" || action.name == null) { Debug.Log("action.name is empty"); dealAction(); return; } Object res = null; switch (action.type) { case 1: { //读取 res = Resources.Load <Object>("Texture/" + action.name); if (res != null) { Sprite sp = Sprite.Create( res as Texture2D, new Rect(0, 0, (res as Texture2D).width, (res as Texture2D).height), new Vector2(0.5f, 0.5f)); res = (Object)sp; } } break; case 2: { //读取 res = Resources.Load <Object>("Config/" + action.name); } break; case 3: { //读取 res = Resources.Load <Object>("Prefab/" + action.name); } break; case 4: { //读取 res = Resources.Load <Object>("Sound/" + action.name); } break; case 5: { //读取 res = Resources.Load <Object>("Bone/" + action.name); } break; } ; //储存并回调 if (res != null) { if (!resSaver.ContainsKey(action.name)) { resSaver.Add(action.name, res); } action.cbAction(res); } else { Debug.LogWarning(action.name); action.cbAction(null); } isFree = true; } else { isFree = true; } }