iis服务器助手广告
返回顶部
首页 > 资讯 > 精选 >Unity UI怎么实现循环播放序列图
  • 413
分享到

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

2023-06-20 20:06:42 413人浏览 安东尼
摘要

这篇文章主要讲解了“Unity UI怎么实现循环播放序列图”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Unity UI怎么实现循环播放序列图”吧!一、思路1.获取播放组件一般我们使用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怎么实现循环播放序列图这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: Unity UI怎么实现循环播放序列图

本文链接: https://www.lsjlt.com/news/299951.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • Unity UI实现循环播放序列图
    一、思路 1.获取播放组件 一般我们使用UI的Raw Image或者Image来显示图片 Image:仅支持Sprite类型图片,需要更改图片的格式(注意:在StreamingAss...
    99+
    2024-04-02
  • Unity UI怎么实现循环播放序列图
    这篇文章主要讲解了“Unity UI怎么实现循环播放序列图”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Unity UI怎么实现循环播放序列图”吧!一、思路1.获取播放组件一般我们使用UI的...
    99+
    2023-06-20
  • js实现列表自动滚动循环播放
    本文实例为大家分享了js实现列表自动滚动循环播放的具体代码,供大家参考,具体内容如下 1.实现效果图 鼠标移入,暂停滚动; 鼠标移出,继续滚动; 2.原理 要实现无缝衔接,在原有u...
    99+
    2024-04-02
  • JavaScript实现循环轮播图
    本文实例为大家分享了JavaScript实现循环轮播图的具体代码,供大家参考,具体内容如下 案例演示: 1.点击下面图标,图片进行轮播 2.图片轮播完,接着轮播到第一张 (代码内部...
    99+
    2024-04-02
  • js如何实现列表自动滚动循环播放
    这篇文章主要介绍了js如何实现列表自动滚动循环播放的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇js如何实现列表自动滚动循环播放文章都会有所收获,下面我们一起来看看吧。1.实现效果图鼠标移入,暂停滚动; 鼠标移...
    99+
    2023-07-02
  • 基于OpenCV实现视频循环播放
    目录介绍1.Python+OpenCV实现2.C+++OpenCV实现补充介绍 本文将介绍基于OpenCV实现视频的循环播放。 有以下三个步骤: 首先设置一个frame的设置参数fr...
    99+
    2024-04-02
  • js怎么实现无限循环轮播图效果
    小编给大家分享一下js怎么实现无限循环轮播图效果,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!知识要点1.实现无限循环的原理:以...
    99+
    2024-04-02
  • JAVA怎么实现循环队列
    在Java中,可以使用数组和指针来实现循环队列。以下是一个简单的循环队列的实现示例:```javapublic class Circ...
    99+
    2023-09-23
    JAVA
  • html怎么实现轮播图自动播放
    这篇文章主要介绍“html怎么实现轮播图自动播放”,在日常操作中,相信很多人在html怎么实现轮播图自动播放问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”html怎么实现轮播...
    99+
    2024-04-02
  • vue怎么使用el-table实现循环轮播数据列表
    这篇文章主要介绍“vue怎么使用el-table实现循环轮播数据列表”,在日常操作中,相信很多人在vue怎么使用el-table实现循环轮播数据列表问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue怎么使用...
    99+
    2023-06-30
  • 使用JavaScript实现循环轮播图的案例
    这篇文章主要介绍了使用JavaScript实现循环轮播图的案例,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体内容如下案例演示:点击下面图标,图片进行轮播2.图片轮播完,接...
    99+
    2023-06-14
  • Android中使用VideoView实现一个循环播放功能
    本篇文章给大家分享的是有关Android中使用VideoView实现一个循环播放功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。具体如下:package com.hangch...
    99+
    2023-05-31
    android videoview roi
  • 怎么用vue整合mint-ui实现轮播图
    这篇文章主要介绍“怎么用vue整合mint-ui实现轮播图”,在日常操作中,相信很多人在怎么用vue整合mint-ui实现轮播图问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用vue整合mint-ui实现...
    99+
    2023-07-04
  • vue+video.js怎么实现视频播放列表
    这篇文章主要讲解了“vue+video.js怎么实现视频播放列表”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue+video.js怎么实现视频播放列表”吧!具体内容如下1.引入Video...
    99+
    2023-06-25
  • C语言实现顺序循环队列实例
    目录一、队列和循环队列基本概念二、代码实操总结一、队列和循环队列基本概念 队列: 和栈相反,队列是一种先进先出(FIFO)的线性表。只允许在一端插入,在另一端删除。 允许插入的叫&...
    99+
    2024-04-02
  • Python实现for循环倒序遍历列表
    目录for倒序遍历列表for循环(正序/倒序)1.正序2.倒序for倒序遍历列表 数字列表,range方法构建列表: for value in range(5, -1, -1):  ...
    99+
    2024-04-02
  • HTML5如何通过Vedio标签实现视频循环播放
    小编给大家分享一下HTML5如何通过Vedio标签实现视频循环播放,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!要实现网页播放视频在HTML5以前是通过<e...
    99+
    2023-06-09
  • Java动态循环队列怎么实现
    这篇文章将为大家详细讲解有关Java动态循环队列怎么实现,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、队列1.1 定义队列 (Queue) 是一种限定性的有序线性表,它只允许在表的一端插入元素,而在另...
    99+
    2023-06-15
  • vue 使用el-table循环轮播数据列表的实现
    目录使用el-table循环轮播数据列表vue el-table简单轮播使用el-table循环轮播数据列表 因为是在内网开发,安装插件导包进去非常麻烦,有条件的可以去下载插件实现,...
    99+
    2024-04-02
  • C语言如何实现顺序循环队列
    这篇文章将为大家详细讲解有关C语言如何实现顺序循环队列,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、队列和循环队列基本概念队列:和栈相反,队列是一种先进先出(FIFO)的线性表。只允许在一端插入,在另...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作