IAPButtonEditor.cs 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. #if UNITY_PURCHASING
  2. using UnityEditor;
  3. using UnityEngine;
  4. using System.IO;
  5. using System.Collections.Generic;
  6. namespace UnityEngine.Purchasing
  7. {
  8. public static class IAPButtonMenu
  9. {
  10. [MenuItem ("Window/Unity IAP/Create IAP Button", false, 5)]
  11. public static void CreateUnityIAPButton()
  12. {
  13. // Create Button
  14. EditorApplication.ExecuteMenuItem("GameObject/UI/Button");
  15. // Get GameObject of Button
  16. GameObject gO = Selection.activeGameObject;
  17. // Add IAP Button component to GameObject
  18. IAPButton iapButton = null;
  19. if (gO) {
  20. iapButton = gO.AddComponent<IAPButton>();
  21. }
  22. if (iapButton != null) {
  23. UnityEditorInternal.ComponentUtility.MoveComponentUp(iapButton);
  24. UnityEditorInternal.ComponentUtility.MoveComponentUp(iapButton);
  25. UnityEditorInternal.ComponentUtility.MoveComponentUp(iapButton);
  26. }
  27. }
  28. }
  29. [CustomEditor(typeof(IAPButton))]
  30. [CanEditMultipleObjects]
  31. public class IAPButtonEditor : Editor
  32. {
  33. private static readonly string[] excludedFields = new string[] { "m_Script" };
  34. private static readonly string[] restoreButtonExcludedFields = new string[] { "m_Script", "consumePurchase", "onPurchaseComplete", "onPurchaseFailed", "titleText", "descriptionText", "priceText" };
  35. private const string kNoProduct = "<None>";
  36. private List<string> m_ValidIDs = new List<string>();
  37. private SerializedProperty m_ProductIDProperty;
  38. public void OnEnable()
  39. {
  40. m_ProductIDProperty = serializedObject.FindProperty("productId");
  41. }
  42. public override void OnInspectorGUI()
  43. {
  44. IAPButton button = (IAPButton)target;
  45. serializedObject.Update();
  46. if (button.buttonType == IAPButton.ButtonType.Purchase) {
  47. EditorGUILayout.LabelField(new GUIContent("Product ID:", "Select a product from the IAP catalog"));
  48. var catalog = ProductCatalog.LoadDefaultCatalog();
  49. m_ValidIDs.Clear();
  50. m_ValidIDs.Add(kNoProduct);
  51. foreach (var product in catalog.allProducts) {
  52. m_ValidIDs.Add(product.id);
  53. }
  54. int currentIndex = string.IsNullOrEmpty(button.productId) ? 0 : m_ValidIDs.IndexOf(button.productId);
  55. int newIndex = EditorGUILayout.Popup(currentIndex, m_ValidIDs.ToArray());
  56. if (newIndex > 0 && newIndex < m_ValidIDs.Count) {
  57. m_ProductIDProperty.stringValue = m_ValidIDs[newIndex];
  58. } else {
  59. m_ProductIDProperty.stringValue = string.Empty;
  60. }
  61. if (GUILayout.Button("IAP Catalog...")) {
  62. ProductCatalogEditor.ShowWindow();
  63. }
  64. }
  65. DrawPropertiesExcluding(serializedObject, button.buttonType == IAPButton.ButtonType.Restore ? restoreButtonExcludedFields : excludedFields);
  66. serializedObject.ApplyModifiedProperties();
  67. }
  68. }
  69. }
  70. #endif