美文网首页
Unity播放Gif动画

Unity播放Gif动画

作者: 游戏开发小Y | 来源:发表于2017-06-16 15:24 被阅读1658次

Unity目前对图形图像的支持还不是很完善,支持的图形文件格式有 PSD, TIFF, JPG, TGA, PNG, GIF, BMP, IFF, PICT等,但却不支持Gif动画。但是经过查阅资料发现原来Unity可以支持Gif动画。

1,通过Image.FrameDimension方法可以获取此 Image 中帧的维数。

2,获取到图片的帧数,然后按帧播放就行了.

建个工程,测试下,首先要获取到Gif的动画的帧数,获取帧数在Image类下有相应的方法,这个需要导入系统的插件,复制”"System.Drawing.dll" file in the "C:\Program Files (x86)\Unity\Editor\Data\Mono\lib\mono\2.0"文件到"Assets" 文件夹下面。获取图片的帧数,然后按帧数将像素点绘制到图片上就OK了。如何获取帧数呢?

  /// <summary>
    /// gif转换图片
    /// </summary>
    /// <param name="image"></param>
    /// <returns></returns>
    List<Texture2D> GifToTextureByCS(Image image)
    {
        List<Texture2D> texture2D = null;
        if (null != image)
        {
            texture2D = new List<Texture2D>();
            //Debug.LogError(image.FrameDimensionsList.Length);
            //image.FrameDimensionsList.Length = 1;
            //根据指定的唯一标识创建一个提供获取图形框架维度信息的实例;
            FrameDimension frameDimension = new FrameDimension(image.FrameDimensionsList[0]);
            //获取指定维度的帧数;
            int framCount = image.GetFrameCount(frameDimension);
            for (int i = 0; i < framCount; i++)
            {
                //选择由维度和索引指定的帧;
                image.SelectActiveFrame(frameDimension, i);
                var framBitmap = new Bitmap(image.Width, image.Height);
                //从指定的Image 创建新的Graphics,并在指定的位置使用原始物理大小绘制指定的 Image;
                //将当前激活帧的图形绘制到framBitmap上;
                System.Drawing.Graphics.FromImage(framBitmap).DrawImage(image, Point.Empty);
                var frameTexture2D = new Texture2D(framBitmap.Width, framBitmap.Height);
                for (int x = 0; x < framBitmap.Width; x++)
                {
                    for (int y = 0; y < framBitmap.Height; y++)
                    {
                        //获取当前帧图片像素的颜色信息;
                        System.Drawing.Color sourceColor = framBitmap.GetPixel(x, y);
                        //设置Texture2D上对应像素的颜色信息;
                        frameTexture2D.SetPixel(x, framBitmap.Height - 1 - y, new Color32(sourceColor.R, sourceColor.G, sourceColor.B, sourceColor.A));
                    }
                }
                frameTexture2D.Apply();
                texture2D.Add(frameTexture2D);
            }
        }
        return texture2D;
    }

将所有帧率保存到 List<Texture2D>中,按帧绘制就可以了!

项目地址: git@git.oschina.net:wuzhang/GiftToTexture.git

文章出处:http://www.cnblogs.com/wuzhang/p/wuzhang20170305.html

相关文章

  • Unity播放Gif动画

    Unity目前对图形图像的支持还不是很完善,支持的图形文件格式有 PSD, TIFF, JPG, TGA, PNG...

  • 2019-03-06 Unity助手之gif转动画序列图-小软件

    网上很多gif动画,但是不能直接在unity里进行播放,所以开发了这个小软件,可以将gif动图转换成动画序列图形式...

  • 实现动画方式深度解析

    实现动画方式深度解析(一) —— 播放GIF动画(一)实现动画方式深度解析(二) —— 播放GIF动画之框架FLA...

  • iOS-播放gif动画文件(OC方法)

    iOS-.gif动画文件的播放 前言 播放gif动画的方法有多种: 将gif图片分解成多张图片使用UIImageV...

  • Gif动画播放问题

    项目优化中使用GIF循环播放,然后整一个定时2s,到时间就跳转,这样有问题,然后优化代码,我使用的是YYAnima...

  • iOS 播放 gif 动画

    使用UIWebView播放 将GIF图片分解成多张PNG图片,使用UIImageView播放

  • iOS 播放Gif动画

    1,使用ImageIO框架中的方法将图片数据解析成图片数组,使用UIImageView的帧动画接口进行播放 fun...

  • Unity 动画系列三 Animator Controller

    参考Unity动画系统详解3:如何播放、切换动画?[https://zhuanlan.zhihu.com/p/14...

  • ImageMagick之制作gif图片

    ImageMagick之制作gif图片 gif动画由一系列图片按照一定的时间间隔来播放的,每张单独的图片作为gif...

  • Android加载Gif动画

    最近项目开发中需要实现播放gif动画的效果,UI设计图如下 在点击中间话筒的时候播放动画,提示用户正在录音。 尝试...

网友评论

      本文标题:Unity播放Gif动画

      本文链接:https://www.haomeiwen.com/subject/fshmqxtx.html