Unityフレームワーク学習_ResManager、リソースのロードとアンロードを効率的に管理します

         Unityフレームワーク学習_ResManager、リソースのロードとアンロードを効率的に管理します


目次

1.ブログ紹介

2.コンテンツ

(1)ガイダンス

(2)メインロジック

3.プッシュ

4.結論


1.ブログ紹介

       このブログでは、Unity3Dリソースの動的なロードとアンロード、およびそれらを効率的に管理する方法を紹介します。この記事のアイデアは、サンダルのUnity3DフレームワークのQFrameworkにリソースをロードする方法から完全に派生しています。ブロガーは、リソースをロードするためのResourcesメソッドやAssetBundleリソースのロードなど、アイデアを適用してコンテンツを追加しました。 。


2.コンテンツ

(1)ガイダンス

リソースhttps//blog.csdn.net/Mr_Sun88/article/details/94147069

AssetBundlehttps//blog.csdn.net/Mr_Sun88/article/details/86553465

ResourcesメソッドとAssetBundleパッケージのロードに慣れていない人は、他の2つのブロガーの記事に直接ジャンプできます。

(2)メインロジック

リソースタイプタグ:ResType

public enum ResType
{
   ResSingle,//Res单个资源
   ResGroup,//Res组资源
   AssetBundle,//AB包资源
}

ResType列挙型。現在ロードされているリソースのタイプをマークします。

抽象リソーススクリプト:Res.cs

/// <summary>
/// 资源容器成员属性和方法
/// </summary>
public interface IRes
{
	ResType AssetType { get; set; }//资源类型标记
	string AssetKey { get; set; }//资源标记
	Object Asset { get; set; }//单体资源
	Object[] Assets { get; set; }//资源组
	int ReferenceCount { get; set; }//引用计数
	void Reference();//引用执行
	void Release();//释放执行
	void Destroy();//摧毁执行
}

       IRを継承するResにロードする必要のある各リソースを抽象化し、各Resには上記の属性とメソッドがあります。

AssetType 単一のリソース、リソースグループ、またはABパッケージのいずれであるかにかかわらず、現在のリソースのタイプを記録します
AssetKey リソースがロードされるときに、リソースパスをキー値として使用します
資産 単一のリソースまたはABパッケージの場合は、Resを構築するときにリソースをAssetに割り当てます。
資産 リソースグループの場合は、Resを構築するときにリソースグループをアセットに割り当てます
ReferenceCount リソースが引用された回数を記録します
参照() リソースが参照されるときに呼び出されます、ReferenceCount ++
Release() リソースが解放されたときに呼び出され、リソースへの参照がある場合はReferenceCount--、参照がない場合はリソースが解放されます
破壊() リソース参照に関係なく、直接リリースします

パブリックリソースコンテナ:PublicLoadingResList

        /// <summary>
	/// 公共容器 储存所有动态资源
	/// </summary>
	public static List<Res> PublicLoadingResList = new List<Res>();

ローダーによって動的にロードされるすべてのリソースは、パブリックコンテナーPublicLoadingResListに格納されます

リソースローダー:ResLoader.cs

/// <summary>
/// 资源的加载容器属性和方法
/// </summary>
public interface IResLoader
{
	List<Res> SelfLoadingResList { get; set; } //储存当前容器加载的资源
	T AssetLoad<T>(string assetPath) where T : Object; //Resources单个资源的同步加载
	T[] AssetsLoad<T>(string folderPaht) where T : Object; //Resources目录下全部资源加载
	IEnumerator AssetLoadAsync<T>(string assetPath, Action<T> callback) where T : Object; //异步加载Resources下的单个资源
	AssetBundle ABLoadFromMemory(string assetPath); //直接加载AB包
	IEnumerator ABLoadFromMemoryAsync(string assetPath, Action<AssetBundle> callback); //LoadFromMemoryAsync 异步加载AB包
	AssetBundle ABLoadFromFile(string assetPath); //LoadFromFile直接加载本地AB包
	IEnumerator ABLoadFromFileAsync(string assetPath, Action<AssetBundle> callback); //从本地异步加载AB资源
	IEnumerator ABLoadWWW(string assetPath, Action<AssetBundle> callback); //WWW放置加载AB包
	IEnumerator ABLoadWebRequest(string assetPath, Action<AssetBundle> callback); //WebRequest请求AB包
	void UnloadAll();//卸载当前加载器资源

}
SelfLoadingResList 現在のローダーによって動的にロードされたリソースを保存します
 AssetLoad <T>(文字列assetPath) Resourcesディレクトリにパスリソースをロードします
AssetsLoad <T>(string folderPaht) Resourcesディレクトリのファイルの下にあるすべてのリソースをロードします
AssetLoadAsync <T>(文字列assetPath、Action <T>コールバック)  Resourcesディレクトリに単一のリソースを非同期的にロードします
 ABLoadFromMemory(文字列assetPath) ABパッケージリソースをロードするためのLoadFromMemoryメソッド
ABLoadFromMemoryAsync(string AssetPath、Action <AssetBundle>コールバック) LoadFromMemoryAsyncメソッドはABパッケージリソースを非同期的にロードします
 ABLoadFromFile(文字列assetPath) ABパッケージリソースをロードするためのLoadFromFileメソッド
 ABLoadFromFileAsync(string AssetPath、Action <AssetBundle>コールバック) LoadFromFileAsyncメソッドは、ABパッケージリソースを非同期的に記録します
ABLoadWWW(文字列assetPath、Action <AssetBundle>コールバック) WWWメソッドはABパッケージリソースを非同期的にロードします
 ABLoadWebRequest(文字列assetPath、Action <AssetBundle>コールバック) UnityWebRequestAssetBundleメソッドはABパッケージリソースを非同期的にロードします
UnloadAll() 現在のローダーリソースをアンロードします

       リソースを動的にロードする必要がある場合は、ResLoaderをインスタンス化し、ローダーを使用して現在のページに必要なすべてのリソースをロードします。リソースをロードするときは、リソースのAssetKeyに従って、リソースがローダーコンテナまたは存在するかどうかパブリックコンテナに存在する場合は、リロードせずに直接戻ります。存在しない場合は、リソースがロードされてコンテナに追加されます。これにより、リソースの繰り返しのロードを回避できます。現在のページが破棄されたときに、現在のページのローダーメソッドUnloadAllを直接呼び出すことができます。()リソース管理を容易にするために、ロードされたリソース、さまざまなページインスタンスのさまざまなローダーを解放します。

リソースローダーの管理:

/// <summary>
/// 资源管理属性方法
/// </summary>
public interface IResManager
{
	ResLoader GetResLoader();//获取资源加载器实例
}

 

GetResLoader() リソースローダーResLoaderのインスタンスを取得します

 現在のマネージャーには、ローダーのインスタンスを取得するためのメソッドが1つしかなく、今後も追加されます。


3.プッシュ

エンジニアリングデモGithub: https//github.com/KingSun5/Study_ResManager

凉鞋チャット:https://gitbook.cn/books/5b36e7d3dc52aa6b10c03a29/index.html

QFramework:https://gitbook.cn/books/5b36e7d3dc52aa6b10c03a29/index.html 

 


4.結論

       コンテンツが多いため、すべての主要な実装ロジックコードがブロガーによってリリースされるわけではありません。これらはすべてブロガーのGithubデモプロジェクトに含まれています。必要な学生は、ブロガーのGithubに直接ジャンプできます。ブロガーの記事が悪いことではありませんが、ブロガーに注意を払い、ブログ投稿を気に入ってもらえると思います。また、ブロガーの能力には限界があります。投稿に誤りがある場合は、コメントして批判してください。

       QQ交換グループ:806091680(中国人)

       このグループは、CSDNブロガーのChinarによって作成されました。お勧めします。私もグループにいます!

       この記事はオリジナル記事ですので、有名作家の出典を転載してトップにこだわってください!

 

おすすめ

転載: blog.csdn.net/Mr_Sun88/article/details/94357068