Files
RoomAwareVR/Assets/VRMPAssets/Tutorial/TutorialScripts/VideoPlayerRenderTexture.cs
2025-05-26 00:46:28 +02:00

59 lines
1.9 KiB
C#

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Video;
namespace XRMultiplayer
{
/// <summary>
/// Create a RenderTexture for rendering video to a target renderer.
/// </summary>
[RequireComponent(typeof(VideoPlayer))]
public class VideoPlayerRenderTexture : MonoBehaviour
{
const string k_ShaderName = "Unlit/Texture";
[SerializeField]
[Tooltip("The target Image which will display the video.")]
RawImage m_Image;
[SerializeField] Vector2 m_ImageSize = new Vector2(1920, 1080);
[SerializeField] float m_Scale = 1.0f;
[SerializeField] float m_ZOffset = -1;
[SerializeField]
[Tooltip("The width of the RenderTexture which will be created.")]
int m_RenderTextureWidth = 1920;
[SerializeField]
[Tooltip("The height of the RenderTexture which will be created.")]
int m_RenderTextureHeight = 1080;
[SerializeField]
[Tooltip("The bit depth of the depth channel for the RenderTexture which will be created.")]
int m_RenderTextureDepth;
VideoPlayer m_VideoPlayer;
void OnValidate()
{
if (m_Image == null) return;
m_Image.rectTransform.sizeDelta = m_ImageSize * m_Scale;
m_Image.rectTransform.localPosition = new Vector3(m_Image.rectTransform.localPosition.x, m_Image.rectTransform.localPosition.y, m_ZOffset);
}
void Awake()
{
if (!TryGetComponent(out m_VideoPlayer))
{
Utils.Log("VideoPlayerRenderTexture requires a VideoPlayer component.", 2);
return;
}
var renderTexture = new RenderTexture(m_RenderTextureWidth, m_RenderTextureHeight, m_RenderTextureDepth);
renderTexture.Create();
m_Image.material.mainTexture = renderTexture;
m_VideoPlayer.targetTexture = renderTexture;
}
}
}