Files
monde-usage-unity/Assets/Scripts/Editor/VideoClipToVideoAssetConverter.cs
2024-09-22 21:45:37 +02:00

107 lines
3.7 KiBLFS
C#

#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<Clickable>();
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<VideoAsset> 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<VideoAsset>(videoAssetPath);
if (videoAsset != null)
{
return videoAsset;
}
else
{
Debug.LogWarning($"VideoAsset not found for VideoClip at: {videoClipPath}");
}
}
return null;
}
}