一、?Video Player的使用方法
講解邏輯為Unity | 基礎(chǔ)邏輯_菌菌巧樂茲的博客-CSDN博客
(一)把素材倉庫里的視頻放進Game界面
1.我們需要在素材倉庫中放一個視頻(其他文件夾不用管,我只是懶得刪了)
2.在Unity里建一個能接收視頻的地方VideoPlayer
備注:視頻和圖片是不一樣的,圖片到這一步組合一下就能用,但是視頻不行。因為Unity里不支持直接播放視頻,它只能播放動態(tài)的Texture。
3.我們來看一下VideoPlayer身上帶的組件
這里因為unity自己也知道,自己沒辦法直接播放視頻,所以它這里讓你可以填兩個東西,上面是你想播放的視頻,下面讓你填一個空的texture,之后,它會自己把視頻印到Texture上,所以這個組件并不是真的用來播放視頻的,而是用來轉(zhuǎn)換的。
4.所以我們需要建一個新的Texture來接收這個視頻(在這個界面右鍵→ Creat→可以找到RenderTexture)
把這個拖到剛才VideoPlayer上應(yīng)該在的位置
此時此刻,我們就成功把視頻印到這個新建的Texture身上了
5.我們需要建一個播放Texture的東西
unity播放Texture的物體叫RawImage
?把你的Texture拖進去
?這樣就可以播放視頻了
(二)大小控制
因為這個視頻是印到Texture身上,所以我們想改視頻的大小,就必須改Texture的大小
?因為這個texture是用RawImage播放的,所以我們也需要改rawImage的大?。ㄟ@步略)
(三)VideoPlayer組件常用部分
二?、Video Player的常用方法
控制視頻,我們還是通過VideoPlayer控制
所以我們先建一個腳本,寫一行代碼
public VideoPlayer videoPlayer;
在外面把這個物體拖進來
?然后就可以簡單使用了,下面是常用方法
videoPlayer.Play(); //開始
videoPlayer.Stop(); //停止
videoPlayer.Pause(); //暫停
videoPlayer.Prepare(); // 播放引擎準備(提高開始播放時的速度)
videoPlayer.targetTexture.Release(); //重播時,不出現(xiàn)之前結(jié)束時的畫面
videoPlayer.started += "方法名" //每次播放后立刻啟動方法
videoPlayer.loopPointReached += "方法名" //每次到結(jié)尾,都會自己啟動這個方法
videoPlayer.time = 5; //視頻的時間調(diào)到第五秒
videoPlayer.frame = 1; //視頻調(diào)到第一幀
//常用案例中細講
videoPlayer.sendFrameReadyEvents = true; //啟用videoPlayer.frameReady方法
videoPlayer.frameReady += "方法名" //準備好新的一幀后啟動這個方法
?上面有方法名的示例代碼:
videoPlayer.loopPointReached += FalseGameObject;
void FalseGameObject(VideoPlayer videoPlayer) {
gameObject.SetActive(false);
}
方法的括號里必須要帶?VideoPlayer哦,后面那個小寫的是名字,可以自己起不要緊。
三、常用案例
(一)打開視頻后,顯示第一幀圖片
VideoPlayer中可以選擇自動打開并播放視頻,和不打開視頻。
但是有時候我們有需求,我希望第一幀出現(xiàn)在界面上,用來做封面或者其他。
圖例:
你希望再軟件里實現(xiàn)這個狀態(tài),展示視頻圖,但是又不播放。
基本邏輯:
1.我們讓它自動打開視頻(別忘了自己開這一步)
2.當準備好第一幀的時候,它會自動播放第一幀
3.趁他沒反應(yīng)過來,暫停它
VideoPlayer vp;
void Start()
{
//我一般把這個代碼直接掛在需要需要使用的VideoPlayer身上,這樣可以直接找到組件
vp = GetComponent<VideoPlayer>();
//frameReady這個方法是需要打開才能用的
//這個下面這句話就是我把這個方法啟用
vp.sendFrameReadyEvents = true;
//當準備好新的一幀后,執(zhí)行下面方法
vp.frameReady += PauseVideoUnitOnFirstFrame;
}
public void PauseVideoUnitOnFirstFrame(VideoPlayer player, long frameIdx)
{
//暫停播放
player.Pause();
//關(guān)掉這個方法,要不然它準備好第二幀又執(zhí)行,沒完沒了了
player.sendFrameReadyEvents = false;
//同時也去掉這個方法
player.frameReady -= PauseVideoUnitOnFirstFrame;
}
四、相關(guān)內(nèi)容
Unity | 如何使用webm透明視頻_菌菌巧樂茲的博客-CSDN博客
?五、關(guān)于性能優(yōu)化
1.播放方式優(yōu)化
正常拿電腦播放視頻有兩種方式:
假如我有10個視頻
1.我開機以后,把10個視頻都打開,也不關(guān),就一直都開著,用哪個就播放哪個。
優(yōu)點:點擊播放不會緩存(不會卡),因為都是提前加載好的
缺點:你一兩個視頻,哪怕三四個視頻都還好,你要是十幾二十幾個視頻一起開,電腦就卡死了,所以非常浪費性能。
2.我把10個視頻都準備好,但我不打開,我需要哪個再打開哪個。
優(yōu)點:不浪費性能,哪怕你準備100個視頻
缺點:你每次打開了才緩存,所以可能會卡
推薦用第二個。
2.代碼注意事項
視頻播放完,或者你用了暫停的方法,視頻本質(zhì)上都還是開著的,只是不播放了而已。文章來源:http://www.zghlxwxcb.cn/news/detail-452501.html
所以記得視頻播放完以后用stop()方法,把視頻關(guān)掉,降低內(nèi)存占用?。。?!文章來源地址http://www.zghlxwxcb.cn/news/detail-452501.html
到了這里,關(guān)于Unity | Video Player的簡單使用方法和原理的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!