背景:
游戏机中想加入舞蹈元素,最先的想法是开发舞蹈游戏,然后通过动画来表现舞蹈,给用户提供舞蹈教学方面的体验,但是舞蹈游戏本身的开发就需要很长的时间(就人太少),不用谈后续的舞蹈和音乐的版权啦,所以现在想走另外一条途径,在unity中播放舞蹈教学视频,加上UI和一些检测来实现舞蹈教学,而且这套框架写完之后,内容很容易扩展,毕竟不需要针对每个舞蹈设计动画。但是Unity中视频播放就是各种蛋疼,尤其是在android下面,OK ,下面的内容很多是从网上整理下来:
1 Win/Mac
首先,在Windows和Mac上 需要Quick Time7.0以上的版本。Unity支持的视频播放格式还是蛮多如.mov、.mpg、.mpeg、.mp4、.avi、.asf,甚至.H264等等,使用起来也很简单,真的很简~~单。
在WIN/MAC下,Unity提供了MovieTexture纹理,对导入的视频Unity会自动进行转换。MovieTexture继承与Texture类,提供了视频播放中需要的简单控制播放/暂停/停止:
Pause | Pauses playing the movie. |
Play | Starts playing the movie. |
Stop | Stops playing the movie, and rewinds it to the beginning. |
MovieTexture给出的参数也是在不多,考虑到视频会是从网络中进行下载,检测isReadyToPlay很有必要,isPlaying给出是否在播放的参数,loop控制是否循环播放,duration是一个很有用的东西,给出当前播放到的位置。
audioClip | Returns the AudioClip belonging to the MovieTexture. |
duration | The time, in seconds, that the movie takes to play back completely. |
isPlaying | Returns whether the movie is playing or not. |
isReadyToPlay | If the movie is downloading from a web site, this returns if enough data has been downloaded so playback should be able to start without interruptions. |
loop | Set this to true to make the movie loop. |
renderer.material.mainTexture = movie;
movie.loop = true;
movie.Play();
movie.Pause();
movie.Stop();
但是用完很不爽,因为不能满足项目需求,教学中肯定需要视频的 回放功能,快进、快退,定点播放等等。
对于快进,有网友通过与控制脚本在同一个GameObject上绑定一个AudioSource中pitch参数可以进行控制,但是我在测试中没有这种效果,可能方法不对吧,另外的方案就是寻求第三方插件
AVPro QuickTime。
这个插件可以实现快进、快退、顶点播放、多窗口播放等等(如果在window下,例子中是视频文件以及内部的参数中.bin的后缀要去掉),这个插件只能在win/mac上使用~~ , 但是这个插件的代码是研究unity底层不错的例子哈。
2 移动端
在移动端,unity并不提供MovieTexture,AVPro QuickTime也用不了,其最基本的显示方案使用通过PlayFullScreenMovie()函数进行全屏播放,根据其官网解释,主要有以下方面: (1)视频流直接从设备存储器中获得,所以文件只能是单独提供,视频文件放置在StreamingAssets 文件夹中
(2) 视频播放过陈中,unity将会停止;播放结束后unity自动恢复;播放过程中屏幕中的颜色会变为播放器的背景颜色,播放之后恢复。
(3)在IOS中,内部实际上是调用MPMoviePlayerController的方法
(4)能够支持的格式: .mov, .mp4, .mpv, and .3gp ,H.264,MPEG-4 Part 2 video
Handheld.PlayFullScreenMovie ("StarWars.mp4", Color.black, FullScreenMovieControlMode.CancelOnInput);
也就是说unity提供的方法更简单了,窗口方式也回避了,还是要去寻求第三方插件。
Mobile movie texture for android
是个还算不错的,至少实际测试在android下是可以运行的,不过在unity4.5直接打开会有点问题,如果用unity4.1先打开再用4.5就没有问题,可能是资源问题。
这个插件使用开源视频编解码库Theora,所以他只能支持ogg格式的视频和音频,换句话说其他格式就要转换到 ogg格式,在运行中对视频进行解码然后通过unity GL底层库在相应的区域进行绘制。相对于AVPro QuickTime
这个插件提供的功能相对简单,不过这个很方面扩展,比较纠结的是提供的seek视频定点功能不是很完善,位置偏差较大,还不适合精确的应用。
2 总结
用来一天时间整理一下,整体说unity提供的视频功能还是很不理想,如果仅仅是播放游戏中的过场等等的还是足够的,但是对于现在的需求还不足够,希望unity能在这方面继续提升吧