前提・実現したいこと
フォルダ内の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の場合は問題なく動作しました。
あなたの回答
tips
プレビュー