質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

0回答

1994閲覧

Unity、VideoPlayerからサムネイル(preview)を取得したい

sai32

総合スコア2

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2021/03/30 16:30

前提・実現したいこと

フォルダ内のmp4すべてのサムネイルを取得し、UIに並べたいです。
(ビデオプレイヤー0秒時点でのテクスチャを取得し、UIに並べたいです)

現在考えている方法
VideoPlayerからRenderTextureへ出力し、そのRenderTextureからTexture2Dを作成しRawImageとしてUIに並べる。
その後VideoPlayerとRenderTextureは削除する。

発生している問題・エラーメッセージ

動的に生成したRenderTextureからだと望むTexture2Dを作成するのに失敗(透明)します。

該当のソースコード

C#

1if(Input.GetKeyDown(KeyCode.T)) 2 { 3 testRenderList.Clear();//リストの初期化 4 5 //フォルダーのmp4を取得 6 DirectoryInfo dir = new DirectoryInfo(Application.dataPath + "/Movies"); 7 FileInfo[] mp4info = dir.GetFiles("*.mp4"); 8 9 10 for(int i = 0; i < mp4info.Length; i++) 11 { 12 namenum = i; //名づけ用の変数 13 var obj = Instantiate(ThumbnaiPlayer, new Vector3(0.0f, 0.0f, 0.0f), Quaternion.identity);//ビデオプレイヤーのプレハブ生成 14 obj.name = ("mp4_") + (namenum); 15 VideoPlayer vP = obj.GetComponent<VideoPlayer>(); 16 17 RenderTexture _renderTexture = new RenderTexture((int)(1920*0.1f), (int)(1080*0.1f),24,RenderTextureFormat.Default); 18 _renderTexture.name =obj.name+"rt"; 19 20 vP.renderMode = VideoRenderMode.RenderTexture;//ビデオプレイヤーの0秒のところをRenderTextureへ 21 vP.targetTexture = _renderTexture; 22 vP.url = ""+mp4info[i]; 23 vP.time = 0.0f; 24 vP.Play(); 25 vP.Pause(); 26 27 testRenderList.Add(_renderTexture);//ListにRenderTextureを追加 28 29 _createUIScript.CreatePrefab("" + mp4info[i]);//UIのRawImageプレハブを生成 30 GameObject uiobj = uiparent.transform.GetChild(i).gameObject; 31 RawImage uiobjimage = uiobj.GetComponent<RawImage>(); 32 33 RenderTexture rt = testRenderList[i];//RenderTextureからTexture2Dを作る 34 Texture2D tex2d = new Texture2D(rt.width,rt.height); 35 tex2d.name = obj.name+"t2d"; 36 RenderTexture.active = rt; 37 tex2d.ReadPixels(new Rect(0,0,rt.width,rt.height),0,0,false); 38 tex2d.Apply(); 39 40 uiobjimage.texture = tex2d; 41 } 42 43 }

試したこと

二回呼び出すと、新しくできたRawImageの方にはTexture2Dが適用されていたため、
「//RenderTextureからTexture2Dを作る」から下のところを別のif文で後から呼び出してみたりしましたが、Texture2Dは透明のままでした。

補足情報(FW/ツールのバージョンなど)

動的でないRenderTextureの場合は問題なく動作しました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問