欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > xlua使用

xlua使用

2024/10/25 17:26:50 来源:https://blog.csdn.net/cangqiong_xiamen/article/details/140998386  浏览:    关键词:xlua使用

1. 安装

到 github 移动三个文件夹过去即可
Assets -》Plugins
Assets -》Xlua
Tools

移动到 unity里面的Assets目录即可
会在工具栏出现Xlua即安装成功

2. 引入基础类

在这里插入图片描述
ABMgr.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;public class ABMgr : SingletonAutoMono<ABMgr>
{private AssetBundle mainAB = null;//依赖包获取用的配置文件private AssetBundleManifest manifest = null;//AB包不能够重复加载 重复加载会报错//字典 用字典来存储 加载过的AB包 private Dictionary<string, AssetBundle> abDic = new Dictionary<string, AssetBundle>();/// <summary>/// 这个AB包存放路径 方便修改/// </summary>private string PathUrl{get{return Application.streamingAssetsPath + "/";}}/// <summary>/// 主包名 方便修改/// </summary>private string MainABName{get{
#if UNITY_IOSreturn "IOS";
#elif UNITY_ANDROIDreturn "Android";
#elsereturn "PC";
#endif}}/// <summary>/// 加载AB包/// </summary>/// <param name="abName"></param>public void LoadAB( string abName ){//加载AB包if (mainAB == null){mainAB = AssetBundle.LoadFromFile(PathUrl + MainABName);manifest = mainAB.LoadAsset<AssetBundleManifest>("AssetBundleManifest");}//我们获取依赖包相关信息AssetBundle ab = null;string[] strs = manifest.GetAllDependencies(abName);for (int i = 0; i < strs.Length; i++){//判断包是否加载过if (!abDic.ContainsKey(strs[i])){ab = AssetBundle.LoadFromFile(PathUrl + strs[i]);abDic.Add(strs[i], ab);}}//加载资源来源包//如果没有加载过 再加载if (!abDic.ContainsKey(abName)){ab = AssetBundle.LoadFromFile(PathUrl + abName);abDic.Add(abName, ab);}}//同步加载 不指定类型public Object LoadRes(string abName, string resName){//加载AB包LoadAB(abName);//为了外面方便 在加载资源时 判断一下 资源是不是GameObject//如果是 直接实例化了 再返回给外部Object obj = abDic[abName].LoadAsset(resName);if (obj is GameObject)return Instantiate(obj);elsereturn obj;}//同步加载 根据type指定类型public Object LoadRes(string abName, string resName, System.Type type){//加载AB包LoadAB(abName);//为了外面方便 在加载资源时 判断一下 资源是不是GameObject//如果是 直接实例化了 再返回给外部Object obj = abDic[abName].LoadAsset(resName, type);if (obj is GameObject)return Instantiate(obj);elsereturn obj;}//同步加载 根据泛型指定类型public T LoadRes<T>(string abName, string resName) where T:Object{//加载AB包LoadAB(abName);//为了外面方便 在加载资源时 判断一下 资源是不是GameObject//如果是 直接实例化了 再返回给外部T obj = abDic[abName].LoadAsset<T>(resName);if (obj is GameObject)return Instantiate(obj);elsereturn obj;}//异步加载的方法//这里的异步加载 AB包并没有使用异步加载//知识从AB包中 加载资源时 使用异步//根据名字异步加载资源public void LoadResAsync(string abName, string resName, UnityAction<Object> callBack){StartCoroutine(ReallyLoadResAsync(abName, resName, callBack));}private IEnumerator ReallyLoadResAsync(string abName, string resName, UnityAction<Object> callBack){//加载AB包LoadAB(abName);//为了外面方便 在加载资源时 判断一下 资源是不是GameObject//如果是 直接实例化了 再返回给外部AssetBundleRequest abr = abDic[abName].LoadAssetAsync(resName);yield return abr;//异步加载结束后 通过委托 传递给外部 外部来使用if (abr.asset is GameObject)callBack(Instantiate(abr.asset));elsecallBack(abr.asset);}//根据Type异步加载资源public void LoadResAsync(string abName, string resName, System.Type type, UnityAction<Object> callBack){StartCoroutine(ReallyLoadResAsync(abName, resName, type, callBack));}private IEnumerator ReallyLoadResAsync(string abName, string resName, System.Type type, UnityAction<Object> callBack){//加载AB包LoadAB(abName);//为了外面方便 在加载资源时 判断一下 资源是不是GameObject//如果是 直接实例化了 再返回给外部AssetBundleRequest abr = abDic[a

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com