using UnityEngine; using UnityEngine.Video; /// /// Minimal script to ensure a VideoPlayer uses a StreamingAssets video path at runtime. /// It sets the VideoPlayer.url to the file inside StreamingAssets and auto-plays once prepared. /// No scene management, no events – keep those externally. /// [RequireComponent(typeof(VideoPlayer))] public class SplashVideoPlayer : MonoBehaviour { [Tooltip("Relative video file name inside StreamingAssets (e.g. 'uncaptured_splash.mp4').")] public string videoFileName = "uncaptured_splash.mp4"; [Tooltip("Fallback video file for Unity editor (WebM/VP8 for Linux compatibility).")] public string editorVideoFileName = "uncaptured_splash_editor.webm"; [Tooltip("Automatically play once prepared.")] public bool autoPlay = true; private VideoPlayer _videoPlayer; private void Awake() { _videoPlayer = GetComponent(); ConfigureVideoPlayer(); SetUrl(); _videoPlayer.prepareCompleted += OnPrepared; _videoPlayer.errorReceived += OnError; _videoPlayer.Prepare(); } private void ConfigureVideoPlayer() { _videoPlayer.playOnAwake = false; // We control when to play _videoPlayer.source = VideoSource.Url; // Choose a render mode that fits your setup; here we assume RenderTexture or Camera Near Plane set in inspector } private void SetUrl() { // Use WebM for editor (better Linux support), MP4 for builds string fileToUse = videoFileName; #if UNITY_EDITOR if (!string.IsNullOrEmpty(editorVideoFileName)) { fileToUse = editorVideoFileName; } #endif if (string.IsNullOrEmpty(fileToUse)) { Debug.LogWarning("SplashVideoPlayer: videoFileName is empty."); return; } string path = System.IO.Path.Combine(Application.streamingAssetsPath, fileToUse); if (!path.StartsWith("file://")) path = "file://" + path; _videoPlayer.url = path; Debug.Log($"[SplashVideoPlayer] Loading video: {path}"); } private void OnPrepared(VideoPlayer vp) { if (autoPlay) { vp.Play(); } } private void OnError(VideoPlayer vp, string message) { Debug.LogWarning($"SplashVideoPlayer: video error -> {message}"); } }