【unity每日一记】资源和场景加载图文详解
👨💻个人主页:@元宇宙-秩沅
👨💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!
👨💻 本文由 秩沅 原创
👨💻 收录于专栏:unity每日一记
⭐🅰️推荐文章⭐
⭐【unity本站最全系列】unity常用API大全一篇文章足以
⭐Unity中资源和场景加载⭐
@[TOC]
🎶(==A==) 资源加载(Resource)
👨💻👍5种资源加载的方式,Resource加载介绍
- Resources(只能加载Resources目录中的资源)
- AssetBundle(只能加载AB资源,当前设备允许访问的路径都可以)
- WWW(可以加载任意处资源,包括项目外资源(如远程服务器))
- AssetDatabase(只能加载Assets目录下的资源,但只能用于Editor)
- UnityWebRequest(可以加载任意处资源,是WWW的升级版本)
==资源加载适用于需要加载资源较多的 情况就不用一个一个的拖拽进去==
👨💻👍Resource资源加载操作
加载资源前首先需要在project面板中创建Resource名字的文件夹,为固定文件夹用于资源加载
==以加载AudioClip类型的资源为例:==
- 根目录加载 Resource.Load< AudioClip>(“voice”);
- 子目录加载 Resource.Load<AudioClip> ( @ " 子目录名/ voice") ;
- 另一种形式:
Object xx = Resource.Load(“voice”);
AudioClip yy as xx ; // 显性类型转换 ,前提是二者兼容 - 加载同类型所有资源的方法:
①根目录加载: AudioClip [] xx = Resource.AllLoad<AudioClip>(" “) ;
②子目录加载:AudioClip [] yy = Resource.AllLoad<AusioClip>(” 子目录名");
关键字:@ ,as
- 卸载AB包的方法: Resource. UnLoadAsset
void Start()
{
Object obj= Resources.Load("sound");
//AudioClip ac = obj as AudioClip;
AudioClip ac = (AudioClip)obj;
AudioSource.PlayClipAtPoint(ac, transform.position);
//Resources.LoadAll<AudioClip>("Prefabs");
AudioClip[] audioClips= Resources.LoadAll<AudioClip>("");
foreach (var item in audioClips)
{
Debug.Log(item);
}
//Resources.UnloadAsset
}
- C#中的回收机制是系统自动回收的,有多种回收机制,不像其他语言需要手动回收
🎶(==B==) 场景(Scene)加载
👨💻👍加载场景的方法
- SceneManager.LoadScene() ; 场景同步加载
- SceneManager.LoadSceneSAsyn(); 场景异步加载
- Application.LoadLevel():同步加载
- Application.LoadLevelAsync():异步加载
- Application.LoadLevelAddictive():同步附加式加载
- Application.LoadLevelAddictiveAsync():异步附加式加载
👨💻👍SceneManasger的操作
首先添加场景加载的命名空间==Using UnityEngine.SceneManagement ;==
而后把游戏场景都保存(拖拽)在 Buid setting 里面,相当于存储场景的目录
👍1.同步加载
SceneManager.Load( 序列号) ;
SceneManager.Load( “场景名”) ;
void Start()
{
//SceneManager.LoadScene(1);
//SceneManager.LoadScene("TriggerTest");
}
缺点:加载时造成画面卡帧,原因为,在未加载完成前画面是停止的,所以是卡帧现象
👍2.异步加载
异步加载与协程配套使用,协程也属于异步加载中的一部分
【 优点:不影响主进程的加载】
SceneManager.LoadAsync(序列号)
SceneManager.LoadAsync(“场景名”)
==但是通常我们和协程一起使用:==
StartCoroutine(协程迭代器方法() ); //调用协程
==AsyncOperation== 解析:、
AsyncOperation 该类型翻译为异步操作 ,为下面获得异步场景的返回值
AsyncOperation ao= SceneManager.LoadSceneAsync(2);ao.allowSceneActivation = true 激活场景
ao.progress 场景加载的进度
void Update()
{
if (Input.GetKeyDown(KeyCode.Space)) //按下空格调用协程
{
StartCoroutine(LoadNextAsyncScene());
}
if (Input.anyKeyDown&&ao.progress>=0.9f) //当场景进程加载超过百分之90 激活场景
{
ao.allowSceneActivation = true;
}
}
IEnumerator LoadNextAsyncScene()
{
AsyncOperation ao= SceneManager.LoadSceneAsync(2);
ao.allowSceneActivation = false;
while (ao.progress<0.9f)
{
//当前场景加载进度小于0.9
//当前场景挂起,一直加载,直到加载基本完成
yield return null;
}
Debug.Log("按下任意键继续游戏");
}
⭐🅰️系统路线学习点击跳转⭐
你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!、
- 点赞
- 收藏
- 关注作者
评论(0)