2025-12-11 13:14:43 +01:00

58 lines
1.9 KiB
C#

using UnityEngine.Rendering;
using UnityEngine.Video;
namespace UnityEngine.XR.Templates.MR
{
/// <summary>
/// Create a RenderTexture for rendering video to a target renderer.
/// </summary>
[RequireComponent(typeof(VideoPlayer))]
public class VideoPlayerRenderTexture : MonoBehaviour
{
private string k_ShaderName;
string GetShaderName()
{
if (GraphicsSettings.currentRenderPipeline)
{
string pipelineName = GraphicsSettings.currentRenderPipeline.name;
if (pipelineName.Contains("UniversalRenderPipeline"))
{
return "Universal Render Pipeline/Unlit";
}
else if (pipelineName.Contains("HDRenderPipeline"))
{
return "HDRP/Unlit";
}
}
// Fallback for the built-in render pipeline
return "Unlit/Texture";
}
[SerializeField, Tooltip("The target Renderer which will display the video.")]
Renderer m_Renderer;
[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;
void Start()
{
k_ShaderName = GetShaderName();
var renderTexture = new RenderTexture(m_RenderTextureWidth, m_RenderTextureHeight, m_RenderTextureDepth);
renderTexture.Create();
var material = new Material(Shader.Find(k_ShaderName));
material.mainTexture = renderTexture;
GetComponent<VideoPlayer>().targetTexture = renderTexture;
m_Renderer.material = material;
}
}
}