【Unity每日一记】资源加载相关你掌握多少?

这篇具有很好参考价值的文章主要介绍了【Unity每日一记】资源加载相关你掌握多少?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【Unity每日一记】资源加载相关你掌握多少?,# Unity精华一记,unity,游戏引擎,ui,c#


👨‍💻个人主页:@元宇宙-秩沅

👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!

👨‍💻 本文由 秩沅 原创

👨‍💻 收录于专栏unity每日一记

⭐🅰️推荐文章⭐


⭐【软件设计师高频考点暴击】

⭐【Unityc#专题篇】之c#系统化大礼包】

⭐【unity数据持久化】数据管理类_PlayerPrfs

⭐【unity本站最全系列】unity常用API大全一篇文章足以
【Unity每日一记】资源加载相关你掌握多少?,# Unity精华一记,unity,游戏引擎,ui,c#


⭐⭐




🎶Resources资源动态加载


【Unity每日一记】资源加载相关你掌握多少?,# Unity精华一记,unity,游戏引擎,ui,c#

同步加载

5种资源加载的方式,Resource加载介绍


  • Resources(只能加载Resources目录中的资源)
  • AssetBundle(只能加载AB资源,当前设备允许访问的路径都可以)
  • WWW(可以加载任意处资源,包括项目外资源(如远程服务器))
  • AssetDatabase(只能加载Assets目录下的资源,但只能用于Editor)
  • UnityWebRequest(可以加载任意处资源,是WWW的升级版本)

资源加载适用于需要加载资源较多的 情况就不用一个一个的拖拽进去



关键字:@ ,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#中的回收机制是系统自动回收的,有多种回收机制,不像其他语言需要手动回收

    注意:
    //预设体对象加载需要实例化
    //其它资源加载一般直接用
    #endregion

Resource资源加载操作


加载资源前首先需要在project面板中创建Resource名字的文件夹,为固定文件夹用于资源加载

以加载AudioClip类型的资源为例:

  • 根目录加载 Resource.Load< AudioClip>(“voice”);
  • 子目录加载 Resource.Load ( @ " 子目录名/ voice") ;
  • 另一种形式:
    Object xx = Resource.Load(“voice”);
    AudioClip yy as xx ; // 显性类型转换 ,前提是二者兼容
  • 加载同类型所有资源的方法:
    ①根目录加载: AudioClip [] xx = Resource.AllLoad(" “) ;
    ②子目录加载:AudioClip [] yy = Resource.AllLoad(” 子目录名");

  • 1.预设体对象
        Object obj = Resources.Load("Cube");
        Instantiate(obj);
  • 2.音效资源
        Object obj3 = Resources.Load("Music/BKMusic");
        //我们不需要实例化 音效切片 我们只需要把数据 赋值到正确的脚本上即可
        audioS.clip = obj3 as AudioClip;
        audioS.Play();
  • 3.文本资源

文本资源支持的格式——.txt .xml .bytes .json .html .csv …

        TextAsset ta = Resources.Load("Txt/Test") as TextAsset;
        //文本内容
         ta.text
        //字节数据组 
         ta.bytes);
  • 4.图片
        tex = Resources.Load("Tex/TestJPG") as Texture;

异步加载

如果我们加载过大的资源可能会造成程序卡顿
异步加载 就是内部新开一个线程进行资源加载 不会造成主线程卡顿

  • Resources.LoadAsync(“XXX”);
  • 注意:

异步加载 不能马上得到加载的资源 至少要等待一帧

直接异步加载——适用于加载单个资源

//通过事件监听
    ResourceRequest rq = Resources.LoadAsync<Texture>("Tex/TestJPG")
    rq.completed += LoadOver;
    //completed 是 ResourceRequest 中的委托    
    // AsyncOperation 是 ResourceRequest 的父类
    private void LoadOver( AsyncOperation rq)
    {
       //在事件中添加结束标识逻辑,这样我们就知道异步加载完成了
        print("加载结束");
        //加载完成后 会保存在 ResourceRequest类中的 asset Object类型成员里
        //此时实现赋值
        picture = (rq as ResourceRequest).asset as Texture;
    }

配套协程异步加载——适用于加载多个资源

//通过协程的调度器自己判断是否加载结束
   
    StartCoroutine(Load());
    IEnumerator Load()
    {
         ResourceRequest rq = Resources.LoadAsync<Texture>("Tex/TestJPG");
         yield return rq;
   // yield return rq会自己判断 该资源是否加载完毕了,加载完毕过后才继续执行后面的代码 ,因为ResourceRequest 也是YieldInstruction的子类
   
       
        //-------------------------------
         //isDone 和 progress API的应用
        while(!rq.isDone)
        {
            //打印当前的 加载进度 
            print(rq.progress);
            yield return null;
        }
        //--------------------------------
        picture = rq.asset as Texture;

    }



资源加载器

利用异步直接加载和委托的使用构成简单的资源加载器

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
//-------------------------------------
//—————————————————————————————————————
//___________项目:       ______________
//___________功能:  简单的资源管理器
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
public class ResourcesControl 
{
    static  private ResourcesControl control;
    static  public ResourcesControl Control => control;
    private ResourcesControl()
    {
    }

    public void AddResources<T>(string name ,UnityAction<T> source ) where T : Object
    {
        ResourceRequest yb = Resources.LoadAsync<T>(name);
        yb.completed += (reO) =>
        {
            source( (reO as ResourceRequest).asset as T );
        };
    }
}

//外部调用
private void Start()
{
   GameObject shootball; 
        ResourcesControl.Control.AddResources<GameObject>("Profabs/ball",(sphere)=> {
            shootball = sphere;
        } );
 }

卸载资源

【Unity每日一记】资源加载相关你掌握多少?,# Unity精华一记,unity,游戏引擎,ui,c#

  • Resources多次重复加载不会浪费内存
    但是 会浪费性能(每次加载都会去查找取出,始终伴随一些性能消耗)

  • 1.卸载指定资源
    Resources.UnloadAsset 方法
    注意:

     它只能用于一些 不需要实例化的内容 比如 图片 和 音效 文本等
     一般情况下很少单独使用它
    
  • 2.卸载未使用的资源

    一般在过场景时和GC一起使用
    Resources.UnloadUnusedAssets();
    GC.Collect();


⭐🅰️系统路线学习点击跳转⭐


⭐【Unityc#专题篇】之c#进阶篇】

⭐【Unityc#专题篇】之c#核心篇】

⭐【Unityc#专题篇】之c#基础篇】

⭐【Unity-c#专题篇】之c#入门篇】

【Unityc#专题篇】—进阶章题单实践练习

⭐【Unityc#专题篇】—基础章题单实践练习

【Unityc#专题篇】—核心章题单实践练习


你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!


【Unity每日一记】资源加载相关你掌握多少?,# Unity精华一记,unity,游戏引擎,ui,c#文章来源地址https://www.toymoban.com/news/detail-657330.html


到了这里,关于【Unity每日一记】资源加载相关你掌握多少?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Unity每日一记】摄像机相关代码API大全

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 :Unity基础实战 直接作为子对象课实现简单跟随 通过向量的加减更新相机位置来保持简单的跟随 差值位置的实时更新 😶‍🌫️步骤:

    2024年02月12日
    浏览(44)
  • 【Unity每日一记】常见的类你都掌握了吗,没有就过来看看吧

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unity每日一记 ⭐【Unityc#专题篇】之c#系统化大礼包】 ⭐【unity数据持久化】数据管理类_PlayerPrfs ⭐【unity本站最全系列】unity常用API大全

    2024年02月11日
    浏览(49)
  • 【Unity每日一记】如何从图片中切割对象(一键切割图集的方法你掌握了吗?)

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unity每日一记 ⭐【软件设计师高频考点暴击】 ⭐【Unityc#专题篇】之c#系统化大礼包】 ⭐【unity数据持久化】数据管理类_PlayerPrfs ⭐【u

    2024年04月09日
    浏览(69)
  • 【Unity每日一记】关于物体(敌方)检测—(向量点乘相关)

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unity每日一记 ⭐【Unityc#专题篇】之c#系统化大礼包】 ⭐【unity数据持久化】数据管理类_PlayerPrfs ⭐【unity本站最全系列】unity常用API大全

    2024年02月13日
    浏览(47)
  • 【unity每日一记】那些动作基础你还记得吗—移动和旋转相关

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unity每日一记 ⭐【Unityc#专题篇】之c#系统化大礼包】 ⭐【unity数据持久化】数据管理类_PlayerPrfs ⭐【unity本站最全系列】unity常用API大全

    2024年02月11日
    浏览(44)
  • 【unity每日一记】unity中常见的特性大全

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unity每日一记 ⭐【Unityc#专题篇】之c#系统化大礼包】 ⭐【unity数据持久化】数据管理类_PlayerPrfs ⭐【unity本站最全系列】unity常用API大全

    2024年02月11日
    浏览(89)
  • 【Unity每日一记】Unity不知道如何选择,移动方法,来瞧瞧

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unity每日一记 ⭐【软件设计师高频考点暴击】 ⭐【Unityc#专题篇】之c#系统化大礼包】 ⭐【unity数据持久化】数据管理类_PlayerPrfs ⭐【u

    2024年04月15日
    浏览(51)
  • 【Unity每日一记】WheelColider组件汽车游戏的关键

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unity每日一记 ⭐【软件设计师高频考点暴击】 ⭐【Unityc#专题篇】之c#系统化大礼包】 ⭐【unity数据持久化】数据管理类_PlayerPrfs ⭐【u

    2024年02月10日
    浏览(43)
  • 【unity每日一记】 Camera相机+ Screen屏幕+动画机

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unity每日一记 ⭐【Unityc#专题篇】之c#系统化大礼包】 ⭐【unity数据持久化】数据管理类_PlayerPrfs ⭐【unity本站最全系列】unity常用API大全

    2024年02月10日
    浏览(72)
  • 【Unity每日一记】Unity中的计时器——4种方法的实现

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unity每日一记 ⭐【软件设计师高频考点暴击】 ⭐【Unityc#专题篇】之c#系统化大礼包】 ⭐【unity数据持久化】数据管理类_PlayerPrfs ⭐【u

    2024年02月06日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包