VideoPlayer では 現在のフレームの Texture を参照することが可能なため、RenderTexture を生成して tagetTexture を指定しなくてもお手軽にテクスチャを表示できる
※ 内部的に RenderTexture を生成しているので RenderTexture を利用しないというわけではない
texture: Internal texture in which video content is placed. (Read Only)
しかし、設定や RenderTexture のサイズは指定できない
それを実行できるコンポーネントを以下に示す
using UnityEngine; using UnityEngine.UI; using UnityEngine.Video; [RequireComponent(typeof(RawImage))] [RequireComponent(typeof(VideoPlayer))] public class VideoPlayerApi : MonoBehaviour { [SerializeField] private VideoPlayer _videoPlayer; [SerializeField] private RawImage _rawImage; private void Reset() { _rawImage = GetComponent<RawImage>(); _videoPlayer = GetComponent<VideoPlayer>(); _videoPlayer.renderMode = VideoRenderMode.APIOnly; _videoPlayer.playOnAwake = false; } private void Awake() { _rawImage.enabled = false; } public void Play(VideoClip _clip) { _videoPlayer.clip = _clip; _videoPlayer.sendFrameReadyEvents = true; // 参照できるのはそのフレームでの Texture なのでフレームごとにテクスチャを更新 _videoPlayer.frameReady += (vp, frame) => { if (!_rawImage.enabled) _rawImage.enabled = true; _rawImage.texture = _videoPlayer.texture; }; _videoPlayer.prepareCompleted += vp => { _videoPlayer.Play(); }; _videoPlayer.Prepare(); } }