#nullable enable using System.Collections.Generic; using UnityEditor; using UnityEngine; using UnityEngine.Video; public class VideoClipToVideoAssetConverter : EditorWindow { private static readonly string videoFolderPath = "Assets/Videos"; private static readonly string videoAssetFolderPath = "Assets/VideoAssets"; [MenuItem("Tools/Convert VideoClips to VideoAssets")] public static void ConvertVideoClipsToVideoAssets() { // Find all Clickable components in the scene Clickable[] clickables = FindObjectsOfType(); Debug.Log($"Converting VideoClips to VideoAssets for {clickables.Length} Clickables..."); foreach (var clickable in clickables) { bool changed = false; // Check if firstVideoClip needs to be replaced // if (clickable.firstVideoClip != null) // { // VideoAsset? videoAsset = FindMatchingVideoAsset(clickable.firstVideoClip); // if (videoAsset != null) // { // Undo.RecordObject(clickable, "Convert firstVideoClip to VideoAsset"); // clickable.firstVideoAsset = videoAsset; // Assign VideoAsset to new field // changed = true; // } // } // // Check if secondVideoClip needs to be replaced with secondVideoAsset // if (clickable.secondVideoClip != null) // { // VideoAsset? videoAsset = FindMatchingVideoAsset(clickable.secondVideoClip); // if (videoAsset != null) // { // Undo.RecordObject(clickable, "Convert secondVideoClip to VideoAsset"); // clickable.secondVideoAsset = videoAsset; // Assign VideoAsset to new field // changed = true; // } // } // List listRandomVideoAssets = new(); // // Check if any VideoClips in listRandomVideoClips need to be replaced with listRandomVideoAssets // for (int i = 0; i < clickable.listRandomVideoClips.Count; i++) // { // VideoClip videoClip = clickable.listRandomVideoClips[i]; // if (videoClip != null) // { // VideoAsset? videoAsset = FindMatchingVideoAsset(videoClip); // if (videoAsset != null) // { // listRandomVideoAssets.Add(videoAsset); // // Undo.RecordObject(clickable, "Convert listRandomVideoClips to listRandomVideoAssets"); // // clickable.listRandomVideoAssets[i] = videoAsset; // Assign VideoAsset to the new list field // changed = true; // } // } // } // if (listRandomVideoAssets.Count > 0) // { // Undo.RecordObject(clickable, "Convert listRandomVideoClips to listRandomVideoAssets"); // clickable.listRandomVideoAssets = listRandomVideoAssets; // Assign VideoAsset to the new list field // changed = true; // } if (changed) { EditorUtility.SetDirty(clickable); // Mark object as dirty to ensure changes are saved Debug.Log($"Converted VideoClips to VideoAssets for {clickable.gameObject.name}"); } } } private static VideoAsset? FindMatchingVideoAsset(VideoClip videoClip) { // Get the path of the VideoClip string videoClipPath = AssetDatabase.GetAssetPath(videoClip); // Replace the "Assets/Videos" folder with "Assets/VideoAssets" if (videoClipPath.StartsWith(videoFolderPath)) { string videoAssetPath = videoClipPath.Replace(videoFolderPath, videoAssetFolderPath).Replace(".mp4", ".asset"); // Load the VideoAsset at the new path VideoAsset videoAsset = AssetDatabase.LoadAssetAtPath(videoAssetPath); if (videoAsset != null) { return videoAsset; } else { Debug.LogWarning($"VideoAsset not found for VideoClip at: {videoClipPath}"); } } return null; } }