如何在Unity中播放视频?

提要:在Unity 中 视频支持.mov、.mpg、.mpeg、.mp4、.avi和.asf。而Unity对于视频都是以MovieTexture来使用的。
如果视频中有声音那么在视频文件下面会相应生成audio文件。所以一个完整的视频播放是应该画面和音频的同步播放。

       方法一:基于GameObject上,这种方式可以让影片以任何方式播放,比如你要实现一个教室,教室讲台上有个投影幕,电影应当在投影幕上播放。这样影片播放就是实打实的在荧幕这个游戏GameObject上面播放。
       实现方法:就好比在游戏世界中创建一个Plane面对象,摄像机直直的照射在这个面,首先你要在播放的地方加个plane。上面挂一个 Play 脚本。

using UnityEngine;
using System.Collections;
 
public class Play : MonoBehaviour
{
 
    //电影纹理
    public MovieTexture movTexture; //播放视频要用到的MovieTexture属于贴图Texture的子类
    public AudioSource audioSource;
    void Start()
    {
        //设置当前对象的主纹理为电影纹理
        renderer.material.mainTexture = movTexture;
        //设置电影纹理播放模式为循环
        movTexture.loop = true;
        //如果有声音才播放声音
        audioSource = GetComponent();
    }
    public void OnPlay()
    {
  	if(!movTexture.isPlaying)
	{
 	    movTexture.Play();
       //   audioSource.Play();

 
  
	}
} public void OnPause() { movTexture.Pause(); // audioSource.Pause(); } public void OnStop() { movTexture.Stop(); // audioSource.Stop(); }}
 
  我们将视频生成的 
  MovieTexture 
  拖放复制到movTexture 
  中,如果有声音,应当给plane添加AudioSource组件并把把生成的音频文件拖放到AudioClip处。脚本中给出了三个函数分别对应的是 
  视频的播放、暂停、停止。 
  

方法二:基于Unity 的OnGUI实现,这样视频就是以UI元素存在于游戏中。

实现方法:这种方法不需要载体。直接可以将脚本挂在Mamera上。

using UnityEngine;
using System.Collections;
 
public class Play : MonoBehaviour
{
 
    //电影纹理
    public MovieTexture movTexture;
    public AudioSource audioSource;
    void Start()
    {
        //设置电影纹理播放模式为循环
        movTexture.loop = true;
        //如果有声音才播放声音
        audioSource = GetComponent();
    }
 
    void OnGUI()
    {
        //绘制电影纹理
        GUI.DrawTexture(new Rect(0, 0, Screen.width, Screen.height), movTexture, ScaleMode.StretchToFill);
    }
    public void OnPlay()
    {
        movTexture.Play();
        // audioSource.Play();
    }
    public void OnPause()
    {
        movTexture.Pause();
        // audioSource.Pause();
    }
    public void OnStop()
    {
        movTexture.Stop();
        // audioSource.Stop();
    }
 
}


//在移动设备上播放视频
public class Test : MonoBehaviour {
  
void OnGUI()
    {
        if (GUI.Button (new Rect (20,10,200,50), "PLAY ControlMode.CancelOnTouch")) 
        {
            Handheld.PlayFullScreenMovie("test.mp4", Color.black, FullScreenMovieControlMode.CancelOnInput);
        }
  
        if (GUI.Button (new Rect (20,90,200,25), "PLAY ControlMode.Full")) 
        {
            Handheld.PlayFullScreenMovie("test.mp4", Color.black, FullScreenMovieControlMode.Full);
        }
  
        if (GUI.Button (new Rect (20,170,200,25), "PLAY ControlMode.Hidden")) 
        {
            Handheld.PlayFullScreenMovie("test.mp4", Color.black, FullScreenMovieControlMode.Hidden);   
        }
  
        if (GUI.Button (new Rect (20,250,200,25), "PLAY ControlMode.Minimal")) 
        {
            Handheld.PlayFullScreenMovie("test.mp4", Color.black, FullScreenMovieControlMode.Minimal);
        }
    }
}
直接使用第三方插件AVPro QuickTime来播放视频。


你可能感兴趣的:(unity,面试问答)