這里我用UGUI做了一個簡單的視頻播放器界面,界面就如下所示

:所寫腳本如下
using UnityEngine; ?
using System.Collections; ?
using UnityEngine.UI; ?
public class PlayMovie : MonoBehaviour ?
{ ?
public Text totalTime; ?
public Text movieTime; ?
public Slider movieSlider; ?
public Material renderMaterial; ?
public int movieSpeed = 1000; ?
private MediaPlayerCtrl mediaPlayerCtrl; ?
private RawImage movieRawImage; ?
private Vector2 reducteOffsetMax; ?
private bool isFinish = false; ?
private bool isPlay = false; ?
private bool isCtrlMovie = false; ?
private int fastbackTemp = 0; ?
private int totaltime = 0;?
//記錄視頻播放器的大小位置
Vector2 maxOffsetTextrue;
Vector2 minOffsetTextrue;
void Start () { ?
Init(); ?
mediaPlayerCtrl.OnEnd += OnEnd; ?
maxOffsetTextrue = movieRawImage.rectTransform.offsetMax;
minOffsetTextrue = movieRawImage.rectTransform.offsetMin;
} ?
/// 初始化函數(shù) ?
public void Init() ?
{ ?
mediaPlayerCtrl = this.transform.GetComponent<MediaPlayerCtrl>(); ?
movieRawImage = this.transform.GetComponent<RawImage>(); ?
mediaPlayerCtrl.m_bAutoPlay = false; ?
if (movieRawImage.material == null) ?
movieRawImage.material = renderMaterial; ?
reducteOffsetMax = movieRawImage.rectTransform.offsetMax; ?
} ?
// Update is called once per frame ?
void Update () ?
{ ?
UpdateMovieSlider(); ?
UpdateMovieTime(); ?
UpdateTotalTime(); ?
} ?
// 更新視頻進度條 ?
public void UpdateMovieSlider() ?
{ ?
if (mediaPlayerCtrl.GetSeekPosition() != 0 && !isCtrlMovie) ?
{ ?
float slider = (float) mediaPlayerCtrl.GetSeekPosition()/(float) mediaPlayerCtrl.GetDuration(); ?
movieSlider.value = slider; ?
} ?
} ?
// 更新視頻總時間 ?
public void UpdateTotalTime() ?
{ ?
if (this.totalTime.text != null && isPlay) ?
{ ?
if (totaltime != mediaPlayerCtrl.GetDuration() / 1000) ?
{ ?
totaltime = mediaPlayerCtrl.GetDuration() / 1000; ?
int min = totaltime / 60; ?
int seconds = totaltime - min * 60; ?
// this.totalTime.text = min + ":" + seconds; ?
if (min<=9||seconds<=9) {
if (min<=9&&seconds<=9) {
this.totalTime.text = "0"+min + ":" + "0"+ seconds;
}
if (min<=9&&seconds>=10) {
this.totalTime.text = "0"+min + ":" + seconds;
}
if (min>=10&&seconds<=-9) {
this.totalTime.text =min + ":" + "0"+ seconds;
}
} else if (min>=10&&seconds>=10) {
this.totalTime.text = min + ":" + ?seconds;
}
} ?
} ??
} ?
//更新視頻時間 ?
public void UpdateMovieTime() ?
{ ?
if (this.movieTime.text != null && isPlay) ?
{ ?
int movieTime = mediaPlayerCtrl.GetSeekPosition() / 1000; ?
int min = movieTime / 60;?
int seconds = movieTime - min * 60;
if (min<=9||seconds<=9) {
if (min<=9&&seconds<=9) {
this.movieTime.text = "0"+min + ":" + "0"+ seconds;
}
if (min<=9&&seconds>=10) {
this.movieTime.text = "0"+min + ":" + seconds;
}
if (min>=10&&seconds<=9) {
this.movieTime.text =min + ":" + "0"+ seconds;
}
} else if (min>=10&&seconds>=10) {
this.movieTime.text = min + ":" + ?seconds;
}
} ?
} ?
// 視頻播放 ?
public void MoviePlay() ?
{ ?
mediaPlayerCtrl.Play(); ?
isPlay = true; ?
isFinish = false; ?
} ?
// 視頻暫停 ?
public void MoviePause() ?
{ ?
isPlay = false; ?
mediaPlayerCtrl.Pause(); ?
} ?
// 視頻停止 ?
public void MovieStop() ?
{ ?
isPlay = false; ?
mediaPlayerCtrl.Stop(); ?
} ?
// 讀取視頻 ?
// namePtah讀取視頻的路徑
public void MovieLoad(string namePtah) ?
{ ?
mediaPlayerCtrl.Load(namePtah); ?
mediaPlayerCtrl.m_bAutoPlay = false; ?
isPlay = false; ?
isFinish = false; ?
} ?
// 視頻設(shè)置循環(huán)播放 ?
public void MovieLoop() ?
{ ?
mediaPlayerCtrl.m_bLoop = !mediaPlayerCtrl.m_bLoop; ?
} ?
/// 視頻全屏顯示 ?
public void OnClickFullScreen() ?
{ ?
if (!mediaPlayerCtrl.m_bFullScreen) ?
{ ?
mediaPlayerCtrl.m_bFullScreen = true; ?
movieRawImage.rectTransform.offsetMax = new Vector2(0, 0); ?
movieRawImage.rectTransform.offsetMin = -new Vector2(0, 0); ?
} ?
else ?
{ ?
mediaPlayerCtrl.m_bFullScreen = false; ?
movieRawImage.rectTransform.offsetMax = maxOffsetTextrue;
movieRawImage.rectTransform.offsetMin = minOffsetTextrue; ?
} ? ??
} ?
// 關(guān)閉視頻界面 ?
public void OnClickClose() ?
{ ?
mediaPlayerCtrl.Stop(); ?
movieRawImage.gameObject.SetActive(false); ?
} ?
/// 移動視頻進度條 ?
public void OnDragSlider() ?
{ ?
if (!isPlay) ?
return; ?
int seekPos = (int)(movieSlider.value * mediaPlayerCtrl.GetDuration()); ?
mediaPlayerCtrl.SeekTo(seekPos); ?
} ?
// 按下視頻進度條 ?
public void OnPoniterDownSlider() ?
{ ?
if (!isPlay) ?
return; ?
isCtrlMovie = true; ?
??} ?
/// 彈起視頻進度條 ?
public void OnPoniterUpSlider() ?
{ ?
if(!isPlay) ?
return; ?
int seekPos = (int)(movieSlider.value * mediaPlayerCtrl.GetDuration()); ?
mediaPlayerCtrl.SeekTo(seekPos);
isCtrlMovie = false;?
} ?
public bool GetIsFullScreen() ?
{ ?
return mediaPlayerCtrl.m_bFullScreen; ?
} ?
public bool GetIsLoop() ?
{ ?
return mediaPlayerCtrl.m_bLoop; ?
} ?
void OnEnd() ?
{ ?
isFinish = true; ?
} ?
} ?
將該腳本和Media Player Ctrl腳本放到RawImage組建里面,其中圖中的test.mp4為本地視頻,放在StreamingAssets文件夾下,可以寫想要播放的視頻鏈接地址,接著我們要在要改改RawImage的錨點設(shè)置,改成全屏自動拉伸的錨點。如圖:

然后我們?yōu)镾lider組件添加事件監(jiān)聽器,用來控制視頻的快進和倒退,詳細的如圖所示:

大家將一些按鈕點擊事件綁定好后,一個視頻播放器就OK了。