使用插件:EasyMovieTexture
用於播放視頻,可播放的格式爲.mp4 .mov 不可播放的格式爲.ogv格式
使用方式:
將Prefab中VideoManager預設體拖入場景中,去掉B Loop和B Auto Play(視頻循環播放和視頻自動播放)
編寫代碼:功能爲 點擊按鈕播放視頻
視頻播放控制:
由於Load方法會花費一定的時間,當沒有加載視頻沒有完成時,點擊按鈕視頻不會播放,但是當在unity編輯模式失去焦點時,會重新播放(爲製作時發現的一個插件BUG)
解決方案:加載完成時會調用委託OnReady方法,因此將LoadFinished作爲回調,加載完成後即播放視頻。
using UnityEngine;
/// <summary>
/// 視頻播放插件控制腳本
/// </summary>
public class MobileVideoPlay : MonoBehaviour {
public MediaPlayerCtrl m_MediaPlayerCtrl;
public void PlayMobileVideo(string videoName)
{
if(m_MediaPlayerCtrl.GetCurrentState() == MediaPlayerCtrl.MEDIAPLAYER_STATE.PLAYING)
{
m_MediaPlayerCtrl.Stop();
}
m_MediaPlayerCtrl.UnLoad();
m_MediaPlayerCtrl.Load(videoName);
m_MediaPlayerCtrl.OnReady = LoadFinished;
}
public void LoadFinished()
{
m_MediaPlayerCtrl.Play();
}
}
按鈕控制:
using UnityEngine;
using UnityEngine.UI;
/// <summary>
/// 測試播放視頻
/// </summary>
public class TestVideoPlay : MonoBehaviour {
private void Start()
{
GetComponent<Button>().onClick.AddListener(() =>
{
OnPlayBtnClick();
});
}
public void OnPlayBtnClick()
{
Canvas canvas = FindObjectOfType<Canvas>();
canvas.GetComponent<MobileVideoPlay>().PlayMobileVideo("EasyMovieTexture.mp4");
}
}
點擊按鈕播放下一個視頻:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class UIRawImageMoviePlayControl : MonoBehaviour
{
private MediaPlayerCtrl mediaPlayerCtrl;
private RawImage movieRawImage;
private int currentPlayMovieIndex;
private string[] needPlayMovieNameArr = new string[] { "EasyMovieTexture.mp4", "ed_1024_512kb.mp4", "TPJ_2_xianxiang.mov" };
void Start()
{
mediaPlayerCtrl = GetComponent<MediaPlayerCtrl>();
movieRawImage = GetComponent<RawImage>();
Material movieMaterial = Instantiate(Resources.Load("MovieMaterial")) as Material;
movieRawImage.material = movieMaterial;
mediaPlayerCtrl.m_bAutoPlay = false;
currentPlayMovieIndex = 0;
}
public void OnPlayBtnClick()
{
movieRawImage.gameObject.SetActive(true);
mediaPlayerCtrl.Load(needPlayMovieNameArr[currentPlayMovieIndex]);
mediaPlayerCtrl.Play();
}
public void OnNextBtnClick()
{
OnStopBtnClick();
if (currentPlayMovieIndex < needPlayMovieNameArr.Length - 1) currentPlayMovieIndex++;
else currentPlayMovieIndex = 0;
OnPlayBtnClick();
}
public void OnPauseBtnClick()
{
mediaPlayerCtrl.Pause();
}
public void OnStopBtnClick()
{
mediaPlayerCtrl.Stop();
movieRawImage.gameObject.SetActive(false);
}
}
補充內容:
場景中有Canvas界面,如果希望將VideoManager顯示在制定UI界面前,由於Canvas處於最前面,遮擋VideoManager
具體解決做法爲:
將Canvas中Render Mode 更改爲World Space,此時調整z軸時可以更改遮擋關係