chunk 1: core gameplay scripts scenes runtime assets
This commit is contained in:
128
Assets/Editor/ForceJsonCatalog.cs
Normal file
128
Assets/Editor/ForceJsonCatalog.cs
Normal file
@@ -0,0 +1,128 @@
|
||||
using UnityEditor;
|
||||
using UnityEditor.AddressableAssets;
|
||||
using UnityEditor.AddressableAssets.Settings;
|
||||
using UnityEngine;
|
||||
using System.IO;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
/// <summary>
|
||||
/// WORKAROUND for Unity 6 bug where m_EnableJsonCatalog is ignored
|
||||
/// This script patches settings.json to force JSON catalog loading
|
||||
/// </summary>
|
||||
public class ForceJsonCatalogWorkaround
|
||||
{
|
||||
[MenuItem("Addressables/Fix/Patch settings.json for JSON Catalogs")]
|
||||
public static void PatchSettingsForJsonCatalog()
|
||||
{
|
||||
Debug.Log("[ForceJsonCatalog] WORKAROUND: Patching settings.json to use .json catalogs instead of .bin");
|
||||
|
||||
// Find all settings.json files
|
||||
string[] settingsFiles = Directory.GetFiles("Library/com.unity.addressables", "settings.json", SearchOption.AllDirectories);
|
||||
|
||||
if (settingsFiles.Length == 0)
|
||||
{
|
||||
Debug.LogWarning("[ForceJsonCatalog] No settings.json found. Build Addressables content first!");
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (string settingsPath in settingsFiles)
|
||||
{
|
||||
PatchSettingsFile(settingsPath);
|
||||
}
|
||||
|
||||
// Also patch ServerData if it exists
|
||||
string[] serverSettingsFiles = Directory.GetFiles("ServerData", "settings.json", SearchOption.AllDirectories);
|
||||
foreach (string settingsPath in serverSettingsFiles)
|
||||
{
|
||||
PatchSettingsFile(settingsPath);
|
||||
}
|
||||
|
||||
// Rename .bin catalogs to .json
|
||||
RenameBinCatalogsToJson();
|
||||
|
||||
Debug.Log("[ForceJsonCatalog] ✓ Patch complete! settings.json now references .json catalogs");
|
||||
Debug.Log("[ForceJsonCatalog] Next steps:");
|
||||
Debug.Log(" 1. Rebuild your APK");
|
||||
Debug.Log(" 2. Upload ServerData/Android/ contents to your server");
|
||||
Debug.Log(" 3. Test on device");
|
||||
}
|
||||
|
||||
private static void PatchSettingsFile(string settingsPath)
|
||||
{
|
||||
try
|
||||
{
|
||||
string content = File.ReadAllText(settingsPath);
|
||||
|
||||
// Replace all references from .bin to .json in catalog URLs
|
||||
string patchedContent = content.Replace("catalog.bin", "catalog.json");
|
||||
patchedContent = patchedContent.Replace("catalog_2.0.0.bin", "catalog_2.0.0.json");
|
||||
|
||||
// Also patch the m_IsLocalCatalogInBundle if needed
|
||||
patchedContent = Regex.Replace(patchedContent,
|
||||
@"""m_IsLocalCatalogInBundle"":\s*true",
|
||||
"\"m_IsLocalCatalogInBundle\":false");
|
||||
|
||||
File.WriteAllText(settingsPath, patchedContent);
|
||||
Debug.Log($"[ForceJsonCatalog] ✓ Patched: {settingsPath}");
|
||||
}
|
||||
catch (System.Exception ex)
|
||||
{
|
||||
Debug.LogError($"[ForceJsonCatalog] Error patching {settingsPath}: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
private static void RenameBinCatalogsToJson()
|
||||
{
|
||||
// Rename catalog.bin files to catalog.json
|
||||
string[] paths = new string[] { "Library/com.unity.addressables", "ServerData" };
|
||||
|
||||
foreach (string basePath in paths)
|
||||
{
|
||||
if (!Directory.Exists(basePath)) continue;
|
||||
|
||||
string[] binFiles = Directory.GetFiles(basePath, "catalog*.bin", SearchOption.AllDirectories);
|
||||
|
||||
foreach (string binFile in binFiles)
|
||||
{
|
||||
string jsonFile = binFile.Replace(".bin", ".json");
|
||||
|
||||
try
|
||||
{
|
||||
// Copy (don't delete .bin yet for safety)
|
||||
File.Copy(binFile, jsonFile, true);
|
||||
Debug.Log($"[ForceJsonCatalog] ✓ Created: {Path.GetFileName(jsonFile)}");
|
||||
}
|
||||
catch (System.Exception ex)
|
||||
{
|
||||
Debug.LogError($"[ForceJsonCatalog] Error renaming {binFile}: {ex.Message}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
AssetDatabase.Refresh();
|
||||
}
|
||||
|
||||
[MenuItem("Addressables/Fix/Build + Patch (Complete Fix)")]
|
||||
public static void BuildAndPatchForJsonCatalog()
|
||||
{
|
||||
Debug.Log("[ForceJsonCatalog] Starting complete build with JSON catalog fix...");
|
||||
|
||||
// 1. Build Addressables normally
|
||||
Debug.Log("[ForceJsonCatalog] Step 1/3: Building Addressables content...");
|
||||
AddressableAssetSettings.BuildPlayerContent();
|
||||
|
||||
// 2. Patch settings.json files
|
||||
Debug.Log("[ForceJsonCatalog] Step 2/3: Patching settings.json files...");
|
||||
PatchSettingsForJsonCatalog();
|
||||
|
||||
// 3. Done
|
||||
Debug.Log("[ForceJsonCatalog] ============================================");
|
||||
Debug.Log("[ForceJsonCatalog] ✓ BUILD COMPLETE WITH JSON CATALOG FIX!");
|
||||
Debug.Log("[ForceJsonCatalog] ============================================");
|
||||
Debug.Log("[ForceJsonCatalog] Next steps:");
|
||||
Debug.Log("[ForceJsonCatalog] 1. Rebuild APK in Unity (File → Build Settings → Build)");
|
||||
Debug.Log("[ForceJsonCatalog] 2. Upload ServerData/Android/ to server");
|
||||
Debug.Log("[ForceJsonCatalog] 3. Install APK and test");
|
||||
Debug.Log("[ForceJsonCatalog] ============================================");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user