实现目的
有时我们需要播放一些待机动画,且动画能有轮廓不影响后面的界面。
way1:
我们会使用带通道的动画帧序列,通常情况,二维美术做好动画,输出几百张序列帧我们导入使用(创建动画状态机加载,或者代码加载sprite)。
way2:
做完视频做遮罩,但是遮罩只能是一张图,不会随着视频内容变化而变化。
我们会发现弊端:序列帧非常多时,渲染很占性能和资源,fps时常低到个位数,卡到不能看!想去做性能优化,小项目上可谓是南辕北辙,耗时耗力。
优化、解决方式
采用透明视频:格式webm,ogv
实现方法
1.序列帧命名规范化:
文件夹及文件不能有中文字符,推荐一款批量命名工具:ReNamer,下载地址 不规范命名案例:
修改文件夹名称为英文;
打开ReNamer如下设置:
完成重命名。2.下载转换工具ffmpeg,下载地址 3.开始转换webm透明视频
打开cmd窗口,不需要管理员方式打开。不知道cmd的,请去百度。
输入:“ -i 图片所在文件夹绝对路径\图片名前缀+%第一张图的序号位数d.png -auto-alt-ref 0 -c:v libvpx -r 帧率 -b:v 1000k 输出路径文件夹名称\视频名.webm”(引号不要复制,如果第一张图为rw_00001则填写rw_%5d.png输出路径不能在C盘根目录,因为没权限,可以是桌面的路径。),命令下载地址
参考:C:\Users\GK\Desktop\ffmpeg\bin\ffmpeg.exe -i C:\Users\GK\Des
ktop\renwu\rw_%4d.png -auto-alt-ref 0 -c:v libvpx -r 25 -b:v 1000k C:\Users\GK\D
esktop\ffmpeg\v.webm
出现如下界面就成功了
制作完成。
来看一下输出后的大小吗,可以再去对比一下本文第一张图
Untiy中使用
way1:按照图示选择设置透明视频。我采用RawImage成像播放视频,必须设置VP8模式,不然颜色不对。
下面献上珍藏多年的视频播放代码
播放代码
using System;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Video;
public class VideoControl : MonoBehaviour
{
private VideoPlayer Vp;
private RawImage RawImg;
void Awake()
{
Vp = GetComponent<VideoPlayer>();
RawImg = GetComponent<RawImage>();
Vp.isLooping = true;
}
void OnEnable()
{
RawImg.color = new Color(1, 1, 1, 0);
Vp.Play();
Vp.loopPointReached += VideoEnd;
}
void VideoEnd(VideoPlayer vp)
{
Vp.Play();
}
void Update()
{
if (Vp.frame > 0)
{
RawImg.color = new Color(1, 1, 1, 1);
RawImg.texture = Vp.texture;
}
else
{
//RawImg.color=new Color(1,1,1,0);
}
}
void OnDisable()
{
RawImg.color = new Color(1, 1, 1, 0);
Vp.Stop();
}
}
播放时会发现如丝版的fps6666
拜了个拜
其他播放方式:
way2:比如创建一个3D面片,设置一个材质球,选一下渲染模式看图。这个不需要代码控制播放,直接就能放了
way3:
调整videoplayer的渲染模式,这个也不需要代码控制播放
各有利弊,自行定夺!