2016年3月9日 星期三

Unity_C#_在Unity中播放影片

2020/06/03更新
此為Unity 5x版本的方法
新版請使用Video Player Component
===============================================================

*此教學使用Unity 5.3.2f1 (64-bit)免費版
*最後更新時間2016/05/30

此教學為使用Plane播放,若要使用UGUI請看Unity_C#_開頭動畫的製作

Unity支援的影片格式有: .mov、.mpg、.mpeg、.mp4、.avi、.asf
播放影片是使用的MovieTexture為Texture的子類別,與貼圖非常相近,
如影片含音頻會自動生成audio文件,如沒音頻就無生成。

本文將教學:
                     Unity播放影片(含音軌)
----------------------------------------------------------------------------------------------------------

本教學使用的影片為.mov檔,需要安裝Quicktime,
如果電腦裡沒有quicktime,可到下列網址下載(安裝完需重新開啟Unity):
http://www.apple.com/tw/quicktime/

1.先在場景中新增一個Plane,把Main Camera對準它。
   

2.直接把你的影片檔拖曳至Unity Asset視窗,或在檔案管理員中直接加入(需等待一段時間)。
   

3.這時就會產生一個MovieTexture了,
   如果你的影片含有音軌,可以展開看到Audio Source。
   

4.這時你可以設置你的MovieTexture品質,調越高容量越大和載入時間越長。
   依需求調整。
   

5.這時對Asset視窗案右鍵,產生Material。
   設定其Shader,在此設定為Legacy Shaders-Self-Illumin-Specular
   此設定適合用來當作電視螢幕,你也可以設置其他Shader試試看。
   

6.把你的MovieTexture拖曳到如圖位置。
   

7.這時可以把Material和Audio Source拖曳到Plane的Component裡。
   此範例不需要Play On Awake(載入場景時自動撥放),故取消勾選。
   

8.這時進入腳本階段,新增一個C#腳本,開始撰寫腳本如下。
   
    解釋程式碼:
 
    public MovieTexture movTexture;
    //宣告公開變數電影材質,設為公開為了之後拖曳
    private AudioSource movAudio;
    //設定影片音軌
 
    GetComponent<Renderer>().material.mainTexture = movTexture;
    //設置主要材質為movTexture
    movTexture.loop = true;
    //movTexture是否重複撥放
    movAudio = GetComponent<AudioSource>();
    //設置movAudio變數為物件之AudioSource
 
    if (Input.GetKeyDown(KeyCode.A) && movTexture.isPlaying == false)
    //如果鍵盤A被按下且movTexture正在撥放為否時

    GetComponent<AudioSource>().Play();
    //這一段被註解掉,因為有為AudioSource設變數movAudio,如果你不想設置變數可以直接         使用此程式碼

    Play(); Pause(); Stop(); //字面上的意思
 
    如果需要複製可複製以下程式碼

 
---------------------------------以下附上完整程式碼--------------------------------------------------------------

    public MovieTexture movTexture; //電影材質
    private AudioSource movAudio; //影片音軌

    void Start()
    {
        GetComponent<Renderer>().material.mainTexture = movTexture;
        movTexture.loop = true;
        movAudio = GetComponent<AudioSource>();
    }
    void Update() {
        if (Input.GetKeyDown(KeyCode.A) && movTexture.isPlaying == false)
        {
            //GetComponent<AudioSource>().Play();
            movTexture.Play();
            movAudio.Play();
        }
        if (Input.GetKeyDown(KeyCode.S))
        {
            //GetComponent<AudioSource>().Pause();
            movTexture.Pause();
            movAudio.Pause();
        }
        if (Input.GetKeyDown(KeyCode.D))
        {
            //GetComponent<AudioSource>().Stop();
            movTexture.Stop();
            movAudio.Stop();
        }
     
    }
---------------------------------以上附上完整程式碼------------------------------------------------------------

 9.把腳本掛在Plane上,再把MovieTexture拖曳到程式碼的公開區。

 
 
10.這時你可以開始測試你的影片是否能撥放了!

2 則留言: