Unity VR——全景视频播放方案

前言:

        最近在做一个Unity 3D的视频类游戏,由于要应用到VR设备里面,所以需要播放的是全景视频,而非普通的平面视频。

方案列举


一.Unity内带的MovieTexture:

        在Unity引擎内部自带的能够满足全景播放视频的组件是MovieTexture,而且使用MovieTexture播放全景视频时,效果非常好,而且操作相对方便。但是,movietexture只能播放OGG和OVG,而且质量比较低.如果要转成高质量的视频,文件尺寸比较大。

        使用方法:

1.在当前场景中新建一个3D的Sphere球体,将主相机的位置在球体中心点处:

   


2.将.ogv或者.ogg的视频文件放到Resources目录或者其子目录下,这里我放在Resources/Videos目录下,通过以下代码来获取视频资源:

    //不必带后缀名
    MovieTexture tex = Resources.Load<MovieTexture>("Videos/war_video");


3.获取Sphere对象上的Renderer组件,并将视频载入得到的movTexture纹理,传递给Renderer的material.mainTexture属性,并设置视频的纹理的播放模式:

        //设置当前对象的主纹理为电影纹理  
        _parenTrans.GetComponent<Renderer>().material.mainTexture = movTexture;
        //设置电影纹理播放模式为循环  
        movTexture.loop = true;
        以上步骤我们已经完成了视频的加入已经播放前的所有准备,那么接下来我们要做的就是开始播放、暂停和停止视频等操作,其实都很简单,分别调用MovieTexture的接口即可:

        //开始播放
        movTexture.Play();
        //暂停播放
        movTexture.Pause();
        //停止播放
        movTexture.Stop();
        但是,这样播放视频的效果就是音频没有在视频播放的同时播放出来,那么我们就需要用代码控制音频的操作。


4.我们知道在Unity中播放音频有两个必备的组件Audio Listener和Audio Source,缺一不可,在主相机中默认绑定了Audio Listener组件,我们需要手动添加Audio Source组件:

            

        此时我们需要获取主相机中的Audio Source组件,并为其clip属性赋值:

    //获取AudioSounrce组件
    AudioSource MainCameraAudioSource = Camera.main.GetComponent(typeof(AudioSource)) as AudioSource;
    //获取视频的音频文件并为AudioSource的clip属性赋值
    MainCameraAudioSource.clip = movTexture.audioClip;
        音频播放控制的接口与视频基本一致:
        //开始播放
        MainCameraAudioSource.Play();
        //暂停播放
        MainCameraAudioSource.Pause();
        //停止播放
        MainCameraAudioSource.Stop();


5.运行时,查看结果可以发现视频被赋值到材质球中作为纹理:

   


6.查看相机投射出来的结果如下,通过旋转相机的Y轴的角度,可以360度地观看视频,这就是全场景视频播放的一个过程:

        

        对比原来的全景视频,在普通播放器中扭曲的全景视频,在这里就像一个封闭的3D的空间,具有很强的代入感:

 

        看起来效果也还不错,但是就在要打包到Android平台上进行测试时,发现打包报错,查询资料才发现,MovieTexture不支持Android平台的使用


二、Unity内带的移动平台视频接口Handheld:

        Unity提供的支持移动设备上播放视频的接口,只有:

    Handheld.PlayFullScreenMovie ("StarWars.mp4", Color.black, FullScreenMovieControlMode.CancelOnInput);
        接口非常简单,但是可操作性非常差,几乎达不到我们想要的结果,而且也只支持全屏的普通视频的播放。


三、其他选择:

        既然Unity内带的组件无法满足设计的需求,那么我们只有两个选择,一是自己写实现接口,二是寻找别人写好的第三方的插件。假如你的技术够牛逼,第一种方法是不错的选择,对自己也是一种提升,但是非常耗时,对于要快速开发产品的IT行业,显然第二种方法更为可行。

        经过了长时间的搜索,我找到了2个预选方案:Vuforia video playbackEasyMovieTexture

  • 12
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 34
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 34
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值