using QFramework;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TestResKit : MonoBehaviour
{
ResLoader mResLoader = ResLoader.Allocate();
private void Awake()
{
}
/// <summary>
/// 每一个需要加载资源的单元(脚本,界面)申请一个ResLoader
/// ResLoader 本身会记录该脚本加载过的资源
/// </summary>
/// <summary>
/// 通过 LoadSync 同步加载资源
/// 只需要传入资源名就行,不需要传入AssetBundle名
/// </summary>
void Start()
{
this.GetComponent<SpriteRenderer>().sprite= mResLoader.LoadSync<Sprite>("forest_of_whispers_verdant_woods_tiles") ;
}
private void OnDestroy()
{
// 释放所有本脚本加载过的资源
// 释放只是释放资源的引用
// 当资源的引用数量为 0,会进行真正的卸载操作
mResLoader.Recycle2Cache();
mResLoader = null;
}
}
使用方法就是,把这个脚本贴在需要加载资源的controller上。
用它来加载资源!这样如果自己没有了,资源就会自己回收自己
然后别忘了在什么地方吧这个初始化一下
ResMgr.Init();
另外一个,就是加载一些数据或者图片集,可以这样做:
public Sprite GetGoalLevelSprite(string id)
{
var spriteAtlas = mResLoader.LoadSync<SpriteAtlas>(GameConfig.GoalMapAtlasPath);
var icon = spriteAtlas.GetSprite(id);
mResLoader.AddObjectForDestroyWhenRecycle2Cache(icon);
return icon;
}
public class ConfigSystem : BaseSystem, IConfigSystem
{
private ResLoader mResLoader = ResLoader.Allocate();
private cfg.Tables tables;
public cfg.Tables Tables => tables;
public override void RegisterEvents()
{
tables = new cfg.Tables(file =>
JSON.Parse(Resources.Load<TextAsset>("TextAsset/JsonConfig/" + file).text));
}
public cfg.LevelMapSet GetMapSet(string id)
{
cfg.LevelMapSet result;
try
{
result = Tables.TbLevelMap.Get(id);
}
catch (Exception e)
{
Debug.LogError($"TbLevelMap id: {id} {e}");
throw;
}
return result;
}
}