Unity — 打包和读取AB资源,并播放打包的AB序列图!

  • 一:效果图
  • 二:插件下载
  • 三:插件导入!
  • 三:代码!
  • 四:Demo学习
  • 五:关于AB资源打包的学习和拓展

本文提供详细教程

记录遇到的难点并帮助同行的朋友们

坚持以最简单的方法传授和把更好的阅读体验带给你们!



一:效果图



二:插件下载

网盘资源一键下载 (点点关注,不迷路!谢谢支持!!)

提取码:41i6



三:插件导入!

One

Two

Three

Four

Five

Six

Seven

Eight

Nine



三:代码!

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class FrameControll : MonoBehaviour
{public GameObject Xulie; //序列图public FrameTexturesController XulieFrame; //控制图片脚本public Texture2D[] XulieTu; //读取到的图片private AssetBundle AB1;private readonly string ABPath = Application.streamingAssetsPath + "/wwjj";private void Awake(){AB1 = AssetBundle.LoadFromFile(ABPath);XulieTu = AB1.LoadAllAssets<Texture2D>();XulieFrame.Frames = XulieTu;}void Update(){if (Input.GetMouseButtonDown(0)){XulieFrame.Play(0, -1, true);}}
}

控制序列帧播放脚本

using UnityEngine;
using UnityEngine.UI;public class FrameTexturesController: MonoBehaviour
{/// <summary>/// 播放状态/// </summary>private enum PlayStatus{/// <summary>/// 重置状态 (重置后会立即返回到原状态)/// </summary>reset,/// <summary>/// 播放开始状态/// </summary>play,/// <summary>/// 回放开始状态/// </summary>playback,/// <summary>/// 暂停开始状态/// </summary>pause,/// <summary>/// 停止开始状态/// </summary>stop,/// <summary>/// 播放中状态/// </summary>playing,/// <summary>/// 暂停状态/// </summary>paused,/// <summary>/// 停止状态/// </summary>stopped}/// <summary>/// 显示控件/// </summary>[SerializeField]private RawImage rimg_output;/// <summary>/// 帧速度/// </summary>[SerializeField]private int frameRate;/// <summary>/// 帧序列/// </summary>public Texture2D[] _frames;public Texture2D[] _frames1;public Texture2D[] Frames{set{_frames = value;_timePreFrame = 1f / frameRate;}}public Texture2D[] Frames1{set{_frames1 = value;_timePreFrame = 1f / frameRate;}}/// <summary>/// 播放速度/// </summary>private float _speed = 1;public float Speed{get => _speed;set => _speed = value;}/// <summary>/// 是否循环播放/// </summary>private bool _isLoop = false;public bool IsLoop{get => _isLoop;}/// <summary>/// 是否正在播放/// </summary>public bool IsPlaying{get => _playStatus == PlayStatus.play || _playStatus == PlayStatus.playing;}/// <summary>/// 是否正在回放/// </summary>public bool IsPlaybacking{get => (_playStatus == PlayStatus.play || _playStatus == PlayStatus.playing) && _realSpeed < 0;}/// <summary>/// 开始帧的位置/// </summary>private int _startFrameIndex = -1;/// <summary>/// 结束帧的位置(最后一帧的后一帧)/// </summary>private int _endFrameIndex = -1;/// <summary>/// 当前播放位置/// </summary>private int _curFrameIndex;/// <summary>/// 固有帧间隔时间/// </summary>private float _timePreFrame;/// <summary>/// 实际帧间隔时间 := 固有帧间隔时间 / 播放速度/// 即,计算了播放速度以后的帧间隔时间/// </summary>private float _realTimePreFrame;/// <summary>/// 实际播放速度 := 播放速度 * 播放方向/// </summary>private float _realSpeed;/// <summary>/// 当前事件间隔/// </summary>private float _curTime;/// <summary>/// 循环次数/// </summary>private int _loopCount = -1;/// <summary>/// 播放状态/// </summary>private PlayStatus _playStatus = PlayStatus.stop;/// <summary>/// 播放 /// </summary>public void Play(int startIndex = 0, int endIndex = -1, bool isLoop = false){_isLoop = isLoop;_startFrameIndex = startIndex;_endFrameIndex = endIndex == -1 ? _frames.Length : endIndex;_playStatus = PlayStatus.play;}/// <summary>/// 暂停/// </summary>public void Pause() => _playStatus = PlayStatus.pause;/// <summary>/// 回放/// </summary>public void Playback(int startIndex = -1, int endIndex = -1, bool isLoop = false){_isLoop = isLoop;_startFrameIndex = startIndex == -1 ? _frames.Length - 1 : startIndex;;_endFrameIndex = endIndex;_playStatus = PlayStatus.playback;}/// <summary>/// 停止/// </summary>public void Stop() => _playStatus = PlayStatus.stop;private void Update(){CheckPlayStatus();}/// <summary>/// 检查播放状态/// </summary>private void CheckPlayStatus(){switch (_playStatus){case PlayStatus.pause:OnPause();break;case PlayStatus.play:OnPlay();break;case PlayStatus.playback:OnPlayback();break;case PlayStatus.reset:OnReset();break;case PlayStatus.stop:OnStop();break;case PlayStatus.playing:OnPlaying();break;case PlayStatus.paused:break;case PlayStatus.stopped:break;}}/// <summary>/// 暂停开始状态处理/// </summary>private void OnPause(){}/// <summary>/// 播放开始状态处理/// </summary>private void OnPlay(){if (_speed == 0)    // 播放速度如果为0,则进入暂停状态{_playStatus = PlayStatus.pause;return;}_realSpeed = _speed > 0 ? _speed : -_speed;        // 计算实际播放速度_realTimePreFrame = _timePreFrame / _realSpeed;    // 计算实际帧间隔时间_curTime = 0;                                      // 重置当前计时时间_curFrameIndex = _startFrameIndex;                 // 重置回播放起始位置rimg_output.texture = _frames[_curFrameIndex];     // 显示起始画面_curFrameIndex++;                                  // 将位置指针移至下一位_playStatus = PlayStatus.playing;                  // 进入播放状态}/// <summary>/// 回放开始状态处理/// </summary>private void OnPlayback(){if (_speed == 0)    // 播放速度如果为0,则进入暂停状态{_playStatus = PlayStatus.pause;return;}_realSpeed = _speed < 0 ? _speed : -_speed;        // 计算实际播放速度_realTimePreFrame = _timePreFrame / (-_realSpeed); // 计算实际帧间隔时间_curTime = 0;                                      // 重置当前计时时间_curFrameIndex = _startFrameIndex;                 // 重置回播放起始位置rimg_output.texture = _frames[_curFrameIndex];     // 显示起始画面_curFrameIndex--;                                  // 将位置指针移至下一位_playStatus = PlayStatus.playing;                  // 进入播放状态}/// <summary>/// 重置状态处理/// </summary>private void OnReset(){}/// <summary>/// 停止开始状态处理/// </summary>private void OnStop(){//rimg_output.texture = null;_playStatus = PlayStatus.stopped;}/// <summary>/// 播放中状态处理/// </summary>private void OnPlaying(){if (_curTime < _realTimePreFrame)    // 当前计时未达到实际帧间隔时间{_curTime += Time.deltaTime;      // 不做任何操作,仅累加计时时间}else{if (_curFrameIndex != _endFrameIndex)                      // 当前帧未到达结束位置{rimg_output.texture = _frames[_curFrameIndex];       // 显示当前帧画面_curFrameIndex += _realSpeed > 0 ? 1 : -1;           // 将位置指针移至下一位_curTime = 0;}else{if (_isLoop)                                           // 启用循环播放{Play(_startFrameIndex, _endFrameIndex, true);    // 重新播放}else{Pause();                                          // 暂停播放}}}}
}



四:Demo学习

Demo一键下载 (点点关注,不迷路!谢谢支持!!)

提取码:9msb




五:关于AB资源打包的学习和拓展

在后期的项目中,用到了很多AB资源打包和旋转序列图的功能,会在后期慢慢出教程,我们需要一步一步的学习,关于序列图操作的拓展也会在后面讲解!谢谢大家支持!


拥有自己的服务器

让开发工作不再难


MyBe

阿里云 —ESC服务器部署和搭建购买方式(图文并排,一目了然)

一键领取阿里全产品2000元优惠券大礼包 (新手必得享超值优惠)


本博客为非营利性个人原创
所刊登的所有作品的著作权均为本人所拥有
本人保留所有法定权利,违者必究!
对于需要复制、转载、链接和传播博客文章或内容的
请及时和本博主进行联系,留言,Email: ChinazJacob@163.com
————————————————————————————————
版权声明:对于经本博主明确授权和许可使用文章及内容的
使用时请注明文章或内容出处并注明网址
转载请附上原文出处链接及本声明。

Unity 打包和读取AB资源,并播放打包的AB序列图!相关推荐

  1. 周报——网络教学资源平台设计之课程管理系统序列图

              从最初的选实训题目到联系老师,了解题目的需求,然后后是我们小组一起分析,这个项目应该具有的功能,最后分工到每个人.至今已有三周的时间,在这个过程中我学到了很多,让我对"纸 ...

  2. Unity打包AB资源(傻瓜式)

    /// <summary>/// 简易的ab打包方法/// </summary>/// <param name="PathFolder:要进行打包的目录,这里传 ...

  3. unity动态读取外部音乐并播放

    使用版本2020. 目标:在unity工程中读取工程之外的一个音乐文件,进行播放.可以在工程外动态随时修改音乐歌曲. ---如果不想看文字,或者看不懂的,也可以看视频教程---我公众号里有.公众号:u ...

  4. 随笔-Unity部分版本加载AB资源时崩溃问题

    首先描述一下崩溃的现象: 因为之前使用的版本一直都是Unity2020.3.0(LTS),是一个相对稳定的版本,后来因为想尝试一下新版本的一些新特性,就讲Unity升级到了2021.2.7,但在后面的 ...

  5. Addressable Asset System(进阶版AB)和AssetBundle(以下简称AB)制作的资源管理系统的对比

    介绍 AB作为之前Unity主推的资源管理工作流,可以把模型.贴图.预制体.声音.甚至整个场景都打入压缩包中,然后在游戏过程中再加载.使用他的主要目的有以下几点:1.统一的资源管理.2.做分包.3.热 ...

  6. 【Unity性能优化】静态资源优化——Audio优化

    文章目录 写在前面 1. 前言 2. 使用Asset Checker进行资源检测 3. Audio优化 3.1 启用Force to Mono 3.2 压缩格式与采样率 3.3 音乐加载类型 3.4 ...

  7. Unity3d之AssetBundle打包与读取

    一.创建Assetbundle 在unity3d开发的游戏中,无论模型,音频,还是图片等,我们都做成Prefab,然后打包成Assetbundle,方便我们后面的使用,来达到资源的更新. 一个Asse ...

  8. Unity 之 实现读取代码写进Word文档功能实现 -- 软著脚本生成工具

    Unity 之 实现读取代码写进Word文档功能 前言 一,实现步骤 1.1 逻辑梳理 1.2 用到工具 二,实现读写文件 2.1 读取目录相关 2.2 读写文件 三,编辑器拓展 3.1 编辑器拓展介 ...

  9. java 加载dll后打包_让Jacob从当前路径读取dll文件及相关打包方法

    让Jacob从当前路径读取dll文件及相关打包方法 独立观察员2013.08.12 Jacob  LibraryLoader.class修改版代码 功能:让jacob可在当前路径下的dll文件夹内读取 ...

最新文章

  1. 领域驱动设计 敏捷_反馈失败:发现敏捷数据驱动的致命弱点的风险
  2. Flume的安装与配置
  3. php imagefill,PHP 图像填充 imagefill、imagefilledarc 与 imagefilledrectangle() 函数
  4. 全球及中国绿色建筑产业规模现状与未来走势分析报告2022版
  5. Selenium Xpath元素无法定位 NoSuchElementException: Message: no such element: Unable to locate element
  6. Vue2.0增删改查案例(Vue+Less+LocalStorage)
  7. 信息学奥赛一本通(1143:最长最短单词)
  8. lamp软件包安装(rpm)
  9. UI实用素材|电子商务界面模板
  10. 招人啦!安卓/Java/数据库/测试等一大波岗位袭来
  11. vb用数组方式快速导出MSFlexGrid表格数据到Excel表格中
  12. 浅谈ASP.NET客户端回调
  13. IntelliJ IDEA如何去掉xml文件背景色
  14. 数值计算——追赶法求解三对角方程组(附代码)
  15. 网站常用色彩表(网络搜集整理)
  16. 【网络营销】CPA、CPS、CPM、CPT、CPC 是什么
  17. 惠州龙门大米飘香 国稻种芯-中国水稻节:广东乡村振兴样板
  18. 5.交换机环路与VLAN
  19. 【笔记】关于汉字注音 汉字转拼音,首拼
  20. NVP6124I北京冠宇铭通 芯片

热门文章

  1. 彻底搞懂 offsetX、scrollX、clientX 的区别
  2. 2017-9-17 PAT考试记
  3. [信息系统项目管理师-2023备考]信息化与信息系统(一)
  4. Deepstream 6.1.1 以及 Python Binding Docker 安装
  5. 高等代数_证明_不同特征值的特征向量线性无关
  6. 批量友情链接监控检测查询工具
  7. 一文解惑 | crm是什么意思啊
  8. Linux系统firewalld防火墙的进阶操作(日志保存 IP网段 ssh服务)
  9. 苏州初中生计算机学校有哪些,盘点苏州有哪些优秀寄宿中学
  10. UML关联关系和组合关系以及聚合关系的区别