2015-05-07 50 views
0

我使用的是Unity 5和C#,我希望在運行時從磁盤上的任何位置加載影片,而不是從Resources文件夾加載。在Unity中從磁盤加載電影5

例如,這可以使用Texture2D類型中的.LoadImage(bytes)方法處理常規圖像紋理,但似乎沒有與MovieTexture等效。

該代碼顯示瞭如何從資源文件夾中執行該操作,但是如何修改它以從磁盤加載?

感謝

public void loadVideo (GameObject container, string video) 
{ 
    // Load MovieTexture from Resources Folder 
    MovieTexture mat = (MovieTexture)Resources.Load(Path.GetFileNameWithoutExtension(video), typeof(MovieTexture)); 

    MeshRenderer ren = container.GetComponent<MeshRenderer>(); 
    ren.material.mainTexture = mat;  
    mat.Play();  
} 

回答

1

可以。使用WWW類來達到此目的。

IEnumerator loadAndPlay(){ 
WWW diskMovieDir = new WWW("file:///C:/yourvideoDir/video.mp4"); 

//Wait for file finish loading 
while(!diskMovieDir.isDone){ 
yield return null; 
} 

//Save the loaded movie from WWW to movetexture 
MovieTexture movieToPlay = diskMovieDir.movie; 

//Hook the movie texture to the current renderer 
MeshRenderer ren = container.GetComponent<MeshRenderer>(); 
ren.material.mainTexture = movieToPlay ;  

movieToPlay.play(); 
} 

現在你可以通過啓動協程來調用它。

StartCoroutine(loadAndPlay()); 

我沒有編譯這個,所以可能會出現編譯錯誤,但如果有錯誤,您可以輕鬆修復它。如果它編譯,這也應該沒有問題。請注意,網址必須以file:///開頭。如果這沒有奏效,請嘗試file://

+0

謝謝我會試試這個 – AlexS

+0

很好,我很高興我發佈我不認爲我會想出解決方案。這可以與實時視頻流一起工作 – AlexS

+0

不確定視頻流。我從某個人那裏聽說它只能使用.ogg擴展名。所以,也許將視頻文件轉換爲ogg,這可能會起作用。我假設你使用的是Unity而不是專業版,所以解決你的問題的方法是學習C++,然後編寫一個將視頻解碼爲幀的插件。通過網絡發送這些幀(視頻)。您需要了解C++網絡套接字(TCP/UDP)。您也可以使用C#執行此操作,但您需要使用Unity Pro版本才能使用C#套接字(如TCPListener)。你不需要爲你自己的C++插件提供一個專業版。 – Programmer