今天我们来做一个在Unity3D中实现视频播放的实例。


      


      首先,Unity支持的播放视频格式有.mov、.mpg、.mpeg、.mp4、.avi和.asf。我们只需要将这些文件放在项目文件夹里就可实现视频文件的导入。在Window系统下,我们需要在苹果公司的QuickTime软件下才能顺利地将视频文件导入Unity。如果视频文件含有音频文件,那么在导入Unity后会生成相应的音频文件。在Unity3D中实现视频播放的方法有两种:基于纹理贴图、基于GUI。我们下面分别来讲解:


       1、基于纹理贴图


1.  using UnityEngine;  
2.  using System.Collections;  
3.    
4.  public class MovieByTexture : MonoBehaviour {  
5.        
6.      //电影纹理贴图  
7.      public MovieTexture mMovie;  
8.      //电影音频源  
9.      private AudioSource mAudio;  
10.        
11.      //媒体信息定义  
12.      private string mediaName;//媒体名称  
13.      private string mediaLength;//媒体长度  
14.        
15.      void Start ()   
16.      {  
17.        mAudio=GetComponent();  
18.        //设置当前对象的主纹理为电影纹理贴图  
19.        renderer.material.mainTexture=mMovie;  
20.        //设置电影纹理播放模式为循环  
21.        mMovie.loop=true;  
22.        //开始播放电影  
23.        mMovie.Play();  
24.        //开始播放音乐  
25.        mAudio.Play();  
26.      }  
27.        
28.      void Update ()   
29.      {  
30.        //在这里更新媒体信息  
31.        mediaName=mMovie.name;  
32.        mediaLength=mMovie.duration.ToString();  
33.      }  
34.        
35.      void OnGUI()  
36.      {  
37.        //播放控制  
38.        if(GUILayout.Button("播放",GUILayout.Height(30)))  
39.        {  
40.          mMovie.Play();  
41.          mAudio.Play();  
42.        }  
43.        //暂停控制  
44.        if(GUILayout.Button("暂停",GUILayout.Height(30)))  
45.        {  
46.          mMovie.Pause();  
47.          mAudio.Pause();  
48.        }  
49.        //停止控制  
50.        if(GUILayout.Button("停止",GUILayout.Height(30)))  
51.        {  
52.          mMovie.Stop();  
53.          mAudio.Stop();  
54.        }  
55.            
56.        //绘制文本信息  
57.        GUILayout.Label("媒体名称:"+mediaName,GUILayout.Height(30));  
58.        GUILayout.Label("媒体长度:"+mediaLength,GUILayout.Height(30));    ;  
59.      }  
60.  }


复制代码

2、基于GUI


      


    1.  using UnityEngine;  
    2.  using System.Collections;  
    3.    
    4.  public class MovieByGUI : MonoBehaviour {  
    5.        
    6.      //电影纹理贴图  
    7.      public MovieTexture mMovie;  
    8.      //电影音频源  
    9.      private AudioSource mAudio;  
    10.        
    11.      //媒体信息定义  
    12.      private string mediaName;//媒体名称  
    13.      private string mediaLength;//媒体长度  
    14.        
    15.      void Start ()   
    16.      {  
    17.        mAudio=GetComponent();  
    18.        //设置当前对象的主纹理为电影纹理贴图  
    19.        renderer.material.mainTexture=mMovie;  
    20.        //设置电影纹理播放模式为循环  
    21.        mMovie.loop=true;  
    22.        //开始播放电影  
    23.        mMovie.Play();  
    24.        //开始播放音乐  
    25.        mAudio.Play();  
    26.      }  
    27.        
    28.      void Update ()   
    29.      {  
    30.        //在这里更新媒体信息  
    31.        mediaName=mMovie.name;  
    32.        mediaLength=mMovie.duration.ToString();  
    33.      }  
    34.        
    35.      void OnGUI()  
    36.      {  
    37.        //绘制电影纹理贴图  
    38.        GUI.DrawTexture(new Rect(0,0,Screen.width,Screen.height),mMovie);  
    39.        //播放控制  
    40.        if(GUILayout.Button("播放",GUILayout.Height(30)))  
    41.        {  
    42.          mMovie.Play();  
    43.          mAudio.Play();  
    44.        }  
    45.        //暂停控制  
    46.        if(GUILayout.Button("暂停",GUILayout.Height(30)))  
    47.        {  
    48.          mMovie.Pause();  
    49.          mAudio.Pause();  
    50.        }  
    51.        //停止控制  
    52.        if(GUILayout.Button("停止",GUILayout.Height(30)))  
    53.        {  
    54.          mMovie.Stop();  
    55.          mAudio.Stop();  
    56.        }  
    57.            
    58.        //绘制文本信息  
    59.        GUILayout.Label("媒体名称:"+mediaName,GUILayout.Height(30));  
    60.        GUILayout.Label("媒体长度:"+mediaLength,GUILayout.Height(30));    ;  
    61.      }  
    62.  }  
    63.


    复制代码



         

    代码十分简单,这里不再赘述了。我们可以直接在场景中创建一个Plane,然后将脚本拖放到该对象上,再指定了音频文件、视频文件后就可以实现视频的播放了。最终效果如图所示:



                         

     



                         






             今天的内容就是这样了,最近不知道该写点什么了,大家想了解什么内容的话,可以给我留言啊。