123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278 |
- /**
- * \brief Hax! DLLs cannot interpret preprocessor directives, so this class acts as a "bridge"
- */
- using System;
- using UnityEngine;
- using UnityEditor;
- using System.Collections;
- using DigitalOpus.MB.Core;
- namespace DigitalOpus.MB.Core
- {
- public class MBVersionEditorConcrete : MBVersionEditorInterface
- {
- /// <summary>
- /// Used to map the activeBuildTarget to a string argument needed by TextureImporter.GetPlatformTextureSettings
- /// The allowed values for GetPlatformTextureSettings are "Web", "Standalone", "iPhone", "Android" and "FlashPlayer".
- /// </summary>
- /// <returns></returns>
- public string GetPlatformString()
- {
- #if (UNITY_4_6 || UNITY_4_7 || UNITY_4_5 || UNITY_4_3 || UNITY_4_2 || UNITY_4_1 || UNITY_4_0_1 || UNITY_4_0 || UNITY_3_5)
- if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.iPhone){
- return "iPhone";
- }
- #else
- if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.iOS)
- {
- return "iPhone";
- }
- #endif
- if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.WSAPlayer)
- {
- return "Windows Store Apps";
- }
- if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.PSP2)
- {
- return "PSP2";
- }
- if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.PS4)
- {
- return "PS4";
- }
- if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.XboxOne)
- {
- return "XboxOne";
- }
- #if (UNITY_2017_3_OR_NEWER)
- #else
- if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.SamsungTV)
- {
- return "Samsung TV";
- }
- #endif
- #if (UNITY_5_5_OR_NEWER)
- if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.N3DS)
- {
- return "Nintendo 3DS";
- }
- #endif
- #if (UNITY_5_3 || UNITY_5_2 || UNITY_5_3_OR_NEWER)
- #if (UNITY_2018_1_OR_NEWER)
- // wiiu support was removed in 2018.1
- #else
- if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.WiiU)
- {
- return "WiiU";
- }
- #endif
- #endif
- #if (UNITY_5_3 || UNITY_5_3_OR_NEWER)
- if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.tvOS)
- {
- return "tvOS";
- }
- #endif
- #if (UNITY_2018_2_OR_NEWER)
- #else
- if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.Tizen)
- {
- return "Tizen";
- }
- #endif
- if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.Android)
- {
- return "Android";
- }
- if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.StandaloneLinux ||
- EditorUserBuildSettings.activeBuildTarget == BuildTarget.StandaloneLinux64 ||
- EditorUserBuildSettings.activeBuildTarget == BuildTarget.StandaloneLinuxUniversal ||
- EditorUserBuildSettings.activeBuildTarget == BuildTarget.StandaloneWindows ||
- EditorUserBuildSettings.activeBuildTarget == BuildTarget.StandaloneWindows64 ||
- #if UNITY_2017_3_OR_NEWER
- EditorUserBuildSettings.activeBuildTarget == BuildTarget.StandaloneOSX
- #else
- EditorUserBuildSettings.activeBuildTarget == BuildTarget.StandaloneOSXIntel ||
- EditorUserBuildSettings.activeBuildTarget == BuildTarget.StandaloneOSXIntel64 ||
- EditorUserBuildSettings.activeBuildTarget == BuildTarget.StandaloneOSXUniversal
- #endif
- )
- {
- return "Standalone";
- }
- #if !UNITY_5_4_OR_NEWER
- if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.WebPlayer ||
- EditorUserBuildSettings.activeBuildTarget == BuildTarget.WebPlayerStreamed
- )
- {
- return "Web";
- }
- #endif
- if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.WebGL)
- {
- return "WebGL";
- }
- return null;
- }
- public void RegisterUndo(UnityEngine.Object o, string s)
- {
- #if (UNITY_4_2 || UNITY_4_1 || UNITY_4_0_1 || UNITY_4_0 || UNITY_3_5)
- Undo.RegisterUndo(o, s);
- #else
- Undo.RecordObject(o, s);
- #endif
- }
- public void SetInspectorLabelWidth(float width)
- {
- #if (UNITY_4_2 || UNITY_4_1 || UNITY_4_0_1 || UNITY_4_0 || UNITY_3_5)
- EditorGUIUtility.LookLikeControls(width);
- #else
- EditorGUIUtility.labelWidth = width;
- #endif
- }
- public void UpdateIfDirtyOrScript(SerializedObject so)
- {
- #if UNITY_5_6_OR_NEWER
- so.UpdateIfRequiredOrScript();
- #else
- so.UpdateIfDirtyOrScript();
- #endif
- }
- public UnityEngine.Object PrefabUtility_GetCorrespondingObjectFromSource(GameObject go)
- {
- #if UNITY_2018_2_OR_NEWER
- return PrefabUtility.GetCorrespondingObjectFromSource(go);
- #else
- return PrefabUtility.GetPrefabParent(go);
- #endif
- }
- public bool IsAutoPVRTC(TextureImporterFormat platformFormat, TextureImporterFormat platformDefaultFormat)
- {
- if ((
- #if UNITY_2017_1_OR_NEWER
- platformFormat == TextureImporterFormat.Automatic
- #elif UNITY_5_5_OR_NEWER
- platformFormat == TextureImporterFormat.Automatic ||
- platformFormat == TextureImporterFormat.Automatic16bit ||
- platformFormat == TextureImporterFormat.AutomaticCompressed ||
- platformFormat == TextureImporterFormat.AutomaticCompressedHDR ||
- platformFormat == TextureImporterFormat.AutomaticCrunched ||
- platformFormat == TextureImporterFormat.AutomaticHDR
- #else
- platformFormat == TextureImporterFormat.Automatic16bit ||
- platformFormat == TextureImporterFormat.AutomaticCompressed ||
- platformFormat == TextureImporterFormat.AutomaticCrunched
- #endif
- ) && (
- platformDefaultFormat == TextureImporterFormat.PVRTC_RGB2 ||
- platformDefaultFormat == TextureImporterFormat.PVRTC_RGB4 ||
- platformDefaultFormat == TextureImporterFormat.PVRTC_RGBA2 ||
- platformDefaultFormat == TextureImporterFormat.PVRTC_RGBA4
- ))
- {
- return true;
- }
- return false;
- }
- public MB_PrefabType GetPrefabType(UnityEngine.Object obj)
- {
- #if UNITY_2018_3_OR_NEWER
- if (PrefabUtility.IsPartOfNonAssetPrefabInstance(obj))
- {
- return MB_PrefabType.scenePefabInstance;
- }
- if (!PrefabUtility.IsPartOfAnyPrefab(obj))
- {
- return MB_PrefabType.isInstanceAndNotAPartOfAnyPrefab;
- }
- PrefabAssetType assetType = PrefabUtility.GetPrefabAssetType(obj);
- if (assetType == PrefabAssetType.NotAPrefab)
- {
- if (PrefabUtility.GetPrefabInstanceStatus(obj) != PrefabInstanceStatus.NotAPrefab)
- {
- return MB_PrefabType.isInstanceAndNotAPartOfAnyPrefab;
- }
- else
- {
- return MB_PrefabType.scenePefabInstance;
- }
- }
- else if (assetType == PrefabAssetType.Model)
- {
- return MB_PrefabType.modelPrefabAsset;
- }
- else if (assetType == PrefabAssetType.Regular ||
- assetType == PrefabAssetType.Variant ||
- assetType == PrefabAssetType.MissingAsset)
- {
- return MB_PrefabType.prefabAsset;
- }
- else
- {
- Debug.Assert(false, "Should never get here. Unknown prefab asset type.");
- return MB_PrefabType.isInstanceAndNotAPartOfAnyPrefab;
- }
- #else
- PrefabType prefabType = PrefabUtility.GetPrefabType(obj);
- if (prefabType == PrefabType.ModelPrefab)
- {
- return MB_PrefabType.modelPrefabAsset;
- } else if (prefabType == PrefabType.Prefab)
- {
- return MB_PrefabType.prefabAsset;
- } else if (prefabType == PrefabType.PrefabInstance || prefabType == PrefabType.ModelPrefabInstance)
- {
- return MB_PrefabType.scenePefabInstance;
- } else
- {
- return MB_PrefabType.isInstanceAndNotAPartOfAnyPrefab;
- }
- #endif
- }
- public void UnpackPrefabInstance(UnityEngine.GameObject go, ref SerializedObject so)
- {
- #if UNITY_2018_3_OR_NEWER
- UnityEngine.Object targetObj = null;
- if (so != null) targetObj = so.targetObject;
- PrefabUtility.UnpackPrefabInstance(go, PrefabUnpackMode.OutermostRoot, InteractionMode.AutomatedAction);
- // This is a workaround for a nasty Unity bug. The call to UnpackPrefabInstance
- // corrupts the serialized object, Recreate a clean reference here.
- if (so != null) so = new SerializedObject(targetObj);
- #else
- // Do nothing.
- #endif
- }
- public void ReplacePrefab(GameObject gameObject, string assetPath, MB_ReplacePrefabOption replacePrefabOptions)
- {
- #if UNITY_2018_3_OR_NEWER
- PrefabUtility.SaveAsPrefabAssetAndConnect(gameObject, assetPath, InteractionMode.AutomatedAction);
- #else
- GameObject obj = (GameObject) AssetDatabase.LoadAssetAtPath(assetPath, typeof(GameObject));
- PrefabUtility.ReplacePrefab(gameObject, obj, (ReplacePrefabOptions) replacePrefabOptions);
- #endif
- }
- public GameObject GetPrefabInstanceRoot(GameObject sceneInstance)
- {
- #if UNITY_2018_3_OR_NEWER
- return PrefabUtility.GetOutermostPrefabInstanceRoot(sceneInstance);
- #else
- return PrefabUtility.FindRootGameObjectWithSameParentPrefab(sceneInstance);
- #endif
- }
- }
- }
|