Unity中使用HTCVIVE播放全景视频(AVProVideo插件)

1、前言

刚入职第一周做了一项目小demo,接下来给大家分享一下我的感悟吧!
1.1、Unity中播放全景视频有很多种方法,但都是大同小异,播放视频都需要有一个载体,我们看电视时,是屏幕,看电影时,是影院的画布,SO,Unity中播放视频可以是UI 也可以是Cube等,全景视频的每一帧就是一张全景图片,所以我们用一个球来当做载体。
1.2、你可以使用MoveTexture,或者PlayerVideo来做,原理都是一样的,获取球的材质球,把视频作为纹理贴上去,然后把摄像机放到球的中心,然后有API控制播放。但是要注意球的内部是看不到的所以要自己写一个Shader来让球的内部可以看到

Shader代码如下:

Shader "Unlit/UnlitShader"
{Properties{_MainTex ("Texture", 2D) = "white" {}}SubShader{Tags { "RenderType"="Opaque" }LOD 100Cull Front //剔除正面,用于看到球体的内Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#pragma multi_compile_fog#include "UnityCG.cginc"struct appdata{float4 vertex : POSITION;float2 uv : TEXCOORD0;};struct v2f{float2 uv : TEXCOORD0;UNITY_FOG_COORDS(1)float4 vertex : SV_POSITION;};sampler2D _MainTex;float4 _MainTex_ST;v2f vert (appdata v){v2f o;o.vertex = UnityObjectToClipPos(v.vertex);o.uv = TRANSFORM_TEX(v.uv, _MainTex);UNITY_TRANSFER_FOG(o,o.vertex);return o;}fixed4 frag (v2f i) : SV_Target{float u_x=1-i.uv.x;    //因为球的内部是像镜子一样反着的float u_y=i.uv.y;      //所以要改变其uv坐标i.uv=float2(u_x,u_y);  //只改变x,就行了,fixed4 col = tex2D(_MainTex, i.uv);UNITY_APPLY_FOG(i.fogCoord, col);return col;}ENDCG}}
}

这种方法网上都有,我就不详细介绍了(经测试此方法可能存在问题!)。
1.3、我一开始使用以上两种方法,但是后来都因为各种原因报错,很无奈,于是就是找到了这个AV插件。哈哈哈,插件AVProVideo可以从Github上下载,地址如下:AVProVideo下载地址,这里面有很多例子,多参考一下。

2、功能制作

2.1首先新建工程将下载的工程导入到工程中,我们可以看到它自带有很多的案例,案例中的视频都是读取的StreamingAssets下的,如果我们想要读取网络上的视频时,我们需要打开Media Player组件将连接复制到上面就行:


在案例8中就是一个全景视频的小Demo可以参考,将视频导入到StreamAssets文件夹下,将球的预制体拖入到场景中,这是插件封装好的,只需要将视频拖上就可以了。
2.2将Htc的位置放到球的中间,运行就行了,此外你也可以加入按钮,或者进度条等下面会具体介绍进度条。

2.3主要还是研究一下Media Player组件的每项功能,我还没研究完就不说了,说一下进度条吧,新建Slider ,Text等
话不多说,直接上代码。

public class VCR : MonoBehaviour {public MediaPlayer _mediaPlayer;public Slider      _videoSeekSlider;private float      _setVideoSeekSliderValue;private bool       _wasPlayingOnScrub;public void OnVideoSeekSlider(){if (PlayingPlayer && _videoSeekSlider && _videoSeekSlider.value != _setVideoSeekSliderValue){PlayingPlayer.Control.Seek(_videoSeekSlider.value * PlayingPlayer.Info.GetDurationMs());}}public void OnVideoSliderDown(){if(PlayingPlayer){_wasPlayingOnScrub = PlayingPlayer.Control.IsPlaying();if( _wasPlayingOnScrub ){PlayingPlayer.Control.Pause();
//                  SetButtonEnabled( "PauseButton", false );
//                  SetButtonEnabled( "PlayButton", true );}OnVideoSeekSlider();}}public void OnVideoSliderUp(){if(PlayingPlayer && _wasPlayingOnScrub ){PlayingPlayer.Control.Play();_wasPlayingOnScrub = false;//              SetButtonEnabled( "PlayButton", false );
//              SetButtonEnabled( "PauseButton", true );}         }
}

j脚本挂的如下:

3、结语

播放视频很简单,主要还是看使用HTC交互的功能,在以后的文章中,我将逐渐描述HTCVIVI的各种用法,由于刚开始写博客,可能描述不是很清楚,大家可以加QQ群一块商讨:QQ群319506028;拒绝闲聊,学技术请进。

Unity中使用AVproVideo播放全景视频(HTCVIVE)相关推荐

  1. 多媒体制作中Unity中使用AVProVideo播放视频播放完成后自动收回

    之前使用Unity自带的VideoPlayer组件,发现win10支持很好,win7播放不流畅,现在使用AVProVideo插件. 1.在UI上播放,首先在Canvas里面Creat一个AVPro V ...

  2. Unity VRAR Unity播放全景视频及优化极点变形twist问题

    2016年是VR元年,这一年度多少少做了点东西,都是关于VR&AR的,虽然现在是冷冬期,个人认为前景还是有的,只不过会曲折前进,工业革命还分好几次呢,对吧! 好了,最近比较空闲,会整理一些VR ...

  3. Unity使用AVProVideo播放透明视频

    目录 一.目的 1.想知道:Unity使用AVProVideo播放透明视频 二.参考 1.[Unity3d]在Unity3d中播放视频:AVPro Video的使用 三.注意: 1.最终发现:还是使用 ...

  4. UE4中如何播放全景视频/全景视频如何在VR设备中播放

    UE4中如何播放全景视频/全景视频如何在VR头显中播放 1.全景视频的播放与普通视频在UE4中播放的前序流程基本一致 2.在项目的Content下新建一个Movies文件夹,把装备好的全景视频放进去 ...

  5. openGL ES进阶教程(五)制作一个简单的VR播放器,播放全景视频

    之前写过全景(VR)图片,和用openGL ES+MediaPlayer 渲染播放视频+滤镜效果 这一篇就在之前的基础上实现一个最简单的VR播放器,播放全景视频. 概述: 全景视频是一种用3D摄像机进 ...

  6. Unity中自制Animation+播放完毕相应事件

    一.目的 1.想知道:Unity中自制Animation+播放完毕相应事件 二.参考 1.Unity动画播放结束事件 https://blog.csdn.net/qq_34244317/article ...

  7. 流媒体之从零实现搭建简单流媒体服务器,推流,拉流播放全景视频

    一.直播与点播 直播:在我的理解中是实时录制的内容,类似各个晚会的实时直播过程,在现场采集图像的同时传输影像到网络上. 点播:是提前录制完成的内容,类似某些直播平台上根据观众的需求播放某些电影或经典电 ...

  8. 关于Android中使用WebView播放网络视频不能全屏的问题

    之前公司要求的一个项目需要播放网络视频,给的是HTML的地址,所以只能用webView播放,但是,播放的时候点击自带的全屏按钮根本没反应,准确说是只有图标变化了,但是根本没有全屏.在网上找了好多资料, ...

  9. Unity3D总结记录(四) Unity中控制AudioSourse播放多条不同的声音文件

    Unity中,如果需要让播放声音,只需要给游戏对象添加AudioSourse组件即可,但,默认的组件中,仅支持一条音源的播放,如要实现多条音源的播放,可在代码中实现,具体方法如下: 首先在类中申请多个 ...

最新文章

  1. 独家 | 115个A/B测试的分析结果︰平均提升为4%,大部分缺乏统计检定力
  2. Android开发--BroadcastReceiver介绍1
  3. joc杂志影响因子2019_边缘计算 | SCI期刊JoCCASA诚邀专刊稿件
  4. Json转换值类型字段为空字符串时报错问题
  5. 工作流实战_14_flowable_已办任务列表查询
  6. HTML+CSS+JS实现 ❤️ 团队人物图片蜂巢布局❤️
  7. python网络爬虫的学习
  8. 性能测试诊断分析与优化培训资料打包下载
  9. ArcGIS 城市生活区用地适宜性评价(一)
  10. 图书条形码跟ISBN号互相转换的类
  11. python中keys是什么意思_python中的key是什么意思
  12. 【Beta】 第六次Daily Scrum Meeting
  13. sat考试用计算机,SAT考试怎么选择计算器
  14. icc校色文件使用教程_Windows7色彩管理显示器ICC设置方法
  15. Docker Secret加密
  16. Linux上类似vbs脚本,VBS脚本常用经典代码收集
  17. 主动降噪相消干涉原理
  18. 51单片机(8051系列)最小系统图--内部时钟
  19. 变频泵 计算机控制技术,变频泵站节约能耗的计算机控制技术浅析
  20. 常见表单反爬虫安全措施解密

热门文章

  1. 如何判断一份工作值不值得做?
  2. 关于strerror
  3. php菜鸟之路 6 php与html的关系
  4. RadioButton单选按钮
  5. 桥梁结构健康监测方案
  6. js禁用按钮及解除禁用
  7. html清除图片上下间距,css - 三种方法解决LI和内部Img的上下间距问题
  8. 自动驾驶:车辆pose
  9. 不用暴力,惩罚有效的10个方法
  10. 隐写术——PNG文件隐藏payload