如何用3D游戲體播放視頻?
開發者在用Unity3D做工藝仿真、AR或者游戲時,經常要在各種形狀的3D游戲體上插播視頻充當廣告或者教學,那到底怎樣實作呢?這就要用到Unity內置的視頻播放組件 —— VideoPlayer,
Unity官方網址:https://docs.unity3d.com/Manual/class-VideoPlayer.html
主題
- Demo效果展示
- 如何在3D物體表面播放視頻
- 如何代碼控制VideoPlayer
- 1.代碼控制視頻播放、暫停,監聽播放結束等
- 2.如何監測3D游戲體是否在視野內?
- 注意事項
- 如何在2D Canvas上播放視頻
Demo效果展示
先上視頻看看效果(從左至右,依次是平面、球體、曲面、圓柱):
如何在3D物體表面播放視頻?
如何在3D物體表面播放視頻
首先創建GameObject ,在GameObject 上添加VideoPlayer 組件:
然后可以看到,Source 中兩個選項,我目前用的是VideoClip,
1.VideoClip :可以直接拖入Project視圖中的視頻
2.URL : 可以放入視頻的存盤路徑
然后下面還有一個選項值得一提,RenderMode(渲染模式),播放視頻其實和貼圖非常相像,因為播放視頻用到的MovieTexture屬于貼圖Texture的子類,所以這里我們是想在3D物體上播放視頻,所以選擇MaterialOverride,
勾選play on awake,運行,就可以看到視頻在模型上播放了,

如何代碼控制VideoPlayer
1.代碼控制視頻播放、暫停,監聽播放結束等
上面已經完成了視頻播放功能,接下來我們通過代碼控制視頻:
下面展示一些 視頻播放、暫停,監聽播放結束等方法,
private VideoPlayer Vp;
void Awake()
{
Vp = GetComponent<VideoPlayer>();
}
void Start()
{
Vp.loopPointReached += VideoEnd;
Vp.Play();//播放視頻
Vp.Pause();//暫停視頻
Vp.Stop();//停止視頻
Vp.playbackSpeed = 1;//播放速度
}
/// <summary>
/// 監聽視頻是否播放結束,結束時呼叫
/// </summary>
/// <param name="vp"></param>
void VideoEnd(VideoPlayer vp)
{
Debug.Log("視頻播放結束");
Vp.Play();//重新播放視頻
}
2.如何監測3D游戲體是否在視野內?
視頻一般是有聲音的,在做AR專案時,通常會在3D游戲體出界后,關閉該游戲體身上的視頻和音效,那么如何監測3D游戲體是否出界呢?
Unity有一個內置方法,使用的唯一條件是該游戲體身上必須帶有Mseh組件,因為它是通過是否渲染該游戲體來判斷的,
下面展示 3D游戲體是否在視野內的監測方法,
//當游戲體第一次出界時呼叫,該游戲體身上必須帶有Mseh組件
private void OnBecameInvisible()
{
StopVideo();
Debug.Log("出界");
}
//當游戲體第一次進入視野時呼叫,該游戲體身上必須帶有Mseh組件
private void OnBecameVisible()
{
OpenVideo();
Debug.Log("視野內");
}
注意事項
- 可選視頻型別:.mp4、mov、.mpg、.mpeg、.avi和.asf
- 親測3D模型使用情況:
1、視頻會在模型的每一個面都播放,比如視頻會在正方體6個面分別播放,此外,模型和視頻比例不一樣的話會有拉伸情況,因此,需要按自己需求讓美術做配套的模型和視頻,
2、如果發現視頻的中心并不在3D模型的中間,是模型UV的問題,需要美術調整UV,把視頻放在模型指定面的中間,
如何在2D Canvas上播放視頻
在2D界面播放視頻和在3D游戲體上播放,原理及代碼是一樣的,區別是要把Mesh組件換成RawImage,然后VideoPlayer的RenderMode選項選擇RenderTexture或者其他選項,
詳情就不說了,網上有很多,可以參考以下網址:
https://blog.csdn.net/weixin_43367805/article/details/93178830
https://www.cnblogs.com/0kk470/p/10637034.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/84036.html
標籤:其他
