zoukankan      html  css  js  c++  java
  • Unity3D中播放视频的方法

    播放视频其实和贴图非常相像,因为播放视频用到的 MovieTexture 属于贴图 Texture 的子类。Unity3D 支持的视频格式有很多,但是还是建议使用 ogv 格式的视频,使用其他格式依然需要插件转码成 ogv 格式,可以省去很多麻烦。

    第一种:在游戏对象中播放,就好比在游戏世界中创建一个Plane面对象,摄像机直直的照射在这个面上。在播放对象身上挂如下脚本,并直接将视频拖入 movieTexture 变量中即可实现播放视频。

     1 using UnityEngine;
     2 using System.Collections;
     3 
     4 public class Test : MonoBehaviour
     5 {
     6     //电影纹理
     7     public MovieTexture movieTexture;
     8 
     9     private void Start()
    10     {
    11         //获取当前对象 MeshRenderer 组件
    12         MeshRenderer meshRenderer = this.GetComponent<MeshRenderer>();
    13         //设置当前对象的主纹理为电影纹理
    14         meshRenderer.material.mainTexture = movieTexture;
    15         //播放模式设置为循环播放
    16         movieTexture.loop = true;
    17         // movieTexture.isPlaying  属性,是否正在播放
    18         if (!movieTexture.isPlaying)
    19         {
    20             //开始播放
    21             movieTexture.Play(); 
    22         }
    23         //暂停播放
    24         //movieTexture.Pause();
    25         //停止播放
    26         //movieTexture.Stop();
    27     }
    28 }

    第二种:在GUI层面上播放视频。将如下脚本挂在任何一个物体上即可。

     1 using UnityEngine;
     2 using System.Collections;
     3 
     4 public class Test : MonoBehaviour
     5 {
     6     //电影纹理
     7     public MovieTexture movieTexture;
     8 
     9     private void Start()
    10     {
    11         //播放模式设置为循环播放
    12         movieTexture.loop = true;
    13     }
    14 
    15     private void OnGUI()
    16     {
    17         GUI.DrawTexture(new Rect(0, 0, Screen.width, Screen.height), movieTexture, ScaleMode.StretchToFill);
    18         if (GUILayout.Button("播放/继续"))
    19         {
    20             if (!movieTexture.isPlaying)
    21             {
    22                 movieTexture.Play();
    23             }
    24         }
    25         if (GUILayout.Button("暂停播放"))
    26         {
    27             movieTexture.Pause();
    28         }
    29         if (GUILayout.Button("停止播放"))
    30         {
    31             movieTexture.Stop();
    32         }
    33     }
    34 }

    注意:以上两种方式是无法适用于移动端的。需要使用Handheld.PlayFullScreenMovie()方法来播放,而且由于调用的是移动端内嵌的播放器,只能平面播放。也就是说我们无法用曲面来播放全景视频,在开发VR/AR项目时需要注意。而且将视频文件放置在Assets/StreamingAssets/路径下。由于播放器问题,并不是所有视频格式都可以,目前亲测 mp4 格式可以播放。脚本如下:

     1 using UnityEngine;
     2 using System.Collections;
     3 
     4 public class Test : MonoBehaviour
     5 {
     6     private void Start()
     7     {
     8         Handheld.PlayFullScreenMovie("Final.mp4", Color.black, FullScreenMovieControlMode.Full, FullScreenMovieScalingMode.AspectFill);
     9     }
    10 }

    第一个参数为路径,第二个参数为背景颜色,不做其他描述。

    FullScreenMovieControlMode   视频全屏控制器。 
        Full                     全部控制部分   包括快进后退  进度条控制等。   播放完后退出
        Minimal              迷你版控制            播放完后退出
        CancelOnInput  点击后退出    (播放视频时) 点击屏幕退出播放
        Hidden               不显示任何控制     只能全部播放完后才能退出

    FullScreenMovieScalingMode  播放视频时缩放大小适应屏幕
        None         不缩放视频   按原比例播放
        AspectFit  缩放电影直到完全适应屏幕比例 (不会改变视频宽高比比例)
        AspectFill  缩放电影直到完全铺满屏幕   (会改变视频宽高比例)
        Fill            铺满屏幕

    第三种:从Unity3D 5.6版本开始,Unity3D就自带 VideoPlayer 组件,具体的使用方法还有待研究,是否支持移动端还需要测试,反正我是还没用过 。

  • 相关阅读:
    [古城子的房子] 贪心
    [小兔的棋盘] 组合数学
    [Triangle] Fibonacci+二分查找
    [Fibonacci] 矩阵快速幂
    [DP?]素数筛+Lucas定理+费马小定理
    react本地开发关闭eslint检查
    react 不同js文件里公用同一个变量
    js学习笔记
    node内存扩展,前端项目运行时报内存不足的错误
    Gitee码云通过WebHooks实现自动同步代码部署
  • 原文地址:https://www.cnblogs.com/xiaoyulong/p/8627016.html
Copyright © 2011-2022 走看看