今天突然想起之前做过的一个AR项目,更换识别图播放不同的视频。就想了解一下unity3d支持哪些音视频格式,就看到了雨凇大大这篇文章,总结得很详细,我就不上我的代码献丑了,把雨松大大的博客分享给大家吧~

  • 原文链接: http://www.xuanyusong.com/archives/1019
  • 雨松MOMO 2012年05月26日 于 雨松MOMO程序研究院

Unity3D中播放游戏视频的方式有两种,第一种是在游戏对象中播放,就好比在游戏世界中创建一个Plane面对象,摄像机直直的照射在这个面上。第二种是在GUI层面上播放视频。播放视频其实和贴图非常相像,因为播放视频用到的MovieTexture属于贴图Texture的子类,那么本章我们就好好学习一下Unity中播放视频的这两种方式。哇咔咔~

          Unity支持的播放视频格式有.mov、.mpg、.mpeg、.mp4、.avi和.asf。只需将对应的视频文件拖拽入Project视图即可,它会自动生成对应的MovieTexture对象。如下图所示,MOMO将default_video.mp4拖拽入Project视图中,如果视频中含有音频的话会对应生成audio文件,因为我的视频没有音频所以没有生成 audio文件。接着在Hierarchy视图中创建一个Plane对象视频将在它之上播放,Directional light世界定向光用于照亮整个游戏场景,最后Main Camera对象将直直的照射在Plane对象。

使用对象拖拽的形式为Mov Texture对象赋值,那么在脚本中就能直接使用它了,我们看看Test.cs脚本。

Test.cs

usingUnityEngine;
usingSystem.Collections;publicclassTest:MonoBehaviour
{//电影纹理
publicMovieTexturemovTexture;voidStart()
{
//设置当前对象的主纹理为电影纹理
renderer.material.mainTexture=movTexture;
//设置电影纹理播放模式为循环
movTexture.loop=true;
}voidOnGUI()
{
if(GUILayout.Button("播放/继续"))
{
//播放/继续播放视频
if(!movTexture.isPlaying)
{
movTexture.Play();
}}if(GUILayout.Button("暂停播放"))
{
//暂停播放
movTexture.Pause();
}if(GUILayout.Button("停止播放"))
{
//停止播放
movTexture.Stop();
}
}
}

 如下图所示,点击按钮后轻松的实现播放、暂停、停止操作。默认视频大小大家可在编辑器直接缩放Plane对象平面,而如果需要在游戏运行中动态的缩放平面使用方法:

C#
1
transform.localScale=newVector(1,1,1);

模型默认缩放系数为1,这里可以调节平面X、Y、Z三个方向的缩放系数,平面的大小会随之改变,对应视频的大小也会随之改变。

 第二种播放视频的方式基于GUI。大家可以把刚刚创建的Plane对象以及世界定向光删除,直接将脚本绑定在摄像机对象中即可,接着我们简单的修改一下刚刚的游戏脚本。

Test.cs

usingUnityEngine;
usingSystem.Collections;publicclassTest:MonoBehaviour
{//电影纹理
publicMovieTexturemovTexture;voidStart()
{
//设置电影纹理播放模式为循环
movTexture.loop=true;
}voidOnGUI()
{
//绘制电影纹理
GUI.DrawTexture(newRect(0,0,Screen.width,Screen.height),movTexture,ScaleMode.StretchToFill);  if(GUILayout.Button("播放/继续"))
{
//播放/继续播放视频
if(!movTexture.isPlaying)
{
movTexture.Play();
}}if(GUILayout.Button("暂停播放"))
{
//暂停播放
movTexture.Pause();
}if(GUILayout.Button("停止播放"))
{
//停止播放
movTexture.Stop();
}
}}

在GUI中播放视频的原理是直接通过GUI调用DrawTexture方法,这里和绘制贴图很想了吧嘿嘿~ 目前播放视频的大小是屏幕的宽高,如果想动态的修改视频的宽或高直接修改new Rect() 视频显示区域即可,如下图所示,视频已经满满的填充在整个GUI中啦。怎么样Unity中播放视频简单吧? 哇咔咔~

移动平台上播放视频 

经测试以上的方式在IOS和Android设备中是无法播放视频的,在移动设备上我们需要使用另外一种方式来播放。

usingUnityEngine;
usingSystem.Collections;publicclassTest:MonoBehaviour{voidOnGUI()
{if(GUI.Button(newRect(20,10,200,50),"PLAY ControlMode.CancelOnTouch"))
{Handheld.PlayFullScreenMovie("test.mp4",Color.black,FullScreenMovieControlMode.CancelOnInput);
}if(GUI.Button(newRect(20,90,200,25),"PLAY ControlMode.Full"))
{Handheld.PlayFullScreenMovie("test.mp4",Color.black,FullScreenMovieControlMode.Full);
}if(GUI.Button(newRect(20,170,200,25),"PLAY ControlMode.Hidden"))
{Handheld.PlayFullScreenMovie("test.mp4",Color.black,FullScreenMovieControlMode.Hidden);
}if(GUI.Button(newRect(20,250,200,25),"PLAY ControlMode.Minimal"))
{Handheld.PlayFullScreenMovie("test.mp4",Color.black,FullScreenMovieControlMode.Minimal);
}}}

1.视频播放时触摸屏幕视频关闭

2.视频播放时弹出IOS高级控件,控制视频暂停播放 全屏等等。

3.视频播放时无法停止,当其播放完一次后自动关闭

4.视频播放时弹出IOS高级控件,可控制播放进度。

注意:将视频文件放置在Assets/StreamingAssets/路径下,经测试.MP4可用。 在IOS和Android上流畅播放游戏视频。

工程下载: http://vdisk.weibo.com/s/gb4Lx

视频加速播放(只适用于PC)

今天有朋友问我,怎么能让视频加快播放,我也学了一下,不果老外们都说这是一个BUG呵呵。

脚本绑定在摄像机对象上,并且要给摄像机添加AudioSource组件。

代码比较简单我就不注释了。

usingUnityEngine;
usingSystem.Collections;publicclassNewBehaviourScript:MonoBehaviour
{
publicMovieTexturemov;voidStart()
{
audio.clip=mov.audioClip;
audio.Play();
mov.Play();}
voidOnGUI()
{
if(GUI.Button(newRect(310,0,100,50),"2倍速播放"))
{
audio.pitch=2f;
}if(GUI.Button(newRect(410,0,100,50),"1倍速播放"))
{
audio.pitch=1f;
}GUI.DrawTexture(newRect(0,0,300,300),mov);
}
}

Unity3D研究院之两种方式播放游戏视频相关推荐

  1. Unity3D两种方式播放视频

      Unity3D中播放游戏视频的方式有两种,第一种是在游戏对象中播放,就好比在游戏世界中创建一个Plane面对象,摄像机直直的照射在这个面上.第二种是在GUI层面上播放视频.播放视频其实和贴图非常相 ...

  2. Unity3D教程:播放视频的两种方式

    Unity3D中播放游戏视频的方式有两种,第一种是在游戏对象中播放,就好比在游戏世界中创建一个Plane面对象,摄像机直直的照射在这个面上.第二种是在GUI层面上播放视频.播放视频其实和贴图非常相像, ...

  3. C语言播放音乐的两种方式

    来源:微信公众号「编程学习基地」 文章目录 播放音乐的两种格式 播放音乐的两种格式 wav格式的音乐播放.mp3格式的音乐播放 1️⃣首先添加播放音乐的头文件 #include <windows ...

  4. 【Android 逆向】Android 进程代码注入原理 ( 注入本质 | 静态注入和动态注入 | 静态注入两种方式 | 修改动态库重打包 | 修改 /data/app/xx/libs 动态库 )

    文章目录 一.注入本质 二.静态注入和动态注入 三.静态注入两种方式 ( 修改动态库重打包 | 修改 /data/app/packageName/libs/ 下的动态库 ) 一.注入本质 进程注入本质 ...

  5. Eclipse安装SVN插件的两种方式

    登录 | 注册 收藏成功 确定 收藏失败,请重新收藏 确定 查看所有私信查看所有通知 暂没有新通知 想要绕过微信小程序开发中的坑吗?不妨来听这个,今晚8点,1小时帮你搞定! 23小时以前 CSDN日报 ...

  6. python打开方式包括_运行Python程序有两种方式:________和________。

    运行Python程序有两种方式:________和________. 答: 交互式 文件式 自觉的人,心目中有一张蓝图,人生理想.但是不知道世界的游戏规则 答:× 山水画的鉴赏方法? 答:1.首先看风 ...

  7. 如何让BERT拥有视觉感知能力?两种方式将视频信息注入BERT

    一只小狐狸带你解锁NLP/ML/DL秘籍 老板老板,听说BERT是个瞎子 此话怎讲? 它能理解语言,但是理解不了小夕的自拍! video-BERT了解一下 喵喵喵? AI的三大核心板块(CV/Spee ...

  8. html实现ipad投屏到显示器,iPad投屏的两种方式

    iPad投屏至少有两种方式,一种是AirPlay,这种方式相当于笔记本连接投影仪的方式,以投影仪或电视作为第二显示器,具体操作就是从iPad底部向上划,然后找AirPlay,如果此时显示设备,如智能投 ...

  9. 苹果手机投影_投影仪连手机的两种方式介绍

    投影仪连手机的两种方式介绍 投影仪连手机跟电脑连接投影仪一样,有线和无线连接两种方式. 投影仪连手机有线连接: 如果智能手机如果支持MHL连接,那直接购买一条MHL线,一头接在手机上,另一头接在投影仪 ...

最新文章

  1. 推荐一款常用的IDE插件,越用越喜欢
  2. 每日一皮:开会不关微信的尴尬(2)
  3. 面向对象回顾(静态变量、类加载机制/双亲委派模型、Object类的方法、类和对象区别)
  4. 如何搭建服务器 无线传输,iOS 本地搭建服务器使用http传送(wifi快传)
  5. Windows虚拟地址转物理地址(原理+源码实现,附简单小工具)
  6. java定义一个方法,返回整数数组的元素最大值
  7. 随想录(被低估的gccg++)
  8. html主要用于组织网页的,HTML网页基本组成概述
  9. hlsl之ambient
  10. php在哪改缩略图的大小,修改缩略图大小的方法
  11. python使用webdriver处理上传文件(使用AutoIt)
  12. Screen Saver Exporter for Mac(屏幕保护程序导出程序)
  13. MATLAB R2013 a版及序列号
  14. echarts3Dearth 地球数据可视化添加 tooltip效果和涟漪扩散的效果
  15. 本地运行 MAYA 帮助文档
  16. ADNI数据集下载(详细)
  17. 一元云购系统对接短信功能图文教程—【V4版】
  18. 编译原理学习笔记 6.4 分程序结构语言的符号表组织
  19. DevC++ 调试的时候闪退解决办法
  20. stm32 定时器_基于STM32定时器ETR信号的应用示例

热门文章

  1. 用 matplotlib 做交互式的票房分析
  2. or在python中是什么意思_Python中and和or的用法
  3. win10在编写python程序时,问题出现权限不足的问题
  4. 第五章 网络 之 计算机网络基础(一)
  5. cpu soft lockup
  6. 《zw版·Halcon-delphi系列原创教程》 zw版-Halcon常用函数Top100中文速查手册
  7. 非常时期的情人节,只能云表白了
  8. frp与nginx结合,实现内网设备的ssh,远程桌面和http访问
  9. 【Jetpack篇】LiveData取代EventBus,安卓面试项目
  10. echarts生成图表超出父容器问题解决