我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Unity UI怎么实现循环播放序列图

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Unity UI怎么实现循环播放序列图

这篇文章主要讲解了“Unity UI怎么实现循环播放序列图”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Unity UI怎么实现循环播放序列图”吧!

一、思路

1.获取播放组件

一般我们使用UI的Raw Image或者Image来显示图片

Image:仅支持Sprite类型图片,需要更改图片的格式(注意:在StreamingAssets文件夹里的图片是更改不了类型的,在这里必须放在Assets/Resources路径下

Unity UI怎么实现循环播放序列图

Raw Image:支持图片的原格式,一般我们将其转换成 Texture2D使用

2.加载图片

Resources提供了一个Load方法,可以从Resources文件夹里加载图片。

!!!!!注意一定要在Resources路径下,否则找不到

Resources.Load(path, typeof(Texture2D)) as Texture2D;Resources.Load(path, typeof(Sprite)) as Sprite;

3.循环加载

记录当前到哪一张,判断是不是到了最后一张,是,加载第一张

二、示例代码

using System;using System.Collections;using System.Collections.Generic;using System.IO;using UnityEditor;using UnityEngine;using UnityEngine.UI; public class FramesController : MonoBehaviour{    [System.Serializable]    public struct NameRules    {        [Header("基础名称(基础名字就是序列图名称中绝对相同的)")]        public string BaseName;         [Header("有效数字的位数(代表排序的有效数字位数)")]        public int SignificantDigits;         [Header("开始数(开始的数)")]        public int Start;         [Header("总数(一共多少张图片)")]        public int Count;         public NameRules(string _name,int _digits,int _start,int _count)        {            BaseName = _name;            SignificantDigits = _digits;            Start = _start;            Count = _count;        }    }    //图片类型    public enum WidgetType    {        Image,        RawImage    }    ///     [Header("图片显示控件(RawImage[支持原始图片类型] OR Image[仅支持Sprite图片])")]    public WidgetType ImgWidget = WidgetType.RawImage;     //要求文件夹必须在Assets/Resources文件夹里面,ModeName填写后面到文件夹的路径    [Header("模式名称(和文件夹名称相同,路径必须在Resources里面)")]    public string ModeName = "请填写文件夹路径";     [Header("命名规则(序列图的命名规则)")]    public NameRules Rules;     [Header("FPS(一秒内显示多少张图片)")]    public int FramesPerSecond = 24;     [Header("循环播放(默认开启)")]    public bool Loop=true;     [Header("UI可用时自动播放(默认开启)")]    public bool PlayOnWake=true;        /// <summary>    /// 私有变量    /// </summary>    /// /// 显示图片的UI控件    private Image ImageComponent = null;    private RawImage RawImgComponent = null;         private int currentFrames;//当前播放的图片帧数    private float showTime = 0.0f;    private float rateTime = 0.0f;     private bool Playing;     // Start is called before the first frame update    void Start()    {        InitWidget();    }    // Update is called once per frame    void Update()    {        if (!Playing) return;        showTime += Time.deltaTime;        if (showTime >= rateTime)        {            showTime = 0;            currentFrames++;            if (currentFrames >= Rules.Count)            {                if(Loop)                {                    currentFrames = Rules.Start;                }else                {                    Playing = false;                }            }            if(ImgWidget == WidgetType.Image)            {                ImageComponent.sprite = GetCurrentSprite();            }            else            {                RawImgComponent.texture = GetCurrentTexture2D();            }        }    }     /// /更换播放的序列图    public void ChangeMode(string _mode, NameRules _rules, int _fps=24)    {        ModeName = _mode;        Rules=_rules;        FramesPerSecond = _fps;         currentFrames = Rules.Start;        rateTime = 1.0f / FramesPerSecond;        if (ImgWidget == WidgetType.Image)        {            ImageComponent.sprite = GetCurrentSprite();        }        else        {            RawImgComponent.texture = GetCurrentTexture2D();        }    }    //开始播放    public void Play(bool needLoop=true)    {        Playing = true;        Loop = needLoop;    }    //停止播放    public void Stop()    {        Playing = false;    }     private Sprite GetCurrentSprite()    {        /这个是重点,显示不出来图片的话,大概率问题在这个函数        string formatStr = "{0:D" + Rules.SignificantDigits + "}";//保留有效数字,不够前面加0        string imageName = ModeName + "/" + Rules.BaseName + string.Format(formatStr, currentFrames);        return LoadSprite(imageName);    }     private Texture2D GetCurrentTexture2D()    {        /这个是重点,显示不出来图片的话,大概率问题在这个函数        string formatStr = "{0:D"+ Rules .SignificantDigits+ "}";//保留有效数字,不够前面加0        string imageName = ModeName+"/"+Rules.BaseName + string.Format(formatStr, currentFrames);        return LoadTexture2D(imageName);    }     private Texture2D LoadTexture2D(string path)    {        return Resources.Load(path, typeof(Texture2D)) as Texture2D;    }     private Sprite LoadSprite(string path)    {        return Resources.Load(path, typeof(Sprite)) as Sprite;    }    /// <summary>    /// 初始化图片显示组件    /// </summary>    private void InitWidget()    {        if(ImgWidget== WidgetType.Image)        {            ImageComponent = transform.gameObject.GetComponent<Image>();            if(ImageComponent==null)            {                EditorBox("此组件上没有找到<Image>!请检查后重试!");                EditorStop();            }        }        else        {            RawImgComponent = transform.gameObject.GetComponent<RawImage>();            if (RawImgComponent == null)            {                EditorBox("此组件上没有找到<RawImage>!请检查后重试!");                EditorStop();            }        }        Playing = PlayOnWake;        currentFrames = Rules.Start;        rateTime = 1.0f / FramesPerSecond;        if (ImgWidget == WidgetType.Image)        {            ImageComponent.sprite = GetCurrentSprite();        }        else        {            RawImgComponent.texture = GetCurrentTexture2D();        }    }     /// <summary>    /// Unity编辑器的MessageBox    /// </summary>    private void EditorBox(string msg)    {#if UNITY_EDITOR        EditorUtility.DisplayDialog("FramesController", msg, "确认", "取消");#endif    }    /// <summary>    /// Unity编辑器停止当前正在运行的程序    /// </summary>    private void EditorStop()    {#if UNITY_EDITOR        UnityEditor.EditorApplication.isPlaying = false;#endif    }}

Unity UI怎么实现循环播放序列图

Unity UI怎么实现循环播放序列图Unity UI怎么实现循环播放序列图

感谢各位的阅读,以上就是“Unity UI怎么实现循环播放序列图”的内容了,经过本文的学习后,相信大家对Unity UI怎么实现循环播放序列图这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Unity UI怎么实现循环播放序列图

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Unity UI怎么实现循环播放序列图

这篇文章主要讲解了“Unity UI怎么实现循环播放序列图”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Unity UI怎么实现循环播放序列图”吧!一、思路1.获取播放组件一般我们使用UI的
2023-06-20

Android实现图片循环播放的实例方法

很多时候,我们需要展示在客户端展示图片,而且是动态显示,即不停地自行切换图片。下面我们来看一下具体的实现方法。首先,我们需要在XML... 很多时候,我们需要展示在客户端展示图片,而且是动态显示,即不停地自行切换图片。下面我们来看一下
2022-06-06

js如何实现列表自动滚动循环播放

这篇文章主要介绍了js如何实现列表自动滚动循环播放的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇js如何实现列表自动滚动循环播放文章都会有所收获,下面我们一起来看看吧。1.实现效果图鼠标移入,暂停滚动; 鼠标移
2023-07-02

Android 使用ViewPager实现图片左右循环滑动自动播放

ViewPager这个小demo实现的是可以左右循环滑动图片,下面带索引,滑到最后一页在往右滑动就要第一页,第一页往左滑动就到最后一页,先上效果图,用美女图片是我一贯的作风,呵呵1. 首先看一些layout下的xml
2022-06-06

JAVA怎么实现循环队列

在Java中,可以使用数组和指针来实现循环队列。以下是一个简单的循环队列的实现示例:```javapublic class CircularQueue {private int[] queue;private int front;priva
2023-09-23

vue怎么使用el-table实现循环轮播数据列表

这篇文章主要介绍“vue怎么使用el-table实现循环轮播数据列表”,在日常操作中,相信很多人在vue怎么使用el-table实现循环轮播数据列表问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue怎么使用
2023-06-30

怎么用vue整合mint-ui实现轮播图

这篇文章主要介绍“怎么用vue整合mint-ui实现轮播图”,在日常操作中,相信很多人在怎么用vue整合mint-ui实现轮播图问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用vue整合mint-ui实现
2023-07-04

vue+video.js怎么实现视频播放列表

这篇文章主要讲解了“vue+video.js怎么实现视频播放列表”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue+video.js怎么实现视频播放列表”吧!具体内容如下1.引入Video
2023-06-25

Java动态循环队列怎么实现

这篇文章将为大家详细讲解有关Java动态循环队列怎么实现,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、队列1.1 定义队列 (Queue) 是一种限定性的有序线性表,它只允许在表的一端插入元素,而在另
2023-06-15

Android实现基于ViewPager的无限循环自动播放带指示器的轮播图CarouselFigureView控件

最近用到需要无限轮播自动播放的轮播轮播图,网上感觉都有这样那样的问题,于是自己写了一个通用的控件CarouselFigureView。 特点: 1.可以轮播view可以自己定义,不一定是要是ImageView2.指示器默认显示,但是可以隐藏
2022-06-06

小程序怎么实现轮播图

这篇文章主要介绍“小程序怎么实现轮播图”,在日常操作中,相信很多人在小程序怎么实现轮播图问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”小程序怎么实现轮播图”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!使用
2023-06-26

Android怎么实现无限循环和自动轮播

要实现Android中的无限循环和自动轮播,可以使用ViewPager和PagerAdapter来实现。下面是实现的步骤:1. 创建一个ViewPager对象和一个PagerAdapter对象。2. 在PagerAdapter中重写getC
2023-10-18

redis怎么实现图片流式播放缓存

要实现图片流式播放缓存,可以使用Redis的List数据结构和Bitmap操作。首先,将图片URL按照顺序加入到Redis的List中,即将每个图片URL元素存储在List中。可以使用LPUSH命令将图片URL添加到List的头部。然后,使
2023-09-04

微信小程序怎么实现播放音频

这篇文章主要介绍“微信小程序怎么实现播放音频”,在日常操作中,相信很多人在微信小程序怎么实现播放音频问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”微信小程序怎么实现播放音频”的疑惑有所帮助!接下来,请跟着小编
2023-06-19

怎么用小程序实现轮播图

这篇文章主要讲解了“怎么用小程序实现轮播图”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用小程序实现轮播图”吧!那个先上效果:step1:页面index.wxml代码