107 lines
3.7 KiBLFS
C#
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;
|
|
}
|
|
}
|