157 lines
6.2 KiB
C#
157 lines
6.2 KiB
C#
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
|
|
public class TexturePlatformSync
|
|
{
|
|
[MenuItem("LillithRosePup/Sync Texture Platforms (Android -> iOS)")]
|
|
public static void SyncTexturePlatforms()
|
|
{
|
|
var proceed = EditorUtility.DisplayDialog(
|
|
"Sync Texture Platforms",
|
|
"This will find all textures in the project and copy Android import settings to iOS if they differ.\n\nThis may take a while for large projects. Continue?",
|
|
"Continue",
|
|
"Cancel"
|
|
);
|
|
|
|
if (!proceed)
|
|
{
|
|
return;
|
|
}
|
|
|
|
SyncAllTextures();
|
|
}
|
|
|
|
private static void SyncAllTextures()
|
|
{
|
|
// Find all texture assets in the project
|
|
string[] textureGuids = AssetDatabase.FindAssets("t:Texture2D");
|
|
|
|
int totalTextures = textureGuids.Length;
|
|
int syncedCount = 0;
|
|
int skippedCount = 0;
|
|
int errorCount = 0;
|
|
bool wasCancelled = false;
|
|
|
|
Debug.Log($"Found {totalTextures} textures. Starting sync...");
|
|
|
|
// Start batching asset imports to pause reimporting until complete
|
|
AssetDatabase.StartAssetEditing();
|
|
|
|
try
|
|
{
|
|
for (int i = 0; i < textureGuids.Length; i++)
|
|
{
|
|
string guid = textureGuids[i];
|
|
string path = AssetDatabase.GUIDToAssetPath(guid);
|
|
|
|
// Update progress bar
|
|
if (EditorUtility.DisplayCancelableProgressBar(
|
|
"Syncing Texture Platforms",
|
|
$"Processing: {System.IO.Path.GetFileName(path)} ({i + 1}/{totalTextures})",
|
|
(float)i / totalTextures))
|
|
{
|
|
wasCancelled = true;
|
|
Debug.LogWarning("Texture platform sync cancelled by user.");
|
|
break;
|
|
}
|
|
|
|
try
|
|
{
|
|
TextureImporter importer = AssetImporter.GetAtPath(path) as TextureImporter;
|
|
if (importer == null)
|
|
{
|
|
skippedCount++;
|
|
continue;
|
|
}
|
|
|
|
// Get Android and iOS platform settings
|
|
TextureImporterPlatformSettings androidSettings = importer.GetPlatformTextureSettings("Android");
|
|
TextureImporterPlatformSettings iosSettings = importer.GetPlatformTextureSettings("iOS");
|
|
|
|
// Check if settings differ
|
|
if (SettingsDiffer(androidSettings, iosSettings))
|
|
{
|
|
// Copy Android settings to iOS
|
|
TextureImporterPlatformSettings newIosSettings = new TextureImporterPlatformSettings
|
|
{
|
|
name = "iOS",
|
|
overridden = androidSettings.overridden,
|
|
maxTextureSize = androidSettings.maxTextureSize,
|
|
textureCompression = androidSettings.textureCompression,
|
|
compressionQuality = androidSettings.compressionQuality,
|
|
allowsAlphaSplitting = androidSettings.allowsAlphaSplitting,
|
|
format = androidSettings.format,
|
|
crunchedCompression = androidSettings.crunchedCompression
|
|
};
|
|
|
|
importer.SetPlatformTextureSettings(newIosSettings);
|
|
// Import within the batch session - imports will be queued until StopAssetEditing
|
|
AssetDatabase.ImportAsset(path, ImportAssetOptions.ForceUpdate);
|
|
syncedCount++;
|
|
Debug.Log($"Synced: {path}");
|
|
}
|
|
else
|
|
{
|
|
skippedCount++;
|
|
}
|
|
}
|
|
catch (System.Exception ex)
|
|
{
|
|
errorCount++;
|
|
Debug.LogError($"Error processing {path}: {ex.Message}");
|
|
}
|
|
}
|
|
}
|
|
finally
|
|
{
|
|
// Stop batching - this will trigger all queued imports at once
|
|
AssetDatabase.StopAssetEditing();
|
|
}
|
|
|
|
EditorUtility.ClearProgressBar();
|
|
AssetDatabase.Refresh();
|
|
|
|
// Show completion dialog with statistics (even if cancelled)
|
|
string title = wasCancelled ? "Sync Cancelled" : "Sync Complete";
|
|
string message = wasCancelled
|
|
? $"Texture platform sync was cancelled.\n\n" +
|
|
$"Total textures: {totalTextures}\n" +
|
|
$"Processed: {syncedCount + skippedCount + errorCount}\n" +
|
|
$"Synced: {syncedCount}\n" +
|
|
$"Skipped (already matching): {skippedCount}\n" +
|
|
$"Errors: {errorCount}"
|
|
: $"Texture platform sync completed!\n\n" +
|
|
$"Total textures: {totalTextures}\n" +
|
|
$"Synced: {syncedCount}\n" +
|
|
$"Skipped (already matching): {skippedCount}\n" +
|
|
$"Errors: {errorCount}";
|
|
|
|
EditorUtility.DisplayDialog(title, message, "OK");
|
|
|
|
string logMessage = wasCancelled
|
|
? $"Texture platform sync cancelled. Processed: {syncedCount + skippedCount + errorCount}, Synced: {syncedCount}, Skipped: {skippedCount}, Errors: {errorCount}"
|
|
: $"Texture platform sync complete. Synced: {syncedCount}, Skipped: {skippedCount}, Errors: {errorCount}";
|
|
Debug.Log(logMessage);
|
|
}
|
|
|
|
private static bool SettingsDiffer(TextureImporterPlatformSettings android, TextureImporterPlatformSettings ios)
|
|
{
|
|
// If Android settings are not overridden, they match by default
|
|
if (!android.overridden)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
// Compare all relevant settings
|
|
return android.maxTextureSize != ios.maxTextureSize ||
|
|
android.textureCompression != ios.textureCompression ||
|
|
android.compressionQuality != ios.compressionQuality ||
|
|
android.allowsAlphaSplitting != ios.allowsAlphaSplitting ||
|
|
android.format != ios.format ||
|
|
android.crunchedCompression != ios.crunchedCompression ||
|
|
android.overridden != ios.overridden;
|
|
}
|
|
}
|
|
|