140 lines
4.7 KiB
C#
140 lines
4.7 KiB
C#
using System;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
|
|
namespace UnityEngine.ProBuilder.AssetIdRemapUtility
|
|
{
|
|
static class PackageImporter
|
|
{
|
|
const string k_PackageManagerEditorCore = "e98d45d69e2c4936a7382af00fd45e58";
|
|
const string k_AssetStoreEditorCore = "4df21bd079886d84699ca7be1316c7a7";
|
|
const string k_ProBuilder2CoreGUID = "0472bdc8d6d15384d98f22ee34302f9c";
|
|
const string k_ProBuilder3CoreGUID = "4f0627da958b4bb78c260446066f065f";
|
|
|
|
static readonly string[] k_AssetStoreInstallGuids = new string[]
|
|
{
|
|
"0472bdc8d6d15384d98f22ee34302f9c", // ProBuilderCore
|
|
"b617d7797480df7499f141d87e13ebc5", // ProBuilderMeshOps
|
|
"4df21bd079886d84699ca7be1316c7a7" // ProBuilderEditor
|
|
};
|
|
|
|
static readonly string[] k_PackageManagerInstallGuids = new string[]
|
|
{
|
|
"4f0627da958b4bb78c260446066f065f", // Core
|
|
"9b27d8419276465b80eb88c8799432a1", // Mesh Ops
|
|
"e98d45d69e2c4936a7382af00fd45e58", // Editor
|
|
};
|
|
|
|
internal static string EditorCorePackageManager { get { return k_PackageManagerEditorCore; } }
|
|
internal static string EditorCoreAssetStore { get { return k_AssetStoreEditorCore; } }
|
|
|
|
internal static void SetEditorDllEnabled(string guid, bool isEnabled)
|
|
{
|
|
string dllPath = AssetDatabase.GUIDToAssetPath(guid);
|
|
|
|
var importer = AssetImporter.GetAtPath(dllPath) as PluginImporter;
|
|
|
|
if (importer != null)
|
|
{
|
|
importer.SetCompatibleWithAnyPlatform(false);
|
|
importer.SetCompatibleWithEditor(isEnabled);
|
|
}
|
|
}
|
|
|
|
internal static bool IsEditorPluginEnabled(string guid)
|
|
{
|
|
string path = AssetDatabase.GUIDToAssetPath(guid);
|
|
var importer = AssetImporter.GetAtPath(path) as PluginImporter;
|
|
if (!importer)
|
|
return false;
|
|
return importer.GetCompatibleWithEditor() && !importer.GetCompatibleWithAnyPlatform();
|
|
}
|
|
|
|
internal static void Reimport(string guid)
|
|
{
|
|
string dllPath = AssetDatabase.GUIDToAssetPath(guid);
|
|
|
|
if (!string.IsNullOrEmpty(dllPath))
|
|
AssetDatabase.ImportAsset(dllPath);
|
|
}
|
|
|
|
static bool AreAnyAssetsAreLoaded(string[] guids)
|
|
{
|
|
foreach (var id in guids)
|
|
{
|
|
if (AssetImporter.GetAtPath(AssetDatabase.GUIDToAssetPath(id)) != null)
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
static bool FileContainsString(string path, string a, string b)
|
|
{
|
|
using (var sr = new StreamReader(path))
|
|
{
|
|
while (sr.Peek() > -1)
|
|
{
|
|
var line = sr.ReadLine();
|
|
|
|
if (line.Contains(a) || line.Contains(b))
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
internal static bool DoesProjectContainDeprecatedGUIDs()
|
|
{
|
|
var scenes = Directory.GetFiles("Assets", "*.unity", SearchOption.AllDirectories);
|
|
var prefabs = Directory.GetFiles("Assets", "*.prefab", SearchOption.AllDirectories);
|
|
var count = (scenes.Length + prefabs.Length) - 1f;
|
|
var exit = count < 1f;
|
|
|
|
try
|
|
{
|
|
for (int n = 0; !exit && n < 2; n++)
|
|
{
|
|
var arr = n < 1 ? scenes : prefabs;
|
|
|
|
for (int i = 0, c = arr.Length; !exit && i < c; i++)
|
|
{
|
|
if (FileContainsString(arr[i], k_ProBuilder2CoreGUID, k_ProBuilder3CoreGUID))
|
|
return true;
|
|
|
|
exit = EditorUtility.DisplayCancelableProgressBar(
|
|
"Checking for Broken ProBuilder References",
|
|
"Scanning scene " + arr[i],
|
|
i / count);
|
|
}
|
|
}
|
|
}
|
|
finally
|
|
{
|
|
EditorUtility.ClearProgressBar();
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Check if any pre-4.0 ProBuilder package is present in the project
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
internal static bool IsPreProBuilder4InProject()
|
|
{
|
|
return AreAnyAssetsAreLoaded(k_AssetStoreInstallGuids)
|
|
|| AreAnyAssetsAreLoaded(k_PackageManagerInstallGuids);
|
|
}
|
|
|
|
internal static bool IsProBuilder4OrGreaterLoaded()
|
|
{
|
|
return AppDomain.CurrentDomain.GetAssemblies().Any(x => x.ToString().Contains("Unity.ProBuilder"));
|
|
}
|
|
}
|
|
}
|