From 8cb6ac07e11cc70922bd4c484773c6afb7a97fd9 Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期五, 30 五月 2025 17:06:42 +0800
Subject: [PATCH] 18 子 2D卡牌客户端搭建 / 2D卡牌客户端搭建

---
 Assets/Resources/Prefabs/ClickEmptyCloseMask.prefab      |  122 ++++++++++++++++++++
 Assets/Resources/Prefabs/ClickEmptyCloseMask.prefab.meta |    7 +
 Assets/Editor/UI/UIBaseInspector.cs.meta                 |   11 +
 Assets/Resources/Prefabs.meta                            |    8 +
 Assets/Editor/UI/UIBaseInspector.cs                      |  108 ++++++++++++++++++
 Assets/Resources/Prefabs/ScreenMask.prefab.meta          |    7 +
 Assets/Resources/Prefabs/ScreenMask.prefab               |   74 ++++++++++++
 7 files changed, 337 insertions(+), 0 deletions(-)

diff --git a/Assets/Editor/UI/UIBaseInspector.cs b/Assets/Editor/UI/UIBaseInspector.cs
new file mode 100644
index 0000000..08f2b90
--- /dev/null
+++ b/Assets/Editor/UI/UIBaseInspector.cs
@@ -0,0 +1,108 @@
+using UnityEngine;
+using UnityEditor;
+
+[CustomEditor(typeof(UIBase))]
+public class UIBaseInspector : Editor
+{
+    SerializedProperty uiLayer;
+    SerializedProperty uiName;
+    SerializedProperty isMainUI;
+    SerializedProperty supportParentChildRelation;
+    SerializedProperty isPersistent;
+    SerializedProperty maxIdleRounds;
+    SerializedProperty openAnimationType;
+    SerializedProperty closeAnimationType;
+    SerializedProperty animationDuration;
+    SerializedProperty animationEase;
+    SerializedProperty openMask;
+    SerializedProperty clickEmptySpaceClose;
+
+    void OnEnable()
+    {
+        // 鑾峰彇鎵�鏈塖erializedProperty
+        uiLayer = serializedObject.FindProperty("uiLayer");
+        uiName = serializedObject.FindProperty("uiName");
+        isMainUI = serializedObject.FindProperty("isMainUI");
+        supportParentChildRelation = serializedObject.FindProperty("supportParentChildRelation");
+        isPersistent = serializedObject.FindProperty("isPersistent");
+        maxIdleRounds = serializedObject.FindProperty("maxIdleRounds");
+        openAnimationType = serializedObject.FindProperty("openAnimationType");
+        closeAnimationType = serializedObject.FindProperty("closeAnimationType");
+        animationDuration = serializedObject.FindProperty("animationDuration");
+        animationEase = serializedObject.FindProperty("animationEase");
+        openMask = serializedObject.FindProperty("openMask");
+        clickEmptySpaceClose = serializedObject.FindProperty("clickEmptySpaceClose");
+    }
+
+    public override void OnInspectorGUI()
+    {
+        serializedObject.Update();
+
+        EditorGUILayout.PropertyField(uiLayer);
+        EditorGUILayout.PropertyField(uiName);
+        EditorGUILayout.PropertyField(isMainUI);
+        EditorGUILayout.PropertyField(supportParentChildRelation);
+
+        EditorGUILayout.Space();
+        EditorGUILayout.LabelField("鎸佷箙鍖栬缃�", EditorStyles.boldLabel);
+        EditorGUILayout.PropertyField(isPersistent);
+        if (isPersistent.boolValue)
+        {
+            EditorGUI.indentLevel++;
+            EditorGUILayout.PropertyField(maxIdleRounds);
+            EditorGUI.indentLevel--;
+        }
+
+        EditorGUILayout.Space();
+        EditorGUILayout.LabelField("鍔ㄧ敾璁剧疆", EditorStyles.boldLabel);
+        EditorGUILayout.PropertyField(openAnimationType);
+        EditorGUILayout.PropertyField(closeAnimationType);
+        if (openAnimationType.enumValueIndex != 0 || closeAnimationType.enumValueIndex != 0)
+        {
+            EditorGUI.indentLevel++;
+            EditorGUILayout.PropertyField(animationDuration);
+            EditorGUILayout.PropertyField(animationEase);
+            EditorGUI.indentLevel--;
+        }
+
+        EditorGUILayout.Space();
+        EditorGUILayout.LabelField("閬僵璁剧疆", EditorStyles.boldLabel);
+
+        // 浣跨敤BeginHorizontal鏉ュ垱寤轰竴涓按骞冲竷灞�缁�
+        EditorGUILayout.BeginHorizontal();
+        
+        // 鍒涘缓涓�涓紑鍏虫寜閽粍
+        EditorGUI.BeginChangeCheck();
+        bool tempOpenMask = GUILayout.Toggle(openMask.boolValue, "寮�鍚伄缃�", EditorStyles.miniButtonLeft);
+        bool tempClickEmptyClose = GUILayout.Toggle(clickEmptySpaceClose.boolValue, "鐐瑰嚮绌虹櫧鍏抽棴", EditorStyles.miniButtonRight);
+        
+        // 濡傛灉鏈夋敼鍙�
+        if (EditorGUI.EndChangeCheck())
+        {
+            // 纭繚鍙湁涓�涓彲浠ヤ负true
+            if (tempOpenMask && tempClickEmptyClose)
+            {
+                // 濡傛灉涓や釜閮戒负true锛屼繚鎸佹渶鍚庢敼鍙樼殑閭d釜涓簍rue
+                if (openMask.boolValue != tempOpenMask)
+                {
+                    clickEmptySpaceClose.boolValue = false;
+                    openMask.boolValue = true;
+                }
+                else
+                {
+                    openMask.boolValue = false;
+                    clickEmptySpaceClose.boolValue = true;
+                }
+            }
+            else
+            {
+                openMask.boolValue = tempOpenMask;
+                clickEmptySpaceClose.boolValue = tempClickEmptyClose;
+            }
+        }
+        
+        EditorGUILayout.EndHorizontal();
+
+        serializedObject.ApplyModifiedProperties();
+    }
+}
\ No newline at end of file
diff --git a/Assets/Editor/UI/UIBaseInspector.cs.meta b/Assets/Editor/UI/UIBaseInspector.cs.meta
new file mode 100644
index 0000000..99a3e20
--- /dev/null
+++ b/Assets/Editor/UI/UIBaseInspector.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 0fbf6ddb4c77d3d4d99505d359d8b869
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Resources/Prefabs.meta b/Assets/Resources/Prefabs.meta
new file mode 100644
index 0000000..2c5c91d
--- /dev/null
+++ b/Assets/Resources/Prefabs.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 4d4fd0d1daafb9841b7e18e19ecd9665
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Resources/Prefabs/ClickEmptyCloseMask.prefab b/Assets/Resources/Prefabs/ClickEmptyCloseMask.prefab
new file mode 100644
index 0000000..06375dc
--- /dev/null
+++ b/Assets/Resources/Prefabs/ClickEmptyCloseMask.prefab
@@ -0,0 +1,122 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &1007792482766145798
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 3131827869564620803}
+  - component: {fileID: 4732318971056992194}
+  - component: {fileID: 1853674911349692926}
+  - component: {fileID: 1845536471669267178}
+  m_Layer: 5
+  m_Name: ClickEmptyCloseMask
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &3131827869564620803
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1007792482766145798}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0.5, y: 0.5}
+  m_AnchorMax: {x: 0.5, y: 0.5}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 1500, y: 2668}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &4732318971056992194
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1007792482766145798}
+  m_CullTransparentMesh: 1
+--- !u!114 &1853674911349692926
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1007792482766145798}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0, g: 0, b: 0, a: 0.5019608}
+  m_RaycastTarget: 1
+  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_Sprite: {fileID: 0}
+  m_Type: 0
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+  m_UseSpriteMesh: 0
+  m_PixelsPerUnitMultiplier: 1
+--- !u!114 &1845536471669267178
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1007792482766145798}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Navigation:
+    m_Mode: 3
+    m_WrapAround: 0
+    m_SelectOnUp: {fileID: 0}
+    m_SelectOnDown: {fileID: 0}
+    m_SelectOnLeft: {fileID: 0}
+    m_SelectOnRight: {fileID: 0}
+  m_Transition: 1
+  m_Colors:
+    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+    m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+    m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+    m_ColorMultiplier: 1
+    m_FadeDuration: 0.1
+  m_SpriteState:
+    m_HighlightedSprite: {fileID: 0}
+    m_PressedSprite: {fileID: 0}
+    m_SelectedSprite: {fileID: 0}
+    m_DisabledSprite: {fileID: 0}
+  m_AnimationTriggers:
+    m_NormalTrigger: Normal
+    m_HighlightedTrigger: Highlighted
+    m_PressedTrigger: Pressed
+    m_SelectedTrigger: Selected
+    m_DisabledTrigger: Disabled
+  m_Interactable: 1
+  m_TargetGraphic: {fileID: 1853674911349692926}
+  m_OnClick:
+    m_PersistentCalls:
+      m_Calls: []
diff --git a/Assets/Resources/Prefabs/ClickEmptyCloseMask.prefab.meta b/Assets/Resources/Prefabs/ClickEmptyCloseMask.prefab.meta
new file mode 100644
index 0000000..faa2f0d
--- /dev/null
+++ b/Assets/Resources/Prefabs/ClickEmptyCloseMask.prefab.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 8cc63f19afdf9094eae57bd1525b0aa9
+PrefabImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Resources/Prefabs/ScreenMask.prefab b/Assets/Resources/Prefabs/ScreenMask.prefab
new file mode 100644
index 0000000..83237ec
--- /dev/null
+++ b/Assets/Resources/Prefabs/ScreenMask.prefab
@@ -0,0 +1,74 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &6573027761555286950
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 5060824339156781239}
+  - component: {fileID: 5139521211198942054}
+  - component: {fileID: 7843618826810733026}
+  m_Layer: 5
+  m_Name: ScreenMask
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &5060824339156781239
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6573027761555286950}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0.5, y: 0.5}
+  m_AnchorMax: {x: 0.5, y: 0.5}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 1500, y: 2668}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &5139521211198942054
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6573027761555286950}
+  m_CullTransparentMesh: 1
+--- !u!114 &7843618826810733026
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6573027761555286950}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 1344c3c82d62a2a41a3576d8abb8e3ea, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 0}
+  m_RaycastTarget: 1
+  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_Texture: {fileID: 0}
+  m_UVRect:
+    serializedVersion: 2
+    x: 0
+    y: 0
+    width: 1
+    height: 1
diff --git a/Assets/Resources/Prefabs/ScreenMask.prefab.meta b/Assets/Resources/Prefabs/ScreenMask.prefab.meta
new file mode 100644
index 0000000..26040db
--- /dev/null
+++ b/Assets/Resources/Prefabs/ScreenMask.prefab.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: dde61cfb2ea7daf4a8336bef0b656390
+PrefabImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

--
Gitblit v1.8.0