在项目开发中,可能会涉及到视频的播放,普通的视频播放如果大家不会的请自行百度,今天主要讲解带有透明通道的视频的播放问题,尤其是在手机端的处理,下面主要讲解两种方式,一种是通过unity提供的VideoPlayer 实现,一种是通过插件AVpro实现。
一、通过VideoPlayer实现视频的播放:
- 单一视频不需要动态更换视频:
- 新建一个Plane,放置在场景中的合适位置处
- 为Plane添加VideoPlayer组件
- 创建一个新的材质球,使其支持透明通道
- 视频格式必须按照下图进行设置,否则在手机上会有问题:
- 其中最主要的就是keep alpha的勾选和codec格式设置为VP8
- 然后将视频拖拽到videoPlayer组件就可以了
- 多个视频需要代码动态切换播放
- 我的第一想法是通过url加载,方便快捷,可是经测试发现,在编辑器上没有任何问题,但是导入到手机运行,就会发现alpha通道不见了,背景保留的plane的颜色,最后在unity论坛中找到了解释,说是这是目前unity 版本的一个bug,可能后续版本会优化,所以我就采用了通过resource文件夹加载视频文件进行播放的方式。
- 将视频放到Resources中,然后通过代码的方式进行加载,赋值为videoPlayer组件:
//初始化视频组件 void InitVideo() { if (videoPlayer == null) { videoPlayer = gameObject.GetComponent<VideoPlayer>(); } StartCoroutine(LoadVideo()); } //根据名字加载所需的视频 IEnumerator LoadVideo() { ResourceRequest resource = Resources.LoadAsync(videoName, typeof(VideoClip)); while (!resource.isDone) { yield return 0; } videoPlayer.source = VideoSource.VideoClip; videoPlayer.clip = resource.asset as VideoClip; videoPlayer.isLooping = true; videoPlayer.Play(); }
然后直接运行就可以了。效果如下:
二、通过插件AvPro进行实现
1.通过demo发现,这里就需要与他们匹配的视频格式进行处理,下面先大致讲一下视频的制作流程:
- 保证视频底色为纯色 尽量不要与视频中的有同样的颜色 这里我们以绿色背景为例测试:
-
将视频导入到AE中 记住视频的分辨率,如下图:
-
- 创建一个新的合成组1,将其像素大小设置为视频的分辨率大小
- 将视频放到新建的合成组1中,然后右键选择视频选择效果 颜色键,具体如下图:
- 然后点击特效控制台中的键颜色的吸管吸取背景色 ,同时调整参数,是达到自己想要的效果:
- 这时候在合成组1中添加一个白色固态层,并将轨道蒙版设置为alpha,就会得到下面的视频效果:
- 这时候新建合成组2,像素大小设置为之前的宽度的两倍,便于将两个视频,对称放置.
- 然后将合成组1和视频分别放到合成组2中,并对称放置:
- 导出合成组2中的视频文件,可以AVI格式视频文件,最后可以通过格式工厂转换成自己想要的mp4格式的文件,这样视频素材就准备好了。
2.将上面准备好的视频放置到StreamingAssets文件夹下,后续方便通过url方式加载视频
-
创建一个plane
-
创建一个MediaPlayer组件:
-
将MediaPlayer的视频读取方式设置为左右还是上下方式,这里我们设置为左右方式:
-
在plane上添加ApplyToMesh组件,同时将创建的MediaPlayer拖拽到相应的位置:
-
然后创建一个材质球到plane上:
-
下面通过代码方式播放想播放的视频:
void InitVideo() { if (mediaPlayer == null) { mediaPlayer = gameObject.GetComponent<MediaPlayer>(); } mediaPlayer.m_VideoPath = Application.streamingAssetsPath + "/" + name; mediaPlayer.Play(); }
播放效果为:
-
下面是工程的链接:链接:https://pan.baidu.com/s/1zOmy2mgSK5I02BZZD_sEhw 密码:rjcz
想了解更多unity相关小知识,可以关注下方公众号或者添加QQ群:879354767: