#if UNITY_PURCHASING using UnityEditor; using UnityEngine; using UnityEngine.Purchasing; using System.IO; using System.Collections.Generic; namespace UnityEditor.Purchasing { public static class IAPButtonMenu { [MenuItem("GameObject/Unity IAP/IAP Button", false, 10)] public static void GameObjectCreateUnityIAPButton() { CreateUnityIAPButton(); } [MenuItem ("Window/Unity IAP/Create IAP Button", false, 5)] public static void CreateUnityIAPButton() { // Create Button EditorApplication.ExecuteMenuItem("GameObject/UI/Button"); // Get GameObject of Button GameObject gO = Selection.activeGameObject; // Add IAP Button component to GameObject IAPButton iapButton = null; if (gO) { iapButton = gO.AddComponent(); } if (iapButton != null) { UnityEditorInternal.ComponentUtility.MoveComponentUp(iapButton); UnityEditorInternal.ComponentUtility.MoveComponentUp(iapButton); UnityEditorInternal.ComponentUtility.MoveComponentUp(iapButton); } } } public static class IAPListenerMenu { [MenuItem("GameObject/Unity IAP/IAP Listener", false, 10)] public static void GameObjectCreateUnityIAPListener() { CreateUnityIAPListener(); } [MenuItem ("Window/Unity IAP/Create IAP Listener", false, 6)] public static void CreateUnityIAPListener() { // Create empty GameObject EditorApplication.ExecuteMenuItem("GameObject/Create Empty"); // Get GameObject GameObject gO = Selection.activeGameObject; // Add IAP Listener component to GameObject if (gO) { gO.AddComponent(); gO.name = "IAP Listener"; } } } [CustomEditor(typeof(IAPButton))] [CanEditMultipleObjects] public class IAPButtonEditor : Editor { private static readonly string[] excludedFields = new string[] { "m_Script" }; private static readonly string[] restoreButtonExcludedFields = new string[] { "m_Script", "consumePurchase", "onPurchaseComplete", "onPurchaseFailed", "titleText", "descriptionText", "priceText" }; private const string kNoProduct = ""; private List m_ValidIDs = new List(); private SerializedProperty m_ProductIDProperty; public void OnEnable() { m_ProductIDProperty = serializedObject.FindProperty("productId"); } public override void OnInspectorGUI() { IAPButton button = (IAPButton)target; serializedObject.Update(); if (button.buttonType == IAPButton.ButtonType.Purchase) { EditorGUILayout.LabelField(new GUIContent("Product ID:", "Select a product from the IAP catalog")); var catalog = ProductCatalog.LoadDefaultCatalog(); m_ValidIDs.Clear(); m_ValidIDs.Add(kNoProduct); foreach (var product in catalog.allProducts) { m_ValidIDs.Add(product.id); } int currentIndex = string.IsNullOrEmpty(button.productId) ? 0 : m_ValidIDs.IndexOf(button.productId); int newIndex = EditorGUILayout.Popup(currentIndex, m_ValidIDs.ToArray()); if (newIndex > 0 && newIndex < m_ValidIDs.Count) { m_ProductIDProperty.stringValue = m_ValidIDs[newIndex]; } else { m_ProductIDProperty.stringValue = string.Empty; } if (GUILayout.Button("IAP Catalog...")) { ProductCatalogEditor.ShowWindow(); } } DrawPropertiesExcluding(serializedObject, button.buttonType == IAPButton.ButtonType.Restore ? restoreButtonExcludedFields : excludedFields); serializedObject.ApplyModifiedProperties(); } } } #endif