Compare commits
8 Commits
7b32b87ec7
...
b8aee17f11
| Author | SHA1 | Date | |
|---|---|---|---|
| b8aee17f11 | |||
| 9d8f53ed46 | |||
| 9bd2a701b2 | |||
| 7a4d51f17c | |||
| a894e5d830 | |||
| 0a3fd47070 | |||
| 86a110aacc | |||
| 843cd5e38e |
File diff suppressed because it is too large
Load Diff
720
Client/Assets/Bundles/UI/Window/UILogicTestAlert.prefab
Normal file
720
Client/Assets/Bundles/UI/Window/UILogicTestAlert.prefab
Normal file
@ -0,0 +1,720 @@
|
|||||||
|
%YAML 1.1
|
||||||
|
%TAG !u! tag:unity3d.com,2011:
|
||||||
|
--- !u!1 &2250200393461343296
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 2269812296799592093}
|
||||||
|
- component: {fileID: 4967705687032036858}
|
||||||
|
- component: {fileID: 8671132774583373232}
|
||||||
|
m_Layer: 5
|
||||||
|
m_Name: Text (TMP)
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!224 &2269812296799592093
|
||||||
|
RectTransform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 2250200393461343296}
|
||||||
|
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: 1952737634300265141}
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
|
m_AnchorMin: {x: 0, y: 0}
|
||||||
|
m_AnchorMax: {x: 1, y: 1}
|
||||||
|
m_AnchoredPosition: {x: 0, y: 0}
|
||||||
|
m_SizeDelta: {x: 0, y: 0}
|
||||||
|
m_Pivot: {x: 0.5, y: 0.5}
|
||||||
|
--- !u!222 &4967705687032036858
|
||||||
|
CanvasRenderer:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 2250200393461343296}
|
||||||
|
m_CullTransparentMesh: 1
|
||||||
|
--- !u!114 &8671132774583373232
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 2250200393461343296}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
m_Material: {fileID: 0}
|
||||||
|
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
m_RaycastTarget: 1
|
||||||
|
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||||
|
m_Maskable: 1
|
||||||
|
m_OnCullStateChanged:
|
||||||
|
m_PersistentCalls:
|
||||||
|
m_Calls: []
|
||||||
|
m_text: ESC
|
||||||
|
m_isRightToLeft: 0
|
||||||
|
m_fontAsset: {fileID: 11400000, guid: 7cdd102360e32234383f8e3f40da47a9, type: 2}
|
||||||
|
m_sharedMaterial: {fileID: -1232377485662373643, guid: 7cdd102360e32234383f8e3f40da47a9, type: 2}
|
||||||
|
m_fontSharedMaterials: []
|
||||||
|
m_fontMaterial: {fileID: 0}
|
||||||
|
m_fontMaterials: []
|
||||||
|
m_fontColor32:
|
||||||
|
serializedVersion: 2
|
||||||
|
rgba: 4281479730
|
||||||
|
m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
|
||||||
|
m_enableVertexGradient: 0
|
||||||
|
m_colorMode: 3
|
||||||
|
m_fontColorGradient:
|
||||||
|
topLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
topRight: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
bottomRight: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
m_fontColorGradientPreset: {fileID: 0}
|
||||||
|
m_spriteAsset: {fileID: 0}
|
||||||
|
m_tintAllSprites: 0
|
||||||
|
m_StyleSheet: {fileID: 0}
|
||||||
|
m_TextStyleHashCode: -1183493901
|
||||||
|
m_overrideHtmlColors: 0
|
||||||
|
m_faceColor:
|
||||||
|
serializedVersion: 2
|
||||||
|
rgba: 4294967295
|
||||||
|
m_fontSize: 24
|
||||||
|
m_fontSizeBase: 24
|
||||||
|
m_fontWeight: 400
|
||||||
|
m_enableAutoSizing: 0
|
||||||
|
m_fontSizeMin: 18
|
||||||
|
m_fontSizeMax: 72
|
||||||
|
m_fontStyle: 0
|
||||||
|
m_HorizontalAlignment: 2
|
||||||
|
m_VerticalAlignment: 512
|
||||||
|
m_textAlignment: 65535
|
||||||
|
m_characterSpacing: 0
|
||||||
|
m_wordSpacing: 0
|
||||||
|
m_lineSpacing: 0
|
||||||
|
m_lineSpacingMax: 0
|
||||||
|
m_paragraphSpacing: 0
|
||||||
|
m_charWidthMaxAdj: 0
|
||||||
|
m_enableWordWrapping: 1
|
||||||
|
m_wordWrappingRatios: 0.4
|
||||||
|
m_overflowMode: 0
|
||||||
|
m_linkedTextComponent: {fileID: 0}
|
||||||
|
parentLinkedComponent: {fileID: 0}
|
||||||
|
m_enableKerning: 1
|
||||||
|
m_enableExtraPadding: 0
|
||||||
|
checkPaddingRequired: 0
|
||||||
|
m_isRichText: 1
|
||||||
|
m_parseCtrlCharacters: 1
|
||||||
|
m_isOrthographic: 1
|
||||||
|
m_isCullingEnabled: 0
|
||||||
|
m_horizontalMapping: 0
|
||||||
|
m_verticalMapping: 0
|
||||||
|
m_uvLineOffset: 0
|
||||||
|
m_geometrySortingOrder: 0
|
||||||
|
m_IsTextObjectScaleStatic: 0
|
||||||
|
m_VertexBufferAutoSizeReduction: 0
|
||||||
|
m_useMaxVisibleDescender: 1
|
||||||
|
m_pageToDisplay: 1
|
||||||
|
m_margin: {x: 0, y: 0, z: 0, w: 0}
|
||||||
|
m_isUsingLegacyAnimationComponent: 0
|
||||||
|
m_isVolumetricText: 0
|
||||||
|
m_hasFontAssetChanged: 0
|
||||||
|
m_baseMaterial: {fileID: 0}
|
||||||
|
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
|
||||||
|
--- !u!1 &2311959964182908462
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 1952737634300265141}
|
||||||
|
- component: {fileID: 4991061408298750992}
|
||||||
|
- component: {fileID: 7071825580151310782}
|
||||||
|
- component: {fileID: 8761522827132804065}
|
||||||
|
- component: {fileID: 8719642127045836727}
|
||||||
|
m_Layer: 5
|
||||||
|
m_Name: Btn@EscTest
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!224 &1952737634300265141
|
||||||
|
RectTransform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 2311959964182908462}
|
||||||
|
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:
|
||||||
|
- {fileID: 2269812296799592093}
|
||||||
|
m_Father: {fileID: 8257909214662256014}
|
||||||
|
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: -338, y: 189}
|
||||||
|
m_SizeDelta: {x: 160, y: 70.43}
|
||||||
|
m_Pivot: {x: 0.5, y: 0.5}
|
||||||
|
--- !u!222 &4991061408298750992
|
||||||
|
CanvasRenderer:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 2311959964182908462}
|
||||||
|
m_CullTransparentMesh: 1
|
||||||
|
--- !u!114 &7071825580151310782
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 2311959964182908462}
|
||||||
|
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: 1, g: 1, b: 1, a: 1}
|
||||||
|
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: 10905, guid: 0000000000000000f000000000000000, type: 0}
|
||||||
|
m_Type: 1
|
||||||
|
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 &8761522827132804065
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 2311959964182908462}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: d7e92b092d584bb39e5239463f064cbe, 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: 7071825580151310782}
|
||||||
|
m_ChildTransitions: []
|
||||||
|
hoverAudioClip: {fileID: 0}
|
||||||
|
clickAudioClip: {fileID: 0}
|
||||||
|
m_OnClick:
|
||||||
|
m_PersistentCalls:
|
||||||
|
m_Calls: []
|
||||||
|
--- !u!114 &8719642127045836727
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 2311959964182908462}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: ad0e473486c04dc19b468f2b20675091, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
_component: {fileID: 8761522827132804065}
|
||||||
|
_hotkeyAction: {fileID: -3091621134156909817, guid: b603efb45eabf544d9f962c635627a64, type: 3}
|
||||||
|
_hotkeyPressType: 1
|
||||||
|
--- !u!1 &2463822960161463633
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 3507794895457544733}
|
||||||
|
- component: {fileID: 8663509290114971407}
|
||||||
|
- component: {fileID: 1220648307684761898}
|
||||||
|
m_Layer: 5
|
||||||
|
m_Name: Text (TMP)
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!224 &3507794895457544733
|
||||||
|
RectTransform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 2463822960161463633}
|
||||||
|
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: 6065029552973930630}
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
|
m_AnchorMin: {x: 0, y: 0}
|
||||||
|
m_AnchorMax: {x: 1, y: 1}
|
||||||
|
m_AnchoredPosition: {x: 0, y: 0}
|
||||||
|
m_SizeDelta: {x: 0, y: 0}
|
||||||
|
m_Pivot: {x: 0.5, y: 0.5}
|
||||||
|
--- !u!222 &8663509290114971407
|
||||||
|
CanvasRenderer:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 2463822960161463633}
|
||||||
|
m_CullTransparentMesh: 1
|
||||||
|
--- !u!114 &1220648307684761898
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 2463822960161463633}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
m_Material: {fileID: 0}
|
||||||
|
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
m_RaycastTarget: 1
|
||||||
|
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||||
|
m_Maskable: 1
|
||||||
|
m_OnCullStateChanged:
|
||||||
|
m_PersistentCalls:
|
||||||
|
m_Calls: []
|
||||||
|
m_text: G
|
||||||
|
m_isRightToLeft: 0
|
||||||
|
m_fontAsset: {fileID: 11400000, guid: 7cdd102360e32234383f8e3f40da47a9, type: 2}
|
||||||
|
m_sharedMaterial: {fileID: -1232377485662373643, guid: 7cdd102360e32234383f8e3f40da47a9, type: 2}
|
||||||
|
m_fontSharedMaterials: []
|
||||||
|
m_fontMaterial: {fileID: 0}
|
||||||
|
m_fontMaterials: []
|
||||||
|
m_fontColor32:
|
||||||
|
serializedVersion: 2
|
||||||
|
rgba: 4281479730
|
||||||
|
m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
|
||||||
|
m_enableVertexGradient: 0
|
||||||
|
m_colorMode: 3
|
||||||
|
m_fontColorGradient:
|
||||||
|
topLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
topRight: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
bottomRight: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
m_fontColorGradientPreset: {fileID: 0}
|
||||||
|
m_spriteAsset: {fileID: 0}
|
||||||
|
m_tintAllSprites: 0
|
||||||
|
m_StyleSheet: {fileID: 0}
|
||||||
|
m_TextStyleHashCode: -1183493901
|
||||||
|
m_overrideHtmlColors: 0
|
||||||
|
m_faceColor:
|
||||||
|
serializedVersion: 2
|
||||||
|
rgba: 4294967295
|
||||||
|
m_fontSize: 24
|
||||||
|
m_fontSizeBase: 24
|
||||||
|
m_fontWeight: 400
|
||||||
|
m_enableAutoSizing: 0
|
||||||
|
m_fontSizeMin: 18
|
||||||
|
m_fontSizeMax: 72
|
||||||
|
m_fontStyle: 0
|
||||||
|
m_HorizontalAlignment: 2
|
||||||
|
m_VerticalAlignment: 512
|
||||||
|
m_textAlignment: 65535
|
||||||
|
m_characterSpacing: 0
|
||||||
|
m_wordSpacing: 0
|
||||||
|
m_lineSpacing: 0
|
||||||
|
m_lineSpacingMax: 0
|
||||||
|
m_paragraphSpacing: 0
|
||||||
|
m_charWidthMaxAdj: 0
|
||||||
|
m_enableWordWrapping: 1
|
||||||
|
m_wordWrappingRatios: 0.4
|
||||||
|
m_overflowMode: 0
|
||||||
|
m_linkedTextComponent: {fileID: 0}
|
||||||
|
parentLinkedComponent: {fileID: 0}
|
||||||
|
m_enableKerning: 1
|
||||||
|
m_enableExtraPadding: 0
|
||||||
|
checkPaddingRequired: 0
|
||||||
|
m_isRichText: 1
|
||||||
|
m_parseCtrlCharacters: 1
|
||||||
|
m_isOrthographic: 1
|
||||||
|
m_isCullingEnabled: 0
|
||||||
|
m_horizontalMapping: 0
|
||||||
|
m_verticalMapping: 0
|
||||||
|
m_uvLineOffset: 0
|
||||||
|
m_geometrySortingOrder: 0
|
||||||
|
m_IsTextObjectScaleStatic: 0
|
||||||
|
m_VertexBufferAutoSizeReduction: 0
|
||||||
|
m_useMaxVisibleDescender: 1
|
||||||
|
m_pageToDisplay: 1
|
||||||
|
m_margin: {x: 0, y: 0, z: 0, w: 0}
|
||||||
|
m_isUsingLegacyAnimationComponent: 0
|
||||||
|
m_isVolumetricText: 0
|
||||||
|
m_hasFontAssetChanged: 0
|
||||||
|
m_baseMaterial: {fileID: 0}
|
||||||
|
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
|
||||||
|
--- !u!1 &3269233401169902524
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 2302914967387190456}
|
||||||
|
- component: {fileID: 8880627474244438114}
|
||||||
|
- component: {fileID: 6046943012167044752}
|
||||||
|
m_Layer: 5
|
||||||
|
m_Name: Image
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!224 &2302914967387190456
|
||||||
|
RectTransform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 3269233401169902524}
|
||||||
|
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: 8257909214662256014}
|
||||||
|
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: 900, y: 500}
|
||||||
|
m_Pivot: {x: 0.5, y: 0.5}
|
||||||
|
--- !u!222 &8880627474244438114
|
||||||
|
CanvasRenderer:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 3269233401169902524}
|
||||||
|
m_CullTransparentMesh: 1
|
||||||
|
--- !u!114 &6046943012167044752
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 3269233401169902524}
|
||||||
|
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.4716981, g: 0.3048238, b: 0.3048238, a: 1}
|
||||||
|
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!1 &3802536979087650729
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 8257909214662256014}
|
||||||
|
- component: {fileID: 3538879237153299783}
|
||||||
|
- component: {fileID: 2650058657611945293}
|
||||||
|
- component: {fileID: 7349756297182561896}
|
||||||
|
m_Layer: 5
|
||||||
|
m_Name: UILogicTestAlert
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!224 &8257909214662256014
|
||||||
|
RectTransform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 3802536979087650729}
|
||||||
|
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:
|
||||||
|
- {fileID: 2302914967387190456}
|
||||||
|
- {fileID: 1952737634300265141}
|
||||||
|
- {fileID: 6065029552973930630}
|
||||||
|
m_Father: {fileID: 0}
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
|
m_AnchorMin: {x: 0, y: 0}
|
||||||
|
m_AnchorMax: {x: 1, y: 1}
|
||||||
|
m_AnchoredPosition: {x: 0, y: 0}
|
||||||
|
m_SizeDelta: {x: 0, y: 0}
|
||||||
|
m_Pivot: {x: 0.5, y: 0.5}
|
||||||
|
--- !u!223 &3538879237153299783
|
||||||
|
Canvas:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 3802536979087650729}
|
||||||
|
m_Enabled: 1
|
||||||
|
serializedVersion: 3
|
||||||
|
m_RenderMode: 0
|
||||||
|
m_Camera: {fileID: 0}
|
||||||
|
m_PlaneDistance: 100
|
||||||
|
m_PixelPerfect: 0
|
||||||
|
m_ReceivesEvents: 1
|
||||||
|
m_OverrideSorting: 0
|
||||||
|
m_OverridePixelPerfect: 0
|
||||||
|
m_SortingBucketNormalizedSize: 0
|
||||||
|
m_VertexColorAlwaysGammaSpace: 1
|
||||||
|
m_AdditionalShaderChannelsFlag: 31
|
||||||
|
m_UpdateRectTransformForStandalone: 0
|
||||||
|
m_SortingLayerID: 0
|
||||||
|
m_SortingOrder: 0
|
||||||
|
m_TargetDisplay: 0
|
||||||
|
--- !u!114 &2650058657611945293
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 3802536979087650729}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
m_IgnoreReversedGraphics: 1
|
||||||
|
m_BlockingObjects: 0
|
||||||
|
m_BlockingMask:
|
||||||
|
serializedVersion: 2
|
||||||
|
m_Bits: 4294967295
|
||||||
|
--- !u!114 &7349756297182561896
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 3802536979087650729}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: 03b1a1a765ce78b4ea4ee026785671f7, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
mBtnEscTest: {fileID: 8761522827132804065}
|
||||||
|
mBtnGTest: {fileID: 6868640316405957368}
|
||||||
|
--- !u!1 &6865905647236409969
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 6065029552973930630}
|
||||||
|
- component: {fileID: 203961062154527688}
|
||||||
|
- component: {fileID: 8043258928828313028}
|
||||||
|
- component: {fileID: 6868640316405957368}
|
||||||
|
- component: {fileID: 8209225795803149929}
|
||||||
|
m_Layer: 5
|
||||||
|
m_Name: Btn@GTest
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!224 &6065029552973930630
|
||||||
|
RectTransform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 6865905647236409969}
|
||||||
|
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:
|
||||||
|
- {fileID: 3507794895457544733}
|
||||||
|
m_Father: {fileID: 8257909214662256014}
|
||||||
|
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: 19, y: 118}
|
||||||
|
m_SizeDelta: {x: 160, y: 70.43}
|
||||||
|
m_Pivot: {x: 0.5, y: 0.5}
|
||||||
|
--- !u!222 &203961062154527688
|
||||||
|
CanvasRenderer:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 6865905647236409969}
|
||||||
|
m_CullTransparentMesh: 1
|
||||||
|
--- !u!114 &8043258928828313028
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 6865905647236409969}
|
||||||
|
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: 1, g: 1, b: 1, a: 1}
|
||||||
|
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: 10905, guid: 0000000000000000f000000000000000, type: 0}
|
||||||
|
m_Type: 1
|
||||||
|
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 &6868640316405957368
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 6865905647236409969}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: d7e92b092d584bb39e5239463f064cbe, 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: 8043258928828313028}
|
||||||
|
m_ChildTransitions: []
|
||||||
|
hoverAudioClip: {fileID: 0}
|
||||||
|
clickAudioClip: {fileID: 0}
|
||||||
|
m_OnClick:
|
||||||
|
m_PersistentCalls:
|
||||||
|
m_Calls: []
|
||||||
|
--- !u!114 &8209225795803149929
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 6865905647236409969}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: ad0e473486c04dc19b468f2b20675091, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
_component: {fileID: 6868640316405957368}
|
||||||
|
_hotkeyAction: {fileID: -4328105232246941011, guid: b603efb45eabf544d9f962c635627a64, type: 3}
|
||||||
|
_hotkeyPressType: 1
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 6c71b0671f6a82747a5405628e110163
|
||||||
|
PrefabImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
16
Client/Assets/InputGlyphDatabase.asset
Normal file
16
Client/Assets/InputGlyphDatabase.asset
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
%YAML 1.1
|
||||||
|
%TAG !u! tag:unity3d.com,2011:
|
||||||
|
--- !u!114 &11400000
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 0}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: 53ed017cef844d11842ba16553c6391d, type: 3}
|
||||||
|
m_Name: InputGlyphDatabase
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
tables: []
|
||||||
|
placeholderSprite: {fileID: 0}
|
||||||
8
Client/Assets/InputGlyphDatabase.asset.meta
Normal file
8
Client/Assets/InputGlyphDatabase.asset.meta
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: e43c1733d8e85a5419c0754bbd597e3b
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
233
Client/Assets/New Controls.inputactions
Normal file
233
Client/Assets/New Controls.inputactions
Normal file
@ -0,0 +1,233 @@
|
|||||||
|
{
|
||||||
|
"name": "New Controls",
|
||||||
|
"maps": [
|
||||||
|
{
|
||||||
|
"name": "Player",
|
||||||
|
"id": "512009e6-7638-4d62-8a35-3f35f90f2b43",
|
||||||
|
"actions": [
|
||||||
|
{
|
||||||
|
"name": "ESC",
|
||||||
|
"type": "Button",
|
||||||
|
"id": "abdbc7da-3acd-4474-b223-39fdb1e3f2f2",
|
||||||
|
"expectedControlType": "Button",
|
||||||
|
"processors": "",
|
||||||
|
"interactions": "",
|
||||||
|
"initialStateCheck": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "G",
|
||||||
|
"type": "Button",
|
||||||
|
"id": "c521c87b-a5fd-40b2-b2a6-05e6e7a65f14",
|
||||||
|
"expectedControlType": "Button",
|
||||||
|
"processors": "",
|
||||||
|
"interactions": "",
|
||||||
|
"initialStateCheck": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "e",
|
||||||
|
"type": "Button",
|
||||||
|
"id": "7fc5f791-ccdb-4aff-a8ec-fbc58f988dfb",
|
||||||
|
"expectedControlType": "Button",
|
||||||
|
"processors": "",
|
||||||
|
"interactions": "",
|
||||||
|
"initialStateCheck": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Q",
|
||||||
|
"type": "Button",
|
||||||
|
"id": "6cd217db-56bc-4760-9f7b-b2e828d98e0f",
|
||||||
|
"expectedControlType": "Button",
|
||||||
|
"processors": "",
|
||||||
|
"interactions": "",
|
||||||
|
"initialStateCheck": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Move",
|
||||||
|
"type": "Value",
|
||||||
|
"id": "d8a5ae9d-2af1-4358-9655-485d53bf6610",
|
||||||
|
"expectedControlType": "Vector2",
|
||||||
|
"processors": "",
|
||||||
|
"interactions": "",
|
||||||
|
"initialStateCheck": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "DDDD",
|
||||||
|
"type": "Value",
|
||||||
|
"id": "07534715-b34d-440b-a152-33ff41dfb432",
|
||||||
|
"expectedControlType": "Vector2",
|
||||||
|
"processors": "",
|
||||||
|
"interactions": "",
|
||||||
|
"initialStateCheck": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"bindings": [
|
||||||
|
{
|
||||||
|
"name": "",
|
||||||
|
"id": "6cc43d82-d1f4-4fbe-8e7c-e64d4b013a8b",
|
||||||
|
"path": "<Keyboard>/escape",
|
||||||
|
"interactions": "",
|
||||||
|
"processors": "",
|
||||||
|
"groups": "",
|
||||||
|
"action": "ESC",
|
||||||
|
"isComposite": false,
|
||||||
|
"isPartOfComposite": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "",
|
||||||
|
"id": "dce7cbf7-cf89-4bce-81ae-5b752b0f2158",
|
||||||
|
"path": "<Keyboard>/g",
|
||||||
|
"interactions": "",
|
||||||
|
"processors": "",
|
||||||
|
"groups": "",
|
||||||
|
"action": "G",
|
||||||
|
"isComposite": false,
|
||||||
|
"isPartOfComposite": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "",
|
||||||
|
"id": "98f277b0-1524-403b-9c49-6623277bb0b1",
|
||||||
|
"path": "<Keyboard>/e",
|
||||||
|
"interactions": "",
|
||||||
|
"processors": "",
|
||||||
|
"groups": "",
|
||||||
|
"action": "e",
|
||||||
|
"isComposite": false,
|
||||||
|
"isPartOfComposite": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "",
|
||||||
|
"id": "4b12483b-2ec0-4471-8892-1edbf91c6ec9",
|
||||||
|
"path": "<Keyboard>/q",
|
||||||
|
"interactions": "",
|
||||||
|
"processors": "",
|
||||||
|
"groups": "",
|
||||||
|
"action": "Q",
|
||||||
|
"isComposite": false,
|
||||||
|
"isPartOfComposite": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "2D Vector",
|
||||||
|
"id": "364edce4-94de-400f-bd7d-a0e26c4b63a5",
|
||||||
|
"path": "2DVector",
|
||||||
|
"interactions": "",
|
||||||
|
"processors": "",
|
||||||
|
"groups": "",
|
||||||
|
"action": "Move",
|
||||||
|
"isComposite": true,
|
||||||
|
"isPartOfComposite": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "up",
|
||||||
|
"id": "7ba2155e-a2e4-469d-b876-68e2cd891559",
|
||||||
|
"path": "",
|
||||||
|
"interactions": "",
|
||||||
|
"processors": "",
|
||||||
|
"groups": "",
|
||||||
|
"action": "Move",
|
||||||
|
"isComposite": false,
|
||||||
|
"isPartOfComposite": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "down",
|
||||||
|
"id": "78b77f29-f184-4d5e-9c66-25e55cbd20ad",
|
||||||
|
"path": "",
|
||||||
|
"interactions": "",
|
||||||
|
"processors": "",
|
||||||
|
"groups": "",
|
||||||
|
"action": "Move",
|
||||||
|
"isComposite": false,
|
||||||
|
"isPartOfComposite": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "left",
|
||||||
|
"id": "995e684a-0311-42ca-8e23-d2280c27aa94",
|
||||||
|
"path": "",
|
||||||
|
"interactions": "",
|
||||||
|
"processors": "",
|
||||||
|
"groups": "",
|
||||||
|
"action": "Move",
|
||||||
|
"isComposite": false,
|
||||||
|
"isPartOfComposite": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "right",
|
||||||
|
"id": "7a00e004-e18a-411c-9733-ab2928ec2fe3",
|
||||||
|
"path": "",
|
||||||
|
"interactions": "",
|
||||||
|
"processors": "",
|
||||||
|
"groups": "",
|
||||||
|
"action": "Move",
|
||||||
|
"isComposite": false,
|
||||||
|
"isPartOfComposite": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "",
|
||||||
|
"id": "3009f940-05cf-41c0-94a6-24c66c065a45",
|
||||||
|
"path": "<Gamepad>/leftStick",
|
||||||
|
"interactions": "",
|
||||||
|
"processors": "",
|
||||||
|
"groups": "",
|
||||||
|
"action": "Move",
|
||||||
|
"isComposite": false,
|
||||||
|
"isPartOfComposite": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Keyboard",
|
||||||
|
"id": "7f47550b-0ab6-4278-ad69-58cb97ddae4e",
|
||||||
|
"path": "2DVector",
|
||||||
|
"interactions": "",
|
||||||
|
"processors": "",
|
||||||
|
"groups": "",
|
||||||
|
"action": "DDDD",
|
||||||
|
"isComposite": true,
|
||||||
|
"isPartOfComposite": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "up",
|
||||||
|
"id": "1536a548-2bb7-4c72-b313-652ccd127b9b",
|
||||||
|
"path": "<Keyboard>/w",
|
||||||
|
"interactions": "",
|
||||||
|
"processors": "",
|
||||||
|
"groups": "",
|
||||||
|
"action": "DDDD",
|
||||||
|
"isComposite": false,
|
||||||
|
"isPartOfComposite": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "down",
|
||||||
|
"id": "624971f8-1550-4cba-9533-092f28a97187",
|
||||||
|
"path": "<Keyboard>/s",
|
||||||
|
"interactions": "",
|
||||||
|
"processors": "",
|
||||||
|
"groups": "",
|
||||||
|
"action": "DDDD",
|
||||||
|
"isComposite": false,
|
||||||
|
"isPartOfComposite": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "left",
|
||||||
|
"id": "f7f4a643-75ef-4997-99a2-48cc4de3837e",
|
||||||
|
"path": "<Keyboard>/a",
|
||||||
|
"interactions": "",
|
||||||
|
"processors": "",
|
||||||
|
"groups": "",
|
||||||
|
"action": "DDDD",
|
||||||
|
"isComposite": false,
|
||||||
|
"isPartOfComposite": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "right",
|
||||||
|
"id": "e845bdab-7d0b-4d4b-ab73-86df48423c39",
|
||||||
|
"path": "<Keyboard>/d",
|
||||||
|
"interactions": "",
|
||||||
|
"processors": "",
|
||||||
|
"groups": "",
|
||||||
|
"action": "DDDD",
|
||||||
|
"isComposite": false,
|
||||||
|
"isPartOfComposite": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"controlSchemes": []
|
||||||
|
}
|
||||||
14
Client/Assets/New Controls.inputactions.meta
Normal file
14
Client/Assets/New Controls.inputactions.meta
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: b603efb45eabf544d9f962c635627a64
|
||||||
|
ScriptedImporter:
|
||||||
|
internalIDToNameTable: []
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
|
script: {fileID: 11500000, guid: 8404be70184654265930450def6a9037, type: 3}
|
||||||
|
generateWrapperCode: 0
|
||||||
|
wrapperCodePath:
|
||||||
|
wrapperClassName:
|
||||||
|
wrapperCodeNamespace:
|
||||||
8
Client/Assets/Scripts/CustomeModule/InputGlyph/Core.meta
Normal file
8
Client/Assets/Scripts/CustomeModule/InputGlyph/Core.meta
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: bb7e653c16f0005419e1eb9226655176
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@ -1,4 +1,5 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using UnityEngine.InputSystem;
|
using UnityEngine.InputSystem;
|
||||||
|
|
||||||
@ -9,6 +10,8 @@ public static class GlyphService
|
|||||||
private static readonly string[] PlayStationGroupHints = { "playstation", "dualshock", "dualsense", "gamepad", "controller" };
|
private static readonly string[] PlayStationGroupHints = { "playstation", "dualshock", "dualsense", "gamepad", "controller" };
|
||||||
private static readonly string[] OtherGamepadGroupHints = { "gamepad", "controller", "joystick" };
|
private static readonly string[] OtherGamepadGroupHints = { "gamepad", "controller", "joystick" };
|
||||||
private static readonly char[] TrimChars = { '{', '}', '<', '>', '\'', '"' };
|
private static readonly char[] TrimChars = { '{', '}', '<', '>', '\'', '"' };
|
||||||
|
private static readonly Dictionary<string, string> DisplayNameCache = new(StringComparer.Ordinal);
|
||||||
|
private static readonly Dictionary<int, string> SpriteTagCache = new();
|
||||||
|
|
||||||
private static InputGlyphDatabase _database;
|
private static InputGlyphDatabase _database;
|
||||||
|
|
||||||
@ -102,7 +105,7 @@ public static class GlyphService
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
tag = $"<sprite name=\"{sprite.name}\">";
|
tag = GetSpriteTag(sprite);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -138,14 +141,21 @@ public static class GlyphService
|
|||||||
return string.Empty;
|
return string.Empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (DisplayNameCache.TryGetValue(controlPath, out string cachedDisplayName))
|
||||||
|
{
|
||||||
|
return cachedDisplayName;
|
||||||
|
}
|
||||||
|
|
||||||
string humanReadable = InputControlPath.ToHumanReadableString(controlPath, InputControlPath.HumanReadableStringOptions.OmitDevice);
|
string humanReadable = InputControlPath.ToHumanReadableString(controlPath, InputControlPath.HumanReadableStringOptions.OmitDevice);
|
||||||
if (!string.IsNullOrWhiteSpace(humanReadable))
|
if (!string.IsNullOrWhiteSpace(humanReadable))
|
||||||
{
|
{
|
||||||
|
DisplayNameCache[controlPath] = humanReadable;
|
||||||
return humanReadable;
|
return humanReadable;
|
||||||
}
|
}
|
||||||
|
|
||||||
string[] parts = controlPath.Split('/');
|
int separatorIndex = controlPath.LastIndexOf('/');
|
||||||
string last = parts[parts.Length - 1].Trim(TrimChars);
|
string last = (separatorIndex >= 0 ? controlPath.Substring(separatorIndex + 1) : controlPath).Trim(TrimChars);
|
||||||
|
DisplayNameCache[controlPath] = last;
|
||||||
return last;
|
return last;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -237,11 +247,69 @@ public static class GlyphService
|
|||||||
}
|
}
|
||||||
|
|
||||||
string[] hints = GetGroupHints(category);
|
string[] hints = GetGroupHints(category);
|
||||||
string[] tokens = groups.Split(InputBinding.Separator);
|
int tokenStart = 0;
|
||||||
for (int i = 0; i < tokens.Length; i++)
|
for (int i = 0; i <= groups.Length; i++)
|
||||||
{
|
{
|
||||||
string token = tokens[i].Trim();
|
if (i < groups.Length && groups[i] != InputBinding.Separator)
|
||||||
if (ContainsAny(token, hints))
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
int tokenLength = i - tokenStart;
|
||||||
|
while (tokenLength > 0 && char.IsWhiteSpace(groups[tokenStart]))
|
||||||
|
{
|
||||||
|
tokenStart++;
|
||||||
|
tokenLength--;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (tokenLength > 0 && char.IsWhiteSpace(groups[tokenStart + tokenLength - 1]))
|
||||||
|
{
|
||||||
|
tokenLength--;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tokenLength > 0)
|
||||||
|
{
|
||||||
|
string token = groups.Substring(tokenStart, tokenLength);
|
||||||
|
if (ContainsAny(token, hints))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tokenStart = i + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static string GetSpriteTag(Sprite sprite)
|
||||||
|
{
|
||||||
|
if (sprite == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
int instanceId = sprite.GetInstanceID();
|
||||||
|
if (SpriteTagCache.TryGetValue(instanceId, out string cachedTag))
|
||||||
|
{
|
||||||
|
return cachedTag;
|
||||||
|
}
|
||||||
|
|
||||||
|
cachedTag = $"<sprite name=\"{sprite.name}\">";
|
||||||
|
SpriteTagCache[instanceId] = cachedTag;
|
||||||
|
return cachedTag;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static bool ContainsAny(string source, string[] hints)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(source) || hints == null)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < hints.Length; i++)
|
||||||
|
{
|
||||||
|
if (source.IndexOf(hints[i], StringComparison.OrdinalIgnoreCase) >= 0)
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -250,26 +318,6 @@ public static class GlyphService
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static bool MatchesControlPath(string path, InputDeviceWatcher.InputDeviceCategory category)
|
|
||||||
{
|
|
||||||
if (string.IsNullOrWhiteSpace(path))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (category)
|
|
||||||
{
|
|
||||||
case InputDeviceWatcher.InputDeviceCategory.Keyboard:
|
|
||||||
return StartsWithDevice(path, "<Keyboard>") || StartsWithDevice(path, "<Mouse>");
|
|
||||||
case InputDeviceWatcher.InputDeviceCategory.Xbox:
|
|
||||||
return StartsWithDevice(path, "<Gamepad>") || StartsWithDevice(path, "<Joystick>") || ContainsAny(path, XboxGroupHints);
|
|
||||||
case InputDeviceWatcher.InputDeviceCategory.PlayStation:
|
|
||||||
return StartsWithDevice(path, "<Gamepad>") || StartsWithDevice(path, "<Joystick>") || ContainsAny(path, PlayStationGroupHints);
|
|
||||||
default:
|
|
||||||
return StartsWithDevice(path, "<Gamepad>") || StartsWithDevice(path, "<Joystick>") || ContainsAny(path, OtherGamepadGroupHints);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static bool StartsWithDevice(string path, string deviceTag)
|
private static bool StartsWithDevice(string path, string deviceTag)
|
||||||
{
|
{
|
||||||
return path.StartsWith(deviceTag, StringComparison.OrdinalIgnoreCase);
|
return path.StartsWith(deviceTag, StringComparison.OrdinalIgnoreCase);
|
||||||
@ -290,26 +338,29 @@ public static class GlyphService
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static bool ContainsAny(string source, string[] hints)
|
|
||||||
{
|
|
||||||
if (string.IsNullOrWhiteSpace(source) || hints == null)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0; i < hints.Length; i++)
|
|
||||||
{
|
|
||||||
if (source.IndexOf(hints[i], StringComparison.OrdinalIgnoreCase) >= 0)
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static string GetEffectivePath(InputBinding binding)
|
private static string GetEffectivePath(InputBinding binding)
|
||||||
{
|
{
|
||||||
return string.IsNullOrWhiteSpace(binding.effectivePath) ? binding.path : binding.effectivePath;
|
return string.IsNullOrWhiteSpace(binding.effectivePath) ? binding.path : binding.effectivePath;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static bool MatchesControlPath(string path, InputDeviceWatcher.InputDeviceCategory category)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(path))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (category)
|
||||||
|
{
|
||||||
|
case InputDeviceWatcher.InputDeviceCategory.Keyboard:
|
||||||
|
return StartsWithDevice(path, "<Keyboard>") || StartsWithDevice(path, "<Mouse>");
|
||||||
|
case InputDeviceWatcher.InputDeviceCategory.Xbox:
|
||||||
|
return StartsWithDevice(path, "<Gamepad>") || StartsWithDevice(path, "<Joystick>") || ContainsAny(path, XboxGroupHints);
|
||||||
|
case InputDeviceWatcher.InputDeviceCategory.PlayStation:
|
||||||
|
return StartsWithDevice(path, "<Gamepad>") || StartsWithDevice(path, "<Joystick>") || ContainsAny(path, PlayStationGroupHints);
|
||||||
|
default:
|
||||||
|
return StartsWithDevice(path, "<Gamepad>") || StartsWithDevice(path, "<Joystick>") || ContainsAny(path, OtherGamepadGroupHints);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -6,7 +6,6 @@ using UnityEngine.InputSystem;
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 输入读取工具。
|
/// 输入读取工具。
|
||||||
/// 负责运行时输入轮询、单次触发和切换态管理,
|
/// 负责运行时输入轮询、单次触发和切换态管理,
|
||||||
/// 与 InputBindingManager 的绑定/重绑定职责分离。
|
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static class InputActionReader
|
public static class InputActionReader
|
||||||
{
|
{
|
||||||
@ -95,7 +95,7 @@ public class InputBindingManager : MonoSingleton<InputBindingManager>
|
|||||||
|
|
||||||
if (actions == null)
|
if (actions == null)
|
||||||
{
|
{
|
||||||
Debug.LogError("InputBindingManager: InputActionAsset not assigned.");
|
Log.Error("InputBindingManager: InputActionAsset not assigned.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -107,7 +107,7 @@ public class InputBindingManager : MonoSingleton<InputBindingManager>
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Debug.LogWarning($"[InputBindingManager] Failed to save default bindings: {ex.Message}");
|
Log.Warning($"[InputBindingManager] Failed to save default bindings: {ex.Message}");
|
||||||
defaultBindingsJson = string.Empty;
|
defaultBindingsJson = string.Empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -123,13 +123,13 @@ public class InputBindingManager : MonoSingleton<InputBindingManager>
|
|||||||
BindingsChanged?.Invoke();
|
BindingsChanged?.Invoke();
|
||||||
if (debugMode)
|
if (debugMode)
|
||||||
{
|
{
|
||||||
Debug.Log($"Loaded overrides from {SavePath}");
|
Log.Info($"Loaded overrides from {SavePath}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Debug.LogError("Failed to load overrides: " + ex);
|
Log.Error("Failed to load overrides: " + ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -193,7 +193,7 @@ public class InputBindingManager : MonoSingleton<InputBindingManager>
|
|||||||
{
|
{
|
||||||
actionLookup.Remove(actionName);
|
actionLookup.Remove(actionName);
|
||||||
ambiguousActionNames.Add(actionName);
|
ambiguousActionNames.Add(actionName);
|
||||||
Debug.LogWarning($"[InputBindingManager] Duplicate action name '{actionName}' detected. Use 'MapName/{actionName}' to resolve it.");
|
Log.Warning($"[InputBindingManager] Duplicate action name '{actionName}' detected. Use 'MapName/{actionName}' to resolve it.");
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
@ -268,7 +268,6 @@ public class InputBindingManager : MonoSingleton<InputBindingManager>
|
|||||||
action.name,
|
action.name,
|
||||||
binding.name,
|
binding.name,
|
||||||
bindingIndex,
|
bindingIndex,
|
||||||
binding.groups?.Split(InputBinding.Separator) ?? Array.Empty<string>(),
|
|
||||||
new BindingPath(binding.path, binding.overridePath),
|
new BindingPath(binding.path, binding.overridePath),
|
||||||
binding
|
binding
|
||||||
));
|
));
|
||||||
@ -281,18 +280,16 @@ public class InputBindingManager : MonoSingleton<InputBindingManager>
|
|||||||
public readonly string parentAction;
|
public readonly string parentAction;
|
||||||
public readonly string compositePart;
|
public readonly string compositePart;
|
||||||
public readonly int bindingIndex;
|
public readonly int bindingIndex;
|
||||||
public readonly string[] group;
|
|
||||||
public readonly BindingPath bindingPath;
|
public readonly BindingPath bindingPath;
|
||||||
public readonly InputBinding inputBinding;
|
public readonly InputBinding inputBinding;
|
||||||
|
|
||||||
public Binding(string name, string parentAction, string compositePart, int bindingIndex,
|
public Binding(string name, string parentAction, string compositePart, int bindingIndex,
|
||||||
string[] group, BindingPath bindingPath, InputBinding inputBinding)
|
BindingPath bindingPath, InputBinding inputBinding)
|
||||||
{
|
{
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.parentAction = parentAction;
|
this.parentAction = parentAction;
|
||||||
this.compositePart = compositePart;
|
this.compositePart = compositePart;
|
||||||
this.bindingIndex = bindingIndex;
|
this.bindingIndex = bindingIndex;
|
||||||
this.group = group;
|
|
||||||
this.bindingPath = bindingPath;
|
this.bindingPath = bindingPath;
|
||||||
this.inputBinding = inputBinding;
|
this.inputBinding = inputBinding;
|
||||||
}
|
}
|
||||||
@ -401,11 +398,11 @@ public class InputBindingManager : MonoSingleton<InputBindingManager>
|
|||||||
|
|
||||||
if (instance.ambiguousActionNames.Contains(actionName))
|
if (instance.ambiguousActionNames.Contains(actionName))
|
||||||
{
|
{
|
||||||
Debug.LogError($"[InputBindingManager] Action name '{actionName}' is ambiguous. Use 'MapName/{actionName}' instead.");
|
Log.Error($"[InputBindingManager] Action name '{actionName}' is ambiguous. Use 'MapName/{actionName}' instead.");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
Debug.LogError($"[InputBindingManager] Could not find action '{actionName}'");
|
Log.Error($"[InputBindingManager] Could not find action '{actionName}'");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -442,7 +439,7 @@ public class InputBindingManager : MonoSingleton<InputBindingManager>
|
|||||||
int bindingIndex = Instance.FindBestBindingIndexForKeyboard(action, compositePartName);
|
int bindingIndex = Instance.FindBestBindingIndexForKeyboard(action, compositePartName);
|
||||||
if (bindingIndex < 0)
|
if (bindingIndex < 0)
|
||||||
{
|
{
|
||||||
Debug.LogError($"[InputBindingManager] No suitable binding found for action '{actionName}' (part={compositePartName ?? "<null>"})");
|
Log.Error($"[InputBindingManager] No suitable binding found for action '{actionName}' (part={compositePartName ?? "<null>"})");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -451,7 +448,7 @@ public class InputBindingManager : MonoSingleton<InputBindingManager>
|
|||||||
Instance.OnRebindStart?.Invoke();
|
Instance.OnRebindStart?.Invoke();
|
||||||
if (Instance.debugMode)
|
if (Instance.debugMode)
|
||||||
{
|
{
|
||||||
Debug.Log("[InputBindingManager] Rebind started");
|
Log.Info("[InputBindingManager] Rebind started");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -472,7 +469,9 @@ public class InputBindingManager : MonoSingleton<InputBindingManager>
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
// 在清除之前创建准备好的重绑定的副本
|
// 在清除之前创建准备好的重绑定的副本
|
||||||
var appliedContexts = new HashSet<RebindContext>(Instance.preparedRebinds);
|
HashSet<RebindContext> appliedContexts = Instance.OnApply != null
|
||||||
|
? new HashSet<RebindContext>(Instance.preparedRebinds)
|
||||||
|
: null;
|
||||||
|
|
||||||
foreach (var ctx in Instance.preparedRebinds)
|
foreach (var ctx in Instance.preparedRebinds)
|
||||||
{
|
{
|
||||||
@ -502,15 +501,15 @@ public class InputBindingManager : MonoSingleton<InputBindingManager>
|
|||||||
Instance.isApplyPending = false;
|
Instance.isApplyPending = false;
|
||||||
if (Instance.debugMode)
|
if (Instance.debugMode)
|
||||||
{
|
{
|
||||||
Debug.Log("[InputBindingManager] Apply confirmed and saved.");
|
Log.Info("[InputBindingManager] Apply confirmed and saved.");
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Debug.LogError("[InputBindingManager] Failed to apply binds: " + ex);
|
Log.Error("[InputBindingManager] Failed to apply binds: " + ex);
|
||||||
Instance.OnApply?.Invoke(false, new HashSet<RebindContext>());
|
Instance.OnApply?.Invoke(false, null);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -523,14 +522,16 @@ public class InputBindingManager : MonoSingleton<InputBindingManager>
|
|||||||
if (!Instance.isApplyPending) return;
|
if (!Instance.isApplyPending) return;
|
||||||
|
|
||||||
// 在清除之前创建准备好的重绑定的副本(用于事件通知)
|
// 在清除之前创建准备好的重绑定的副本(用于事件通知)
|
||||||
var discardedContexts = new HashSet<RebindContext>(Instance.preparedRebinds);
|
HashSet<RebindContext> discardedContexts = Instance.OnApply != null
|
||||||
|
? new HashSet<RebindContext>(Instance.preparedRebinds)
|
||||||
|
: null;
|
||||||
|
|
||||||
Instance.preparedRebinds.Clear();
|
Instance.preparedRebinds.Clear();
|
||||||
Instance.isApplyPending = false;
|
Instance.isApplyPending = false;
|
||||||
Instance.OnApply?.Invoke(false, discardedContexts);
|
Instance.OnApply?.Invoke(false, discardedContexts);
|
||||||
if (Instance.debugMode)
|
if (Instance.debugMode)
|
||||||
{
|
{
|
||||||
Debug.Log("[InputBindingManager] Prepared rebinds discarded.");
|
Log.Info("[InputBindingManager] Prepared rebinds discarded.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -554,28 +555,30 @@ public class InputBindingManager : MonoSingleton<InputBindingManager>
|
|||||||
rebindOperation = op
|
rebindOperation = op
|
||||||
.OnApplyBinding((o, path) =>
|
.OnApplyBinding((o, path) =>
|
||||||
{
|
{
|
||||||
|
RebindContext preparedContext = new RebindContext(action, bindingIndex, path);
|
||||||
if (AnyPreparedRebind(path, action, bindingIndex, out var existing))
|
if (AnyPreparedRebind(path, action, bindingIndex, out var existing))
|
||||||
{
|
{
|
||||||
PrepareRebind(new RebindContext(action, bindingIndex, path));
|
PrepareRebind(preparedContext);
|
||||||
PrepareRebind(new RebindContext(existing.action, existing.bindingIndex, NULL_BINDING));
|
PrepareRebind(new RebindContext(existing.action, existing.bindingIndex, NULL_BINDING));
|
||||||
OnRebindConflict?.Invoke(new RebindContext(action, bindingIndex, path), existing);
|
OnRebindConflict?.Invoke(preparedContext, existing);
|
||||||
}
|
}
|
||||||
else if (AnyBindingPath(path, action, bindingIndex, out var dup))
|
else if (AnyBindingPath(path, action, bindingIndex, out var dup))
|
||||||
{
|
{
|
||||||
PrepareRebind(new RebindContext(action, bindingIndex, path));
|
RebindContext conflictingContext = new RebindContext(dup.action, dup.bindingIndex, dup.action.bindings[dup.bindingIndex].path);
|
||||||
|
PrepareRebind(preparedContext);
|
||||||
PrepareRebind(new RebindContext(dup.action, dup.bindingIndex, NULL_BINDING));
|
PrepareRebind(new RebindContext(dup.action, dup.bindingIndex, NULL_BINDING));
|
||||||
OnRebindConflict?.Invoke(new RebindContext(action, bindingIndex, path), new RebindContext(dup.action, dup.bindingIndex, dup.action.bindings[dup.bindingIndex].path));
|
OnRebindConflict?.Invoke(preparedContext, conflictingContext);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
PrepareRebind(new RebindContext(action, bindingIndex, path));
|
PrepareRebind(preparedContext);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.OnComplete(opc =>
|
.OnComplete(opc =>
|
||||||
{
|
{
|
||||||
if (debugMode)
|
if (debugMode)
|
||||||
{
|
{
|
||||||
Debug.Log("[InputBindingManager] Rebind completed");
|
Log.Info("[InputBindingManager] Rebind completed");
|
||||||
}
|
}
|
||||||
|
|
||||||
actions.Enable();
|
actions.Enable();
|
||||||
@ -586,7 +589,7 @@ public class InputBindingManager : MonoSingleton<InputBindingManager>
|
|||||||
{
|
{
|
||||||
if (debugMode)
|
if (debugMode)
|
||||||
{
|
{
|
||||||
Debug.Log("[InputBindingManager] Rebind cancelled");
|
Log.Info("[InputBindingManager] Rebind cancelled");
|
||||||
}
|
}
|
||||||
|
|
||||||
actions.Enable();
|
actions.Enable();
|
||||||
@ -647,18 +650,17 @@ public class InputBindingManager : MonoSingleton<InputBindingManager>
|
|||||||
|
|
||||||
private void PrepareRebind(RebindContext context)
|
private void PrepareRebind(RebindContext context)
|
||||||
{
|
{
|
||||||
// 如果存在相同操作/绑定的现有重绑定,则移除
|
// Remove any existing prepared state for the same action/binding pair.
|
||||||
preparedRebinds.Remove(context);
|
preparedRebinds.Remove(context);
|
||||||
|
|
||||||
|
BindingPath bindingPath = GetBindingPath(context.action, context.bindingIndex);
|
||||||
|
if (bindingPath == null) return;
|
||||||
|
|
||||||
if (string.IsNullOrEmpty(context.overridePath))
|
if (string.IsNullOrEmpty(context.overridePath))
|
||||||
{
|
{
|
||||||
var bp = GetBindingPath(context.action, context.bindingIndex);
|
context.overridePath = bindingPath.bindingPath;
|
||||||
if (bp != null) context.overridePath = bp.bindingPath;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var bindingPath = GetBindingPath(context.action, context.bindingIndex);
|
|
||||||
if (bindingPath == null) return;
|
|
||||||
|
|
||||||
if (bindingPath.EffectivePath != context.overridePath)
|
if (bindingPath.EffectivePath != context.overridePath)
|
||||||
{
|
{
|
||||||
preparedRebinds.Add(context);
|
preparedRebinds.Add(context);
|
||||||
@ -666,7 +668,7 @@ public class InputBindingManager : MonoSingleton<InputBindingManager>
|
|||||||
OnRebindPrepare?.Invoke(context);
|
OnRebindPrepare?.Invoke(context);
|
||||||
if (debugMode)
|
if (debugMode)
|
||||||
{
|
{
|
||||||
Debug.Log($"Prepared rebind: {context} -> {context.overridePath}");
|
Log.Info($"Prepared rebind: {context} -> {context.overridePath}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -680,12 +682,12 @@ public class InputBindingManager : MonoSingleton<InputBindingManager>
|
|||||||
using (var sw = new StreamWriter(SavePath, false)) await sw.WriteAsync(json);
|
using (var sw = new StreamWriter(SavePath, false)) await sw.WriteAsync(json);
|
||||||
if (debugMode)
|
if (debugMode)
|
||||||
{
|
{
|
||||||
Debug.Log($"Overrides saved to {SavePath}");
|
Log.Info($"Overrides saved to {SavePath}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Debug.LogError("Failed to save overrides: " + ex);
|
Log.Error("Failed to save overrides: " + ex);
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -720,12 +722,12 @@ public class InputBindingManager : MonoSingleton<InputBindingManager>
|
|||||||
BindingsChanged?.Invoke();
|
BindingsChanged?.Invoke();
|
||||||
if (debugMode)
|
if (debugMode)
|
||||||
{
|
{
|
||||||
Debug.Log("Reset to default and saved.");
|
Log.Info("Reset to default and saved.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Debug.LogError("Failed to reset defaults: " + ex);
|
Log.Error("Failed to reset defaults: " + ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1,4 +1,5 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
#if UNITY_EDITOR
|
#if UNITY_EDITOR
|
||||||
using UnityEditor;
|
using UnityEditor;
|
||||||
#endif
|
#endif
|
||||||
@ -93,6 +94,7 @@ public static class InputDeviceWatcher
|
|||||||
private static InputAction _anyInputAction;
|
private static InputAction _anyInputAction;
|
||||||
private static float _lastSwitchTime = -Mathf.Infinity;
|
private static float _lastSwitchTime = -Mathf.Infinity;
|
||||||
private static DeviceContext _lastEmittedContext = CreateDefaultContext();
|
private static DeviceContext _lastEmittedContext = CreateDefaultContext();
|
||||||
|
private static readonly Dictionary<int, DeviceContext> DeviceContextCache = new();
|
||||||
private static bool _initialized;
|
private static bool _initialized;
|
||||||
|
|
||||||
public static event Action<InputDeviceCategory> OnDeviceChanged;
|
public static event Action<InputDeviceCategory> OnDeviceChanged;
|
||||||
@ -112,10 +114,10 @@ public static class InputDeviceWatcher
|
|||||||
|
|
||||||
_anyInputAction = new InputAction("AnyDevice", InputActionType.PassThrough);
|
_anyInputAction = new InputAction("AnyDevice", InputActionType.PassThrough);
|
||||||
_anyInputAction.AddBinding("<Keyboard>/anyKey");
|
_anyInputAction.AddBinding("<Keyboard>/anyKey");
|
||||||
_anyInputAction.AddBinding("<Mouse>/leftButton");
|
// _anyInputAction.AddBinding("<Mouse>/leftButton");
|
||||||
_anyInputAction.AddBinding("<Mouse>/rightButton");
|
// _anyInputAction.AddBinding("<Mouse>/rightButton");
|
||||||
_anyInputAction.AddBinding("<Mouse>/middleButton");
|
// _anyInputAction.AddBinding("<Mouse>/middleButton");
|
||||||
_anyInputAction.AddBinding("<Mouse>/scroll");
|
// _anyInputAction.AddBinding("<Mouse>/scroll");
|
||||||
_anyInputAction.AddBinding("<Gamepad>/*");
|
_anyInputAction.AddBinding("<Gamepad>/*");
|
||||||
_anyInputAction.AddBinding("<Joystick>/*");
|
_anyInputAction.AddBinding("<Joystick>/*");
|
||||||
_anyInputAction.performed += OnAnyInputPerformed;
|
_anyInputAction.performed += OnAnyInputPerformed;
|
||||||
@ -154,6 +156,7 @@ public static class InputDeviceWatcher
|
|||||||
}
|
}
|
||||||
|
|
||||||
InputSystem.onDeviceChange -= OnDeviceChange;
|
InputSystem.onDeviceChange -= OnDeviceChange;
|
||||||
|
DeviceContextCache.Clear();
|
||||||
|
|
||||||
ApplyContext(CreateDefaultContext(), false);
|
ApplyContext(CreateDefaultContext(), false);
|
||||||
_lastEmittedContext = CurrentContext;
|
_lastEmittedContext = CurrentContext;
|
||||||
@ -171,7 +174,13 @@ public static class InputDeviceWatcher
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
DeviceContext deviceContext = BuildContext(control.device);
|
InputDevice device = control.device;
|
||||||
|
if (device == null || device.deviceId == CurrentDeviceId)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
DeviceContext deviceContext = BuildContext(device);
|
||||||
if (deviceContext.DeviceId == CurrentDeviceId)
|
if (deviceContext.DeviceId == CurrentDeviceId)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
@ -198,6 +207,7 @@ public static class InputDeviceWatcher
|
|||||||
{
|
{
|
||||||
case InputDeviceChange.Removed:
|
case InputDeviceChange.Removed:
|
||||||
case InputDeviceChange.Disconnected:
|
case InputDeviceChange.Disconnected:
|
||||||
|
DeviceContextCache.Remove(device.deviceId);
|
||||||
if (device.deviceId == CurrentDeviceId)
|
if (device.deviceId == CurrentDeviceId)
|
||||||
{
|
{
|
||||||
PromoteFallbackDevice(device.deviceId);
|
PromoteFallbackDevice(device.deviceId);
|
||||||
@ -205,6 +215,7 @@ public static class InputDeviceWatcher
|
|||||||
break;
|
break;
|
||||||
case InputDeviceChange.Reconnected:
|
case InputDeviceChange.Reconnected:
|
||||||
case InputDeviceChange.Added:
|
case InputDeviceChange.Added:
|
||||||
|
DeviceContextCache.Remove(device.deviceId);
|
||||||
if (CurrentDeviceId < 0 && IsRelevantDevice(device))
|
if (CurrentDeviceId < 0 && IsRelevantDevice(device))
|
||||||
{
|
{
|
||||||
SetCurrentContext(BuildContext(device));
|
SetCurrentContext(BuildContext(device));
|
||||||
@ -271,15 +282,22 @@ public static class InputDeviceWatcher
|
|||||||
return CreateDefaultContext();
|
return CreateDefaultContext();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (DeviceContextCache.TryGetValue(device.deviceId, out DeviceContext cachedContext))
|
||||||
|
{
|
||||||
|
return cachedContext;
|
||||||
|
}
|
||||||
|
|
||||||
TryParseVendorProductIds(device.description.capabilities, out int vendorId, out int productId);
|
TryParseVendorProductIds(device.description.capabilities, out int vendorId, out int productId);
|
||||||
string deviceName = string.IsNullOrWhiteSpace(device.displayName) ? device.name : device.displayName;
|
string deviceName = string.IsNullOrWhiteSpace(device.displayName) ? device.name : device.displayName;
|
||||||
return new DeviceContext(
|
DeviceContext context = new DeviceContext(
|
||||||
DetermineCategoryFromDevice(device),
|
DetermineCategoryFromDevice(device, vendorId),
|
||||||
device.deviceId,
|
device.deviceId,
|
||||||
vendorId,
|
vendorId,
|
||||||
productId,
|
productId,
|
||||||
deviceName,
|
deviceName,
|
||||||
device.layout);
|
device.layout);
|
||||||
|
DeviceContextCache[device.deviceId] = context;
|
||||||
|
return context;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static DeviceContext CreateDefaultContext()
|
private static DeviceContext CreateDefaultContext()
|
||||||
@ -287,7 +305,7 @@ public static class InputDeviceWatcher
|
|||||||
return new DeviceContext(InputDeviceCategory.Keyboard, -1, 0, 0, DefaultKeyboardDeviceName, Keyboard.current != null ? Keyboard.current.layout : string.Empty);
|
return new DeviceContext(InputDeviceCategory.Keyboard, -1, 0, 0, DefaultKeyboardDeviceName, Keyboard.current != null ? Keyboard.current.layout : string.Empty);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static InputDeviceCategory DetermineCategoryFromDevice(InputDevice device)
|
private static InputDeviceCategory DetermineCategoryFromDevice(InputDevice device, int vendorId = 0)
|
||||||
{
|
{
|
||||||
if (device == null)
|
if (device == null)
|
||||||
{
|
{
|
||||||
@ -301,18 +319,17 @@ public static class InputDeviceWatcher
|
|||||||
|
|
||||||
if (IsGamepadLike(device))
|
if (IsGamepadLike(device))
|
||||||
{
|
{
|
||||||
return GetGamepadCategory(device);
|
return GetGamepadCategory(device, vendorId);
|
||||||
}
|
}
|
||||||
|
|
||||||
string combined = CombineDeviceDescription(device);
|
if (DescriptionContains(device, "xbox") || DescriptionContains(device, "xinput"))
|
||||||
if (ContainsIgnoreCase(combined, "xbox") || ContainsIgnoreCase(combined, "xinput"))
|
|
||||||
{
|
{
|
||||||
return InputDeviceCategory.Xbox;
|
return InputDeviceCategory.Xbox;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ContainsIgnoreCase(combined, "dualshock")
|
if (DescriptionContains(device, "dualshock")
|
||||||
|| ContainsIgnoreCase(combined, "dualsense")
|
|| DescriptionContains(device, "dualsense")
|
||||||
|| ContainsIgnoreCase(combined, "playstation"))
|
|| DescriptionContains(device, "playstation"))
|
||||||
{
|
{
|
||||||
return InputDeviceCategory.PlayStation;
|
return InputDeviceCategory.PlayStation;
|
||||||
}
|
}
|
||||||
@ -367,7 +384,7 @@ public static class InputDeviceWatcher
|
|||||||
|| ContainsIgnoreCase(layout, "Joystick");
|
|| ContainsIgnoreCase(layout, "Joystick");
|
||||||
}
|
}
|
||||||
|
|
||||||
private static InputDeviceCategory GetGamepadCategory(InputDevice device)
|
private static InputDeviceCategory GetGamepadCategory(InputDevice device, int vendorId = 0)
|
||||||
{
|
{
|
||||||
if (device == null)
|
if (device == null)
|
||||||
{
|
{
|
||||||
@ -380,28 +397,29 @@ public static class InputDeviceWatcher
|
|||||||
return InputDeviceCategory.Xbox;
|
return InputDeviceCategory.Xbox;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (TryParseVendorProductIds(device.description.capabilities, out int vendorId, out _))
|
if (vendorId == 0 && TryParseVendorProductIds(device.description.capabilities, out int parsedVendorId, out _))
|
||||||
{
|
{
|
||||||
if (vendorId == 0x045E || vendorId == 1118)
|
vendorId = parsedVendorId;
|
||||||
{
|
|
||||||
return InputDeviceCategory.Xbox;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (vendorId == 0x054C || vendorId == 1356)
|
|
||||||
{
|
|
||||||
return InputDeviceCategory.PlayStation;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
string combined = CombineDeviceDescription(device);
|
if (vendorId == 0x045E || vendorId == 1118)
|
||||||
if (ContainsIgnoreCase(combined, "xbox"))
|
|
||||||
{
|
{
|
||||||
return InputDeviceCategory.Xbox;
|
return InputDeviceCategory.Xbox;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ContainsIgnoreCase(combined, "dualshock")
|
if (vendorId == 0x054C || vendorId == 1356)
|
||||||
|| ContainsIgnoreCase(combined, "dualsense")
|
{
|
||||||
|| ContainsIgnoreCase(combined, "playstation"))
|
return InputDeviceCategory.PlayStation;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (DescriptionContains(device, "xbox"))
|
||||||
|
{
|
||||||
|
return InputDeviceCategory.Xbox;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (DescriptionContains(device, "dualshock")
|
||||||
|
|| DescriptionContains(device, "dualsense")
|
||||||
|
|| DescriptionContains(device, "playstation"))
|
||||||
{
|
{
|
||||||
return InputDeviceCategory.PlayStation;
|
return InputDeviceCategory.PlayStation;
|
||||||
}
|
}
|
||||||
@ -409,14 +427,20 @@ public static class InputDeviceWatcher
|
|||||||
return InputDeviceCategory.Other;
|
return InputDeviceCategory.Other;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static string CombineDeviceDescription(InputDevice device)
|
private static bool DescriptionContains(InputDevice device, string value)
|
||||||
{
|
{
|
||||||
return string.Concat(
|
if (device == null)
|
||||||
device.description.interfaceName, " ",
|
{
|
||||||
device.layout, " ",
|
return false;
|
||||||
device.description.product, " ",
|
}
|
||||||
device.description.manufacturer, " ",
|
|
||||||
device.displayName);
|
var description = device.description;
|
||||||
|
return ContainsIgnoreCase(description.interfaceName, value)
|
||||||
|
|| ContainsIgnoreCase(device.layout, value)
|
||||||
|
|| ContainsIgnoreCase(description.product, value)
|
||||||
|
|| ContainsIgnoreCase(description.manufacturer, value)
|
||||||
|
|| ContainsIgnoreCase(device.displayName, value)
|
||||||
|
|| ContainsIgnoreCase(device.name, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static bool TryParseVendorProductIds(string capabilities, out int vendorId, out int productId)
|
private static bool TryParseVendorProductIds(string capabilities, out int vendorId, out int productId)
|
||||||
8
Client/Assets/Scripts/CustomeModule/InputGlyph/Data.meta
Normal file
8
Client/Assets/Scripts/CustomeModule/InputGlyph/Data.meta
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 096043edb2be8224f8564b40992f588b
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@ -45,6 +45,7 @@ public sealed class InputGlyphDatabase : ScriptableObject
|
|||||||
InputDeviceWatcher.InputDeviceCategory.Xbox,
|
InputDeviceWatcher.InputDeviceCategory.Xbox,
|
||||||
InputDeviceWatcher.InputDeviceCategory.Keyboard,
|
InputDeviceWatcher.InputDeviceCategory.Keyboard,
|
||||||
};
|
};
|
||||||
|
private static readonly Dictionary<string, string> NormalizedPathCache = new(StringComparer.Ordinal);
|
||||||
|
|
||||||
public List<DeviceGlyphTable> tables = new List<DeviceGlyphTable>();
|
public List<DeviceGlyphTable> tables = new List<DeviceGlyphTable>();
|
||||||
public Sprite placeholderSprite;
|
public Sprite placeholderSprite;
|
||||||
@ -72,7 +73,7 @@ public sealed class InputGlyphDatabase : ScriptableObject
|
|||||||
}
|
}
|
||||||
|
|
||||||
EnsureCache();
|
EnsureCache();
|
||||||
_tableCache.TryGetValue(deviceName.ToLowerInvariant(), out DeviceGlyphTable table);
|
_tableCache.TryGetValue(deviceName, out DeviceGlyphTable table);
|
||||||
return table;
|
return table;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -175,6 +176,11 @@ public sealed class InputGlyphDatabase : ScriptableObject
|
|||||||
InitializeLookup(InputDeviceWatcher.InputDeviceCategory.PlayStation);
|
InitializeLookup(InputDeviceWatcher.InputDeviceCategory.PlayStation);
|
||||||
InitializeLookup(InputDeviceWatcher.InputDeviceCategory.Other);
|
InitializeLookup(InputDeviceWatcher.InputDeviceCategory.Other);
|
||||||
|
|
||||||
|
if (tables == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
for (int i = 0; i < tables.Count; i++)
|
for (int i = 0; i < tables.Count; i++)
|
||||||
{
|
{
|
||||||
DeviceGlyphTable table = tables[i];
|
DeviceGlyphTable table = tables[i];
|
||||||
@ -183,13 +189,25 @@ public sealed class InputGlyphDatabase : ScriptableObject
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
_tableCache[table.deviceName.ToLowerInvariant()] = table;
|
_tableCache[table.deviceName] = table;
|
||||||
InputDeviceWatcher.InputDeviceCategory category = ParseCategory(table.deviceName);
|
InputDeviceWatcher.InputDeviceCategory category = ParseCategory(table.deviceName);
|
||||||
Dictionary<string, Sprite> map = _pathLookup[category];
|
Dictionary<string, Sprite> map = _pathLookup[category];
|
||||||
RegisterEntries(table, map);
|
RegisterEntries(table, map);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if UNITY_EDITOR
|
||||||
|
public void EditorRefreshCache()
|
||||||
|
{
|
||||||
|
BuildCache();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string EditorNormalizeControlPath(string controlPath)
|
||||||
|
{
|
||||||
|
return NormalizeControlPath(controlPath);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
private void InitializeLookup(InputDeviceWatcher.InputDeviceCategory category)
|
private void InitializeLookup(InputDeviceWatcher.InputDeviceCategory category)
|
||||||
{
|
{
|
||||||
_pathLookup[category] = new Dictionary<string, Sprite>(StringComparer.OrdinalIgnoreCase);
|
_pathLookup[category] = new Dictionary<string, Sprite>(StringComparer.OrdinalIgnoreCase);
|
||||||
@ -236,7 +254,14 @@ public sealed class InputGlyphDatabase : ScriptableObject
|
|||||||
return string.Empty;
|
return string.Empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
return CanonicalizeDeviceLayout(controlPath.Trim().ToLowerInvariant());
|
if (NormalizedPathCache.TryGetValue(controlPath, out string normalizedPath))
|
||||||
|
{
|
||||||
|
return normalizedPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
normalizedPath = CanonicalizeDeviceLayout(controlPath.Trim().ToLowerInvariant());
|
||||||
|
NormalizedPathCache[controlPath] = normalizedPath;
|
||||||
|
return normalizedPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static string CanonicalizeDeviceLayout(string controlPath)
|
private static string CanonicalizeDeviceLayout(string controlPath)
|
||||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,303 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using TMPro;
|
||||||
|
using UnityEditor;
|
||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.InputSystem;
|
||||||
|
|
||||||
|
[CustomEditor(typeof(InputGlyph))]
|
||||||
|
[CanEditMultipleObjects]
|
||||||
|
public sealed class InputGlyphEditor : Editor
|
||||||
|
{
|
||||||
|
private SerializedProperty _actionSourceMode;
|
||||||
|
private SerializedProperty _actionReference;
|
||||||
|
private SerializedProperty _hotkeyTrigger;
|
||||||
|
private SerializedProperty _actionName;
|
||||||
|
private SerializedProperty _compositePartName;
|
||||||
|
private SerializedProperty _outputMode;
|
||||||
|
private SerializedProperty _targetImage;
|
||||||
|
private SerializedProperty _targetText;
|
||||||
|
private SerializedProperty _categoryEvents;
|
||||||
|
|
||||||
|
private GUIStyle _titleStyle;
|
||||||
|
private GUIStyle _sectionStyle;
|
||||||
|
private GUIStyle _hintStyle;
|
||||||
|
|
||||||
|
private void OnEnable()
|
||||||
|
{
|
||||||
|
_actionSourceMode = serializedObject.FindProperty("actionSourceMode");
|
||||||
|
_actionReference = serializedObject.FindProperty("actionReference");
|
||||||
|
_hotkeyTrigger = serializedObject.FindProperty("hotkeyTrigger");
|
||||||
|
_actionName = serializedObject.FindProperty("actionName");
|
||||||
|
_compositePartName = serializedObject.FindProperty("compositePartName");
|
||||||
|
_outputMode = serializedObject.FindProperty("outputMode");
|
||||||
|
_targetImage = serializedObject.FindProperty("targetImage");
|
||||||
|
_targetText = serializedObject.FindProperty("targetText");
|
||||||
|
_categoryEvents = serializedObject.FindProperty("categoryEvents");
|
||||||
|
BuildStyles();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void OnInspectorGUI()
|
||||||
|
{
|
||||||
|
serializedObject.Update();
|
||||||
|
|
||||||
|
DrawSourceSection();
|
||||||
|
DrawOutputSection();
|
||||||
|
DrawEventsSection();
|
||||||
|
|
||||||
|
serializedObject.ApplyModifiedProperties();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void DrawSourceSection()
|
||||||
|
{
|
||||||
|
InputAction resolvedAction = ResolveSelectedAction();
|
||||||
|
|
||||||
|
EditorGUILayout.BeginVertical(_sectionStyle);
|
||||||
|
EditorGUILayout.PropertyField(_actionSourceMode, new GUIContent("Reference Mode"));
|
||||||
|
DrawSourceFields();
|
||||||
|
DrawResolvedActionInfo(resolvedAction);
|
||||||
|
DrawCompositePartField(resolvedAction);
|
||||||
|
EditorGUILayout.EndVertical();
|
||||||
|
EditorGUILayout.Space(6f);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void DrawSourceFields()
|
||||||
|
{
|
||||||
|
InputGlyph.ActionSourceMode mode = (InputGlyph.ActionSourceMode)_actionSourceMode.enumValueIndex;
|
||||||
|
switch (mode)
|
||||||
|
{
|
||||||
|
case InputGlyph.ActionSourceMode.ActionReference:
|
||||||
|
EditorGUILayout.PropertyField(_actionReference, new GUIContent("Action Reference"));
|
||||||
|
EditorGUILayout.LabelField("Use a direct InputActionReference.", _hintStyle);
|
||||||
|
break;
|
||||||
|
case InputGlyph.ActionSourceMode.HotkeyTrigger:
|
||||||
|
EditorGUILayout.PropertyField(_hotkeyTrigger, new GUIContent("Hotkey Trigger"));
|
||||||
|
Component component = _hotkeyTrigger.objectReferenceValue as Component;
|
||||||
|
if (component != null && !(component is UnityEngine.UI.IHotkeyTrigger))
|
||||||
|
{
|
||||||
|
EditorGUILayout.HelpBox("Hotkey Trigger must implement IHotkeyTrigger.", MessageType.Warning);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
EditorGUILayout.LabelField("Reads the action from an external IHotkeyTrigger component.", _hintStyle);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case InputGlyph.ActionSourceMode.ActionName:
|
||||||
|
EditorGUILayout.PropertyField(_actionName, new GUIContent("Action Name"));
|
||||||
|
EditorGUILayout.LabelField("Supports ActionName or MapName/ActionName.", _hintStyle);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void DrawOutputSection()
|
||||||
|
{
|
||||||
|
EditorGUILayout.BeginVertical(_sectionStyle);
|
||||||
|
EditorGUILayout.PropertyField(_outputMode, new GUIContent("Render Mode"));
|
||||||
|
DrawOutputFields();
|
||||||
|
EditorGUILayout.EndVertical();
|
||||||
|
EditorGUILayout.Space(6f);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void DrawOutputFields()
|
||||||
|
{
|
||||||
|
InputGlyph.OutputMode mode = (InputGlyph.OutputMode)_outputMode.enumValueIndex;
|
||||||
|
switch (mode)
|
||||||
|
{
|
||||||
|
case InputGlyph.OutputMode.Image:
|
||||||
|
EditorGUILayout.PropertyField(_targetImage, new GUIContent("Target Image"));
|
||||||
|
EditorGUILayout.LabelField("Shows the resolved sprite on a Unity UI Image.", _hintStyle);
|
||||||
|
break;
|
||||||
|
case InputGlyph.OutputMode.Text:
|
||||||
|
EditorGUILayout.PropertyField(_targetText, new GUIContent("Target TMP Text"));
|
||||||
|
EditorGUILayout.LabelField("Uses the current TMP text as a template and replaces {0}.", _hintStyle);
|
||||||
|
TMP_Text text = _targetText.objectReferenceValue as TMP_Text;
|
||||||
|
if (text == null)
|
||||||
|
{
|
||||||
|
EditorGUILayout.HelpBox("If TMP_Text is empty, the component tries GetComponent<TMP_Text>().", MessageType.None);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void DrawEventsSection()
|
||||||
|
{
|
||||||
|
EditorGUILayout.BeginVertical(_sectionStyle);
|
||||||
|
EditorGUILayout.PropertyField(_categoryEvents, new GUIContent("Category Events"), true);
|
||||||
|
EditorGUILayout.EndVertical();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void DrawResolvedActionInfo(InputAction action)
|
||||||
|
{
|
||||||
|
if (action == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
string mapName = action.actionMap != null ? action.actionMap.name : "<No Map>";
|
||||||
|
EditorGUILayout.LabelField($"Resolved Action: {mapName}/{action.name}", _hintStyle);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void DrawCompositePartField(InputAction action)
|
||||||
|
{
|
||||||
|
List<string> compositeParts = CollectCompositePartNames(action);
|
||||||
|
if (compositeParts.Count == 0)
|
||||||
|
{
|
||||||
|
if (!string.IsNullOrEmpty(_compositePartName.stringValue))
|
||||||
|
{
|
||||||
|
_compositePartName.stringValue = string.Empty;
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
string[] options = new string[compositeParts.Count + 1];
|
||||||
|
options[0] = "<None>";
|
||||||
|
for (int i = 0; i < compositeParts.Count; i++)
|
||||||
|
{
|
||||||
|
options[i + 1] = compositeParts[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
int selectedIndex = 0;
|
||||||
|
for (int i = 0; i < compositeParts.Count; i++)
|
||||||
|
{
|
||||||
|
if (string.Equals(compositeParts[i], _compositePartName.stringValue, StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
selectedIndex = i + 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int newIndex = EditorGUILayout.Popup(new GUIContent("Composite Part"), selectedIndex, options);
|
||||||
|
_compositePartName.stringValue = newIndex <= 0 ? string.Empty : compositeParts[newIndex - 1];
|
||||||
|
EditorGUILayout.LabelField("Shown only when the resolved action contains composite bindings.", _hintStyle);
|
||||||
|
}
|
||||||
|
|
||||||
|
private InputAction ResolveSelectedAction()
|
||||||
|
{
|
||||||
|
InputGlyph.ActionSourceMode mode = (InputGlyph.ActionSourceMode)_actionSourceMode.enumValueIndex;
|
||||||
|
switch (mode)
|
||||||
|
{
|
||||||
|
case InputGlyph.ActionSourceMode.ActionReference:
|
||||||
|
InputActionReference actionReference = _actionReference.objectReferenceValue as InputActionReference;
|
||||||
|
return actionReference != null ? actionReference.action : null;
|
||||||
|
case InputGlyph.ActionSourceMode.HotkeyTrigger:
|
||||||
|
Component component = _hotkeyTrigger.objectReferenceValue as Component;
|
||||||
|
if (component is UnityEngine.UI.IHotkeyTrigger trigger && trigger.HotkeyAction != null)
|
||||||
|
{
|
||||||
|
return trigger.HotkeyAction.action;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
case InputGlyph.ActionSourceMode.ActionName:
|
||||||
|
return ResolveActionByName(_actionName.stringValue);
|
||||||
|
default:
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private InputAction ResolveActionByName(string actionName)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(actionName))
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (InputActionAsset asset in EnumerateInputActionAssets())
|
||||||
|
{
|
||||||
|
if (asset == null)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
InputAction action = asset.FindAction(actionName, false);
|
||||||
|
if (action != null)
|
||||||
|
{
|
||||||
|
return action;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private IEnumerable<InputActionAsset> EnumerateInputActionAssets()
|
||||||
|
{
|
||||||
|
HashSet<InputActionAsset> visited = new HashSet<InputActionAsset>();
|
||||||
|
InputBindingManager[] managers = Resources.FindObjectsOfTypeAll<InputBindingManager>();
|
||||||
|
for (int i = 0; i < managers.Length; i++)
|
||||||
|
{
|
||||||
|
InputActionAsset asset = managers[i] != null ? managers[i].actions : null;
|
||||||
|
if (asset != null && visited.Add(asset))
|
||||||
|
{
|
||||||
|
yield return asset;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
string[] guids = AssetDatabase.FindAssets("t:InputActionAsset");
|
||||||
|
for (int i = 0; i < guids.Length; i++)
|
||||||
|
{
|
||||||
|
string path = AssetDatabase.GUIDToAssetPath(guids[i]);
|
||||||
|
InputActionAsset asset = AssetDatabase.LoadAssetAtPath<InputActionAsset>(path);
|
||||||
|
if (asset != null && visited.Add(asset))
|
||||||
|
{
|
||||||
|
yield return asset;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static List<string> CollectCompositePartNames(InputAction action)
|
||||||
|
{
|
||||||
|
List<string> parts = new List<string>();
|
||||||
|
if (action == null)
|
||||||
|
{
|
||||||
|
return parts;
|
||||||
|
}
|
||||||
|
|
||||||
|
HashSet<string> uniqueParts = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
|
||||||
|
for (int i = 0; i < action.bindings.Count; i++)
|
||||||
|
{
|
||||||
|
InputBinding binding = action.bindings[i];
|
||||||
|
if (!binding.isPartOfComposite || string.IsNullOrWhiteSpace(binding.name))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (uniqueParts.Add(binding.name))
|
||||||
|
{
|
||||||
|
parts.Add(binding.name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return parts;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void BuildStyles()
|
||||||
|
{
|
||||||
|
if (_titleStyle == null)
|
||||||
|
{
|
||||||
|
_titleStyle = new GUIStyle(EditorStyles.boldLabel)
|
||||||
|
{
|
||||||
|
fontSize = 14
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_sectionStyle == null)
|
||||||
|
{
|
||||||
|
_sectionStyle = new GUIStyle(EditorStyles.helpBox)
|
||||||
|
{
|
||||||
|
padding = new RectOffset(12, 12, 10, 10)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_hintStyle == null)
|
||||||
|
{
|
||||||
|
_hintStyle = new GUIStyle(EditorStyles.miniLabel)
|
||||||
|
{
|
||||||
|
wordWrap = true
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 72d9df70bb4f43f6a73be92b5f332871
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
296
Client/Assets/Scripts/CustomeModule/InputGlyph/InputGlyph.cs
Normal file
296
Client/Assets/Scripts/CustomeModule/InputGlyph/InputGlyph.cs
Normal file
@ -0,0 +1,296 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using AlicizaX;
|
||||||
|
using TMPro;
|
||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.Events;
|
||||||
|
using UnityEngine.InputSystem;
|
||||||
|
using UnityEngine.UI;
|
||||||
|
|
||||||
|
[AddComponentMenu("UI/Input Glyph")]
|
||||||
|
public sealed class InputGlyph : InputGlyphBehaviourBase
|
||||||
|
{
|
||||||
|
public enum ActionSourceMode
|
||||||
|
{
|
||||||
|
ActionReference,
|
||||||
|
HotkeyTrigger,
|
||||||
|
ActionName
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum OutputMode
|
||||||
|
{
|
||||||
|
Image,
|
||||||
|
Text
|
||||||
|
}
|
||||||
|
|
||||||
|
[Serializable]
|
||||||
|
public sealed class DeviceCategoryEvent
|
||||||
|
{
|
||||||
|
public InputDeviceWatcher.InputDeviceCategory category;
|
||||||
|
public UnityEvent onMatched;
|
||||||
|
public UnityEvent onNotMatched;
|
||||||
|
}
|
||||||
|
|
||||||
|
[Header("Source")]
|
||||||
|
[SerializeField] private ActionSourceMode actionSourceMode = ActionSourceMode.ActionReference;
|
||||||
|
[SerializeField] private InputActionReference actionReference;
|
||||||
|
[SerializeField] private Component hotkeyTrigger;
|
||||||
|
[SerializeField] private string actionName;
|
||||||
|
[SerializeField] private string compositePartName;
|
||||||
|
|
||||||
|
[Header("Output")]
|
||||||
|
[SerializeField] private OutputMode outputMode = OutputMode.Image;
|
||||||
|
[SerializeField] private Image targetImage;
|
||||||
|
[SerializeField] private TMP_Text targetText;
|
||||||
|
|
||||||
|
[Header("Platform Events")]
|
||||||
|
[SerializeField] private List<DeviceCategoryEvent> categoryEvents = new();
|
||||||
|
|
||||||
|
private Sprite _cachedSprite;
|
||||||
|
private string _templateText;
|
||||||
|
private string _cachedFormattedText;
|
||||||
|
private string _cachedReplacementToken;
|
||||||
|
private bool _hasInvokedCategoryEvent;
|
||||||
|
private InputDeviceWatcher.InputDeviceCategory _lastInvokedCategory;
|
||||||
|
|
||||||
|
#if UNITY_EDITOR
|
||||||
|
private void OnValidate()
|
||||||
|
{
|
||||||
|
AutoAssignHotkeyTrigger();
|
||||||
|
AutoAssignTarget();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
protected override void OnEnable()
|
||||||
|
{
|
||||||
|
AutoAssignHotkeyTrigger();
|
||||||
|
AutoAssignTarget();
|
||||||
|
CacheTemplateText();
|
||||||
|
base.OnEnable();
|
||||||
|
InvokeCategoryEvents(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnDeviceCategoryChanged(
|
||||||
|
InputDeviceWatcher.InputDeviceCategory previousCategory,
|
||||||
|
InputDeviceWatcher.InputDeviceCategory newCategory)
|
||||||
|
{
|
||||||
|
if (previousCategory == newCategory)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
InvokeCategoryEvents(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void RefreshGlyph()
|
||||||
|
{
|
||||||
|
InputAction action = ResolveAction();
|
||||||
|
switch (outputMode)
|
||||||
|
{
|
||||||
|
case OutputMode.Image:
|
||||||
|
RefreshImage(action);
|
||||||
|
break;
|
||||||
|
case OutputMode.Text:
|
||||||
|
RefreshText(action);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void RefreshImage(InputAction action)
|
||||||
|
{
|
||||||
|
if (targetImage == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (action == null)
|
||||||
|
{
|
||||||
|
ClearImage();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool hasSprite = GlyphService.TryGetUISpriteForActionPath(action, compositePartName, CurrentCategory, out Sprite sprite);
|
||||||
|
if (!hasSprite)
|
||||||
|
{
|
||||||
|
sprite = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_cachedSprite != sprite || targetImage.sprite != sprite)
|
||||||
|
{
|
||||||
|
_cachedSprite = sprite;
|
||||||
|
targetImage.sprite = sprite;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void RefreshText(InputAction action)
|
||||||
|
{
|
||||||
|
if (targetText == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
CacheTemplateText();
|
||||||
|
if (action == null)
|
||||||
|
{
|
||||||
|
ResetText();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
string replacementToken;
|
||||||
|
if (GlyphService.TryGetTMPTagForActionPath(action, compositePartName, CurrentCategory, out string tag, out string displayFallback))
|
||||||
|
{
|
||||||
|
replacementToken = tag;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
replacementToken = displayFallback;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (string.IsNullOrEmpty(replacementToken))
|
||||||
|
{
|
||||||
|
ResetText();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
string formattedText = Utility.Text.Format(_templateText, replacementToken);
|
||||||
|
if (_cachedReplacementToken == replacementToken
|
||||||
|
&& _cachedFormattedText == formattedText
|
||||||
|
&& targetText.text == formattedText)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_cachedReplacementToken = replacementToken;
|
||||||
|
if (_cachedFormattedText != formattedText || targetText.text != formattedText)
|
||||||
|
{
|
||||||
|
_cachedFormattedText = formattedText;
|
||||||
|
targetText.text = formattedText;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private InputAction ResolveAction()
|
||||||
|
{
|
||||||
|
switch (actionSourceMode)
|
||||||
|
{
|
||||||
|
case ActionSourceMode.ActionReference:
|
||||||
|
return actionReference != null ? actionReference.action : null;
|
||||||
|
case ActionSourceMode.HotkeyTrigger:
|
||||||
|
return ResolveHotkeyAction();
|
||||||
|
case ActionSourceMode.ActionName:
|
||||||
|
return InputBindingManager.TryGetAction(actionName, out InputAction action) ? action : null;
|
||||||
|
default:
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private InputAction ResolveHotkeyAction()
|
||||||
|
{
|
||||||
|
IHotkeyTrigger trigger = ResolveHotkeyTrigger();
|
||||||
|
return trigger != null && trigger.HotkeyAction != null ? trigger.HotkeyAction.action : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private IHotkeyTrigger ResolveHotkeyTrigger()
|
||||||
|
{
|
||||||
|
AutoAssignHotkeyTrigger();
|
||||||
|
return hotkeyTrigger as IHotkeyTrigger;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void AutoAssignHotkeyTrigger()
|
||||||
|
{
|
||||||
|
if (actionSourceMode != ActionSourceMode.HotkeyTrigger || hotkeyTrigger != null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (TryGetComponent(typeof(IHotkeyTrigger), out Component component))
|
||||||
|
{
|
||||||
|
hotkeyTrigger = component;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void AutoAssignTarget()
|
||||||
|
{
|
||||||
|
switch (outputMode)
|
||||||
|
{
|
||||||
|
case OutputMode.Image:
|
||||||
|
if (targetImage == null)
|
||||||
|
{
|
||||||
|
targetImage = GetComponent<Image>();
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case OutputMode.Text:
|
||||||
|
if (targetText == null)
|
||||||
|
{
|
||||||
|
targetText = GetComponent<TMP_Text>();
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void CacheTemplateText()
|
||||||
|
{
|
||||||
|
if (targetText == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (string.IsNullOrEmpty(_templateText))
|
||||||
|
{
|
||||||
|
_templateText = targetText.text;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ResetText()
|
||||||
|
{
|
||||||
|
_cachedReplacementToken = null;
|
||||||
|
_cachedFormattedText = null;
|
||||||
|
if (targetText != null && targetText.text != _templateText)
|
||||||
|
{
|
||||||
|
targetText.text = _templateText;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ClearImage()
|
||||||
|
{
|
||||||
|
_cachedSprite = null;
|
||||||
|
if (targetImage != null && targetImage.sprite != null)
|
||||||
|
{
|
||||||
|
targetImage.sprite = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void InvokeCategoryEvents(bool force)
|
||||||
|
{
|
||||||
|
if (!force && _hasInvokedCategoryEvent && _lastInvokedCategory == CurrentCategory)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_hasInvokedCategoryEvent = true;
|
||||||
|
_lastInvokedCategory = CurrentCategory;
|
||||||
|
if (categoryEvents == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < categoryEvents.Count; i++)
|
||||||
|
{
|
||||||
|
DeviceCategoryEvent categoryEvent = categoryEvents[i];
|
||||||
|
if (categoryEvent == null)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (categoryEvent.category == CurrentCategory)
|
||||||
|
{
|
||||||
|
categoryEvent.onMatched?.Invoke();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
categoryEvent.onNotMatched?.Invoke();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 211cfb186fc74ca694ec6f7f4b0fd933
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@ -20,7 +20,9 @@ public abstract class InputGlyphBehaviourBase : MonoBehaviour
|
|||||||
|
|
||||||
private void HandleDeviceChanged(InputDeviceWatcher.InputDeviceCategory category)
|
private void HandleDeviceChanged(InputDeviceWatcher.InputDeviceCategory category)
|
||||||
{
|
{
|
||||||
|
InputDeviceWatcher.InputDeviceCategory previousCategory = CurrentCategory;
|
||||||
CurrentCategory = category;
|
CurrentCategory = category;
|
||||||
|
OnDeviceCategoryChanged(previousCategory, category);
|
||||||
RefreshGlyph();
|
RefreshGlyph();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -29,5 +31,11 @@ public abstract class InputGlyphBehaviourBase : MonoBehaviour
|
|||||||
RefreshGlyph();
|
RefreshGlyph();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected virtual void OnDeviceCategoryChanged(
|
||||||
|
InputDeviceWatcher.InputDeviceCategory previousCategory,
|
||||||
|
InputDeviceWatcher.InputDeviceCategory newCategory)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
protected abstract void RefreshGlyph();
|
protected abstract void RefreshGlyph();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,62 +0,0 @@
|
|||||||
using UnityEngine;
|
|
||||||
using UnityEngine.InputSystem;
|
|
||||||
using UnityEngine.UI;
|
|
||||||
|
|
||||||
public sealed class InputGlyphImage : InputGlyphBehaviourBase
|
|
||||||
{
|
|
||||||
[SerializeField] private InputActionReference actionReference;
|
|
||||||
[SerializeField] private string compositePartName;
|
|
||||||
[SerializeField] private Image targetImage;
|
|
||||||
[SerializeField] private bool hideIfMissing = false;
|
|
||||||
[SerializeField] private GameObject hideTargetObject;
|
|
||||||
|
|
||||||
private Sprite _cachedSprite;
|
|
||||||
|
|
||||||
protected override void OnEnable()
|
|
||||||
{
|
|
||||||
if (targetImage == null)
|
|
||||||
{
|
|
||||||
targetImage = GetComponent<Image>();
|
|
||||||
}
|
|
||||||
|
|
||||||
base.OnEnable();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void RefreshGlyph()
|
|
||||||
{
|
|
||||||
if (actionReference == null || actionReference.action == null || targetImage == null)
|
|
||||||
{
|
|
||||||
if (targetImage != null && _cachedSprite != null)
|
|
||||||
{
|
|
||||||
_cachedSprite = null;
|
|
||||||
targetImage.sprite = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
ApplyVisibility(false);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool hasSprite = GlyphService.TryGetUISpriteForActionPath(actionReference, compositePartName, CurrentCategory, out Sprite sprite);
|
|
||||||
if (_cachedSprite != sprite)
|
|
||||||
{
|
|
||||||
_cachedSprite = sprite;
|
|
||||||
targetImage.sprite = sprite;
|
|
||||||
}
|
|
||||||
|
|
||||||
ApplyVisibility(hasSprite && sprite != null);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void ApplyVisibility(bool hasSprite)
|
|
||||||
{
|
|
||||||
if (hideTargetObject == null)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool shouldBeActive = !hideIfMissing || hasSprite;
|
|
||||||
if (hideTargetObject.activeSelf != shouldBeActive)
|
|
||||||
{
|
|
||||||
hideTargetObject.SetActive(shouldBeActive);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,3 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: 9e40d0d4d3ba4745ac9893991c94131e
|
|
||||||
timeCreated: 1764917685
|
|
||||||
@ -1,54 +0,0 @@
|
|||||||
using AlicizaX;
|
|
||||||
using TMPro;
|
|
||||||
using UnityEngine;
|
|
||||||
using UnityEngine.InputSystem;
|
|
||||||
|
|
||||||
[RequireComponent(typeof(TextMeshProUGUI))]
|
|
||||||
public sealed class InputGlyphText : InputGlyphBehaviourBase
|
|
||||||
{
|
|
||||||
[SerializeField] private InputActionReference actionReference;
|
|
||||||
[SerializeField] private string compositePartName;
|
|
||||||
|
|
||||||
private TMP_Text _textField;
|
|
||||||
private string _templateText;
|
|
||||||
private string _cachedFormattedText;
|
|
||||||
|
|
||||||
protected override void OnEnable()
|
|
||||||
{
|
|
||||||
if (_textField == null)
|
|
||||||
{
|
|
||||||
_textField = GetComponent<TMP_Text>();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (string.IsNullOrEmpty(_templateText) && _textField != null)
|
|
||||||
{
|
|
||||||
_templateText = _textField.text;
|
|
||||||
}
|
|
||||||
|
|
||||||
base.OnEnable();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void RefreshGlyph()
|
|
||||||
{
|
|
||||||
if (actionReference == null || actionReference.action == null || _textField == null)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
string formattedText;
|
|
||||||
if (GlyphService.TryGetTMPTagForActionPath(actionReference, compositePartName, CurrentCategory, out string tag, out string displayFallback))
|
|
||||||
{
|
|
||||||
formattedText = Utility.Text.Format(_templateText, tag);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
formattedText = Utility.Text.Format(_templateText, displayFallback);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_cachedFormattedText != formattedText)
|
|
||||||
{
|
|
||||||
_cachedFormattedText = formattedText;
|
|
||||||
_textField.text = formattedText;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,3 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: 215afdfefaef434db3618081810a0e3d
|
|
||||||
timeCreated: 1764917669
|
|
||||||
@ -1,65 +0,0 @@
|
|||||||
using UnityEngine;
|
|
||||||
using UnityEngine.InputSystem;
|
|
||||||
using UnityEngine.UI;
|
|
||||||
|
|
||||||
[RequireComponent(typeof(UXButton))]
|
|
||||||
public sealed class InputGlyphUXButton : InputGlyphBehaviourBase
|
|
||||||
{
|
|
||||||
[SerializeField] private UXButton button;
|
|
||||||
[SerializeField] private string compositePartName;
|
|
||||||
[SerializeField] private Image targetImage;
|
|
||||||
|
|
||||||
private Sprite _cachedSprite;
|
|
||||||
|
|
||||||
#if UNITY_EDITOR
|
|
||||||
private void OnValidate()
|
|
||||||
{
|
|
||||||
if (button == null)
|
|
||||||
{
|
|
||||||
button = GetComponent<UXButton>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
protected override void OnEnable()
|
|
||||||
{
|
|
||||||
if (button == null)
|
|
||||||
{
|
|
||||||
button = GetComponent<UXButton>();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (targetImage == null)
|
|
||||||
{
|
|
||||||
targetImage = GetComponent<Image>();
|
|
||||||
}
|
|
||||||
|
|
||||||
base.OnEnable();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void RefreshGlyph()
|
|
||||||
{
|
|
||||||
InputActionReference actionReference = button != null ? button.HotKeyRefrence : null;
|
|
||||||
if (actionReference == null || actionReference.action == null || targetImage == null)
|
|
||||||
{
|
|
||||||
if (targetImage != null && _cachedSprite != null)
|
|
||||||
{
|
|
||||||
_cachedSprite = null;
|
|
||||||
targetImage.sprite = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool hasSprite = GlyphService.TryGetUISpriteForActionPath(actionReference, compositePartName, CurrentCategory, out Sprite sprite);
|
|
||||||
if (!hasSprite)
|
|
||||||
{
|
|
||||||
sprite = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_cachedSprite != sprite)
|
|
||||||
{
|
|
||||||
_cachedSprite = sprite;
|
|
||||||
targetImage.sprite = sprite;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,3 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: f24ff96430d042109462f373aed1f2cc
|
|
||||||
timeCreated: 1765870646
|
|
||||||
@ -1,7 +1,7 @@
|
|||||||
using UnityEngine;
|
using AlicizaX.UI;
|
||||||
using UnityEngine.UI;
|
|
||||||
using TMPro;
|
using TMPro;
|
||||||
using AlicizaX.UI;
|
using UnityEngine;
|
||||||
|
using UnityEngine.UI;
|
||||||
using AlicizaX.UI.Runtime;
|
using AlicizaX.UI.Runtime;
|
||||||
namespace Game.UI
|
namespace Game.UI
|
||||||
{
|
{
|
||||||
@ -12,21 +12,33 @@ namespace Game.UI
|
|||||||
#region Generated by Script Tool
|
#region Generated by Script Tool
|
||||||
|
|
||||||
[SerializeField]
|
[SerializeField]
|
||||||
private Image mImgBackGround;
|
private UXButton mBtnETest;
|
||||||
public Image ImgBackGround => mImgBackGround;
|
public UXButton BtnETest => mBtnETest;
|
||||||
|
|
||||||
|
[SerializeField]
|
||||||
|
private UXButton mBtnEscTest;
|
||||||
|
public UXButton BtnEscTest => mBtnEscTest;
|
||||||
|
|
||||||
|
[SerializeField]
|
||||||
|
private UXButton mBtnQTest;
|
||||||
|
public UXButton BtnQTest => mBtnQTest;
|
||||||
|
|
||||||
[SerializeField]
|
[SerializeField]
|
||||||
private UXButton mBtnTest;
|
private UXButton mBtnTest;
|
||||||
public UXButton BtnTest => mBtnTest;
|
public UXButton BtnTest => mBtnTest;
|
||||||
|
|
||||||
[SerializeField]
|
[SerializeField]
|
||||||
private TextMeshProUGUI mTextTitl;
|
private UXImage mImgBackGround;
|
||||||
public TextMeshProUGUI TextTitl => mTextTitl;
|
public UXImage ImgBackGround => mImgBackGround;
|
||||||
|
|
||||||
[SerializeField]
|
[SerializeField]
|
||||||
private RecyclerView mScrollViewTestList;
|
private RecyclerView mScrollViewTestList;
|
||||||
public RecyclerView ScrollViewTestList => mScrollViewTestList;
|
public RecyclerView ScrollViewTestList => mScrollViewTestList;
|
||||||
|
|
||||||
|
[SerializeField]
|
||||||
|
private TextMeshProUGUI mTextTitl;
|
||||||
|
public TextMeshProUGUI TextTitl => mTextTitl;
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -0,0 +1,24 @@
|
|||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.UI;
|
||||||
|
using AlicizaX.UI.Runtime;
|
||||||
|
namespace Game.UI
|
||||||
|
{
|
||||||
|
[UIRes(ui_UILogicTestAlert.ResTag, EUIResLoadType.AssetBundle)]
|
||||||
|
public class ui_UILogicTestAlert : UIHolderObjectBase
|
||||||
|
{
|
||||||
|
public const string ResTag = "UILogicTestAlert";
|
||||||
|
#region Generated by Script Tool
|
||||||
|
|
||||||
|
[SerializeField]
|
||||||
|
private UXButton mBtnEscTest;
|
||||||
|
public UXButton BtnEscTest => mBtnEscTest;
|
||||||
|
|
||||||
|
[SerializeField]
|
||||||
|
private UXButton mBtnGTest;
|
||||||
|
public UXButton BtnGTest => mBtnGTest;
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 03b1a1a765ce78b4ea4ee026785671f7
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@ -6,6 +6,7 @@ using AlicizaX.UI.Runtime;
|
|||||||
using Cysharp.Threading.Tasks;
|
using Cysharp.Threading.Tasks;
|
||||||
using Game.UI;
|
using Game.UI;
|
||||||
using GameLogic.Event;
|
using GameLogic.Event;
|
||||||
|
using GameLogic.UI;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
public class TestData : ISimpleViewData
|
public class TestData : ISimpleViewData
|
||||||
@ -29,7 +30,28 @@ public class UILoadUpdate : UITabWindow<ui_UILoadUpdateWindow>
|
|||||||
{
|
{
|
||||||
testDataList.Add(new TestData() { Name = $"TestProp:{i}" });
|
testDataList.Add(new TestData() { Name = $"TestProp:{i}" });
|
||||||
}
|
}
|
||||||
|
|
||||||
_list.Data = testDataList;
|
_list.Data = testDataList;
|
||||||
|
|
||||||
|
baseui.BtnQTest.onClick.AddListener(OnBtnQTestClick);
|
||||||
|
baseui.BtnEscTest.onClick.AddListener(OnBtnEscTestClick);
|
||||||
|
baseui.BtnETest.onClick.AddListener(OnBtnETestClick);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnBtnETestClick()
|
||||||
|
{
|
||||||
|
Log.Info("Btn E Click");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnBtnEscTestClick()
|
||||||
|
{
|
||||||
|
Log.Info("Btn Esc Click");
|
||||||
|
CloseSelf();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnBtnQTestClick()
|
||||||
|
{
|
||||||
|
Log.Info("Btn Q Click");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -48,24 +70,6 @@ public class UILoadUpdate : UITabWindow<ui_UILoadUpdateWindow>
|
|||||||
|
|
||||||
private void OnTestClick()
|
private void OnTestClick()
|
||||||
{
|
{
|
||||||
// int index = Random.Range(0, 99);
|
GameApp.UI.ShowUISync<UILogicTestAlert>();
|
||||||
// Debug.Log(index);
|
|
||||||
// list.RecyclerView.ScrollTo(index, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
protected override void OnOpen()
|
|
||||||
{
|
|
||||||
Debug.Log("OnOpen");
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void OnClose()
|
|
||||||
{
|
|
||||||
Debug.Log("OnClose");
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void OnDestroy()
|
|
||||||
{
|
|
||||||
Debug.Log("OnDestroy");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,29 @@
|
|||||||
|
using AlicizaX;
|
||||||
|
using AlicizaX.UI.Runtime;
|
||||||
|
using Game.UI;
|
||||||
|
|
||||||
|
namespace GameLogic.UI
|
||||||
|
{
|
||||||
|
[UIUpdate]
|
||||||
|
[Window(UILayer.Tips, false, 3)]
|
||||||
|
public class UILogicTestAlert : UITabWindow<ui_UILogicTestAlert>
|
||||||
|
{
|
||||||
|
protected override void OnInitialize()
|
||||||
|
{
|
||||||
|
baseui.BtnEscTest.onClick.AddListener(OnBtnEscTestClick);
|
||||||
|
|
||||||
|
baseui.BtnGTest.onClick.AddListener(OnBtnGTestClick);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnBtnGTestClick()
|
||||||
|
{
|
||||||
|
Log.Info("Alert G Click");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnBtnEscTestClick()
|
||||||
|
{
|
||||||
|
Log.Info("Alert ESC Click");
|
||||||
|
CloseSelf();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 20e52127e6b741c8b3b93665f603692b
|
||||||
|
timeCreated: 1773976819
|
||||||
Binary file not shown.
@ -1 +1 @@
|
|||||||
034249e9
|
1c55ee5a
|
||||||
@ -10,7 +10,7 @@
|
|||||||
"BuildPipeline": "EditorSimulateBuildPipeline",
|
"BuildPipeline": "EditorSimulateBuildPipeline",
|
||||||
"PackageName": "DefaultPackage",
|
"PackageName": "DefaultPackage",
|
||||||
"PackageVersion": "Simulate",
|
"PackageVersion": "Simulate",
|
||||||
"PackageNote": "2026/3/11 11:40:21",
|
"PackageNote": "2026/3/20 11:28:53",
|
||||||
"AssetList": [
|
"AssetList": [
|
||||||
{
|
{
|
||||||
"Address": "Click",
|
"Address": "Click",
|
||||||
@ -54,96 +54,6 @@
|
|||||||
"BundleID": 1,
|
"BundleID": 1,
|
||||||
"DependBundleIDs": []
|
"DependBundleIDs": []
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"Address": "AlicizaX.Framework.Runtime.dll",
|
|
||||||
"AssetPath": "Assets/Bundles/DLL/AlicizaX.Framework.Runtime.dll.bytes",
|
|
||||||
"AssetGUID": "",
|
|
||||||
"AssetTags": [
|
|
||||||
"DLL"
|
|
||||||
],
|
|
||||||
"BundleID": 3,
|
|
||||||
"DependBundleIDs": []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Address": "GameBase.dll",
|
|
||||||
"AssetPath": "Assets/Bundles/DLL/GameBase.dll.bytes",
|
|
||||||
"AssetGUID": "",
|
|
||||||
"AssetTags": [
|
|
||||||
"DLL"
|
|
||||||
],
|
|
||||||
"BundleID": 3,
|
|
||||||
"DependBundleIDs": []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Address": "GameLib.dll",
|
|
||||||
"AssetPath": "Assets/Bundles/DLL/GameLib.dll.bytes",
|
|
||||||
"AssetGUID": "",
|
|
||||||
"AssetTags": [
|
|
||||||
"DLL"
|
|
||||||
],
|
|
||||||
"BundleID": 3,
|
|
||||||
"DependBundleIDs": []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Address": "GameLogic.dll",
|
|
||||||
"AssetPath": "Assets/Bundles/DLL/GameLogic.dll.bytes",
|
|
||||||
"AssetGUID": "",
|
|
||||||
"AssetTags": [
|
|
||||||
"DLL"
|
|
||||||
],
|
|
||||||
"BundleID": 3,
|
|
||||||
"DependBundleIDs": []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Address": "GameProto.dll",
|
|
||||||
"AssetPath": "Assets/Bundles/DLL/GameProto.dll.bytes",
|
|
||||||
"AssetGUID": "",
|
|
||||||
"AssetTags": [
|
|
||||||
"DLL"
|
|
||||||
],
|
|
||||||
"BundleID": 3,
|
|
||||||
"DependBundleIDs": []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Address": "mscorlib.dll",
|
|
||||||
"AssetPath": "Assets/Bundles/DLL/mscorlib.dll.bytes",
|
|
||||||
"AssetGUID": "",
|
|
||||||
"AssetTags": [
|
|
||||||
"DLL"
|
|
||||||
],
|
|
||||||
"BundleID": 3,
|
|
||||||
"DependBundleIDs": []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Address": "System.Core.dll",
|
|
||||||
"AssetPath": "Assets/Bundles/DLL/System.Core.dll.bytes",
|
|
||||||
"AssetGUID": "",
|
|
||||||
"AssetTags": [
|
|
||||||
"DLL"
|
|
||||||
],
|
|
||||||
"BundleID": 3,
|
|
||||||
"DependBundleIDs": []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Address": "UniTask.Runtime.dll",
|
|
||||||
"AssetPath": "Assets/Bundles/DLL/UniTask.Runtime.dll.bytes",
|
|
||||||
"AssetGUID": "",
|
|
||||||
"AssetTags": [
|
|
||||||
"DLL"
|
|
||||||
],
|
|
||||||
"BundleID": 3,
|
|
||||||
"DependBundleIDs": []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Address": "Unity.InputSystem.dll",
|
|
||||||
"AssetPath": "Assets/Bundles/DLL/Unity.InputSystem.dll.bytes",
|
|
||||||
"AssetGUID": "",
|
|
||||||
"AssetTags": [
|
|
||||||
"DLL"
|
|
||||||
],
|
|
||||||
"BundleID": 3,
|
|
||||||
"DependBundleIDs": []
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"Address": "Map1000",
|
"Address": "Map1000",
|
||||||
"AssetPath": "Assets/Bundles/Scenes/Map1000.unity",
|
"AssetPath": "Assets/Bundles/Scenes/Map1000.unity",
|
||||||
@ -151,7 +61,7 @@
|
|||||||
"AssetTags": [
|
"AssetTags": [
|
||||||
"Scenes"
|
"Scenes"
|
||||||
],
|
],
|
||||||
"BundleID": 4,
|
"BundleID": 3,
|
||||||
"DependBundleIDs": []
|
"DependBundleIDs": []
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -171,6 +81,16 @@
|
|||||||
"AssetTags": [
|
"AssetTags": [
|
||||||
"UI"
|
"UI"
|
||||||
],
|
],
|
||||||
|
"BundleID": 4,
|
||||||
|
"DependBundleIDs": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Address": "UILogicTestAlert",
|
||||||
|
"AssetPath": "Assets/Bundles/UI/Window/UILogicTestAlert.prefab",
|
||||||
|
"AssetGUID": "",
|
||||||
|
"AssetTags": [
|
||||||
|
"UI"
|
||||||
|
],
|
||||||
"BundleID": 5,
|
"BundleID": 5,
|
||||||
"DependBundleIDs": []
|
"DependBundleIDs": []
|
||||||
}
|
}
|
||||||
@ -214,18 +134,6 @@
|
|||||||
],
|
],
|
||||||
"DependBundleIDs": []
|
"DependBundleIDs": []
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"BundleName": "assets_bundles_dll.bundle",
|
|
||||||
"UnityCRC": 0,
|
|
||||||
"FileHash": "ba45bd2617fcfa1e64a95d7741dc8012",
|
|
||||||
"FileCRC": 0,
|
|
||||||
"FileSize": 4342272,
|
|
||||||
"Encrypted": false,
|
|
||||||
"Tags": [
|
|
||||||
"DLL"
|
|
||||||
],
|
|
||||||
"DependBundleIDs": []
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"BundleName": "assets_bundles_scenes_map1000.bundle",
|
"BundleName": "assets_bundles_scenes_map1000.bundle",
|
||||||
"UnityCRC": 0,
|
"UnityCRC": 0,
|
||||||
@ -243,7 +151,19 @@
|
|||||||
"UnityCRC": 0,
|
"UnityCRC": 0,
|
||||||
"FileHash": "82253a65841b8f1db612149ec8c9a317",
|
"FileHash": "82253a65841b8f1db612149ec8c9a317",
|
||||||
"FileCRC": 0,
|
"FileCRC": 0,
|
||||||
"FileSize": 30683,
|
"FileSize": 57247,
|
||||||
|
"Encrypted": false,
|
||||||
|
"Tags": [
|
||||||
|
"UI"
|
||||||
|
],
|
||||||
|
"DependBundleIDs": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"BundleName": "assets_bundles_ui_window_uilogictestalert.bundle",
|
||||||
|
"UnityCRC": 0,
|
||||||
|
"FileHash": "cf84038a2a1620e6ff49815bcd8e6a73",
|
||||||
|
"FileCRC": 0,
|
||||||
|
"FileSize": 21629,
|
||||||
"Encrypted": false,
|
"Encrypted": false,
|
||||||
"Tags": [
|
"Tags": [
|
||||||
"UI"
|
"UI"
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
Subproject commit a978c68586cf761c577842532dfa6af5847851a4
|
Subproject commit 4c86d6bbda4d8bd142c5952c504bbe182026ccea
|
||||||
@ -1 +1 @@
|
|||||||
Subproject commit 7b4feec0f0eb8a7af67063eda3c7a0d8d8bc2b5e
|
Subproject commit 4364f4673d24c4a27062c46526ca5f6687675f5e
|
||||||
@ -21,45 +21,47 @@ MonoBehaviour:
|
|||||||
- ViewHolder
|
- ViewHolder
|
||||||
UIElementRegexConfigs:
|
UIElementRegexConfigs:
|
||||||
- uiElementRegex: Rect
|
- uiElementRegex: Rect
|
||||||
componentType: RectTransform
|
componentType: UnityEngine.RectTransform
|
||||||
- uiElementRegex: Obj
|
- uiElementRegex: Obj
|
||||||
componentType: GameObject
|
componentType: GameObject
|
||||||
- uiElementRegex: Tf
|
- uiElementRegex: Tf
|
||||||
componentType: Transform
|
componentType: UnityEngine.Transform
|
||||||
- uiElementRegex: Btn
|
- uiElementRegex: Btn
|
||||||
componentType: UXButton
|
componentType: UnityEngine.UI.UXButton
|
||||||
- uiElementRegex: Slider
|
- uiElementRegex: Slider
|
||||||
componentType: Slider
|
componentType: UnityEngine.UI.Slider
|
||||||
- uiElementRegex: Img
|
- uiElementRegex: Img
|
||||||
componentType: UnityEngine.UI.UXImage
|
componentType: UnityEngine.UI.UXImage
|
||||||
- uiElementRegex: RImg
|
- uiElementRegex: RImg
|
||||||
componentType: RawImage
|
componentType: UnityEngine.UI.RawImage
|
||||||
- uiElementRegex: Scrollbar
|
- uiElementRegex: Scrollbar
|
||||||
componentType: Scrollbar
|
componentType: UnityEngine.UI.Scrollbar
|
||||||
- uiElementRegex: ScrollRect
|
- uiElementRegex: ScrollRect
|
||||||
componentType: ScrollRect
|
componentType: UnityEngine.UI.ScrollRect
|
||||||
- uiElementRegex: GLayout
|
- uiElementRegex: GLayout
|
||||||
componentType: GridLayoutGroup
|
componentType: UnityEngine.UI.GridLayoutGroup
|
||||||
- uiElementRegex: HLayout
|
- uiElementRegex: HLayout
|
||||||
componentType: HorizontalLayoutGroup
|
componentType: UnityEngine.UI.HorizontalLayoutGroup
|
||||||
- uiElementRegex: VLayout
|
- uiElementRegex: VLayout
|
||||||
componentType: VerticalLayoutGroup
|
componentType: UnityEngine.UI.VerticalLayoutGroup
|
||||||
- uiElementRegex: Text
|
- uiElementRegex: Text
|
||||||
componentType: TMPro.TextMeshProUGUI
|
componentType: TMPro.TextMeshProUGUI
|
||||||
- uiElementRegex: TogGroup
|
- uiElementRegex: TogGroup
|
||||||
componentType: UXGroup
|
componentType: UnityEngine.UI.UXGroup
|
||||||
- uiElementRegex: Mask2D
|
- uiElementRegex: Mask2D
|
||||||
componentType: RectMask2D
|
componentType: UnityEngine.UI.RectMask2D
|
||||||
- uiElementRegex: Video
|
- uiElementRegex: Video
|
||||||
componentType: Video.VideoPlayer
|
componentType: UnityEngine.Video.VideoPlayer
|
||||||
- uiElementRegex: Input
|
- uiElementRegex: Input
|
||||||
componentType: TMPro.TMP_InputField
|
componentType: TMPro.TMP_InputField
|
||||||
- uiElementRegex: CanvasGroup
|
- uiElementRegex: CanvasGroup
|
||||||
componentType: CanvasGroup
|
componentType: UnityEngine.CanvasGroup
|
||||||
- uiElementRegex: ScrollView
|
- uiElementRegex: ScrollView
|
||||||
componentType: RecyclerView
|
componentType: AlicizaX.UI.RecyclerView
|
||||||
- uiElementRegex: Drag
|
- uiElementRegex: Drag
|
||||||
componentType: UXDraggable
|
componentType: UnityEngine.UI.UXDraggable
|
||||||
|
- uiElementRegex: Img
|
||||||
|
componentType: UnityEngine.UI.Image
|
||||||
UIScriptGenerateConfigs:
|
UIScriptGenerateConfigs:
|
||||||
- ProjectName: MainProject
|
- ProjectName: MainProject
|
||||||
NameSpace: Game.UI
|
NameSpace: Game.UI
|
||||||
|
|||||||
@ -9,35 +9,35 @@ EditorUserSettings:
|
|||||||
value: 18134705175a055722080a3115371d4a0d55006876786860616b0471b8b07a68ffab74f9ee2a3a30300cea1a11320d0beb1a0c25f7060f494b4cc80018eb09361fc211cb1f862d19c51d19dcc413d6ade0d8ddfcddf9f4d9d29195fcfde6ebeae6f0a9c9afa6f8c5b89ff7a1aacececac4eba4d7c9d28bda
|
value: 18134705175a055722080a3115371d4a0d55006876786860616b0471b8b07a68ffab74f9ee2a3a30300cea1a11320d0beb1a0c25f7060f494b4cc80018eb09361fc211cb1f862d19c51d19dcc413d6ade0d8ddfcddf9f4d9d29195fcfde6ebeae6f0a9c9afa6f8c5b89ff7a1aacececac4eba4d7c9d28bda
|
||||||
flags: 0
|
flags: 0
|
||||||
RecentlyUsedSceneGuid-0:
|
RecentlyUsedSceneGuid-0:
|
||||||
value: 5b55075f56030d590b5d5574127707474f4f487b2d7d7f362c2c4564e1b5603e
|
|
||||||
flags: 0
|
|
||||||
RecentlyUsedSceneGuid-1:
|
|
||||||
value: 0200010555015e0a5e5f0d2341775b15414f4a7f787d22367b2d4967b4b6623c
|
value: 0200010555015e0a5e5f0d2341775b15414f4a7f787d22367b2d4967b4b6623c
|
||||||
flags: 0
|
flags: 0
|
||||||
RecentlyUsedSceneGuid-2:
|
RecentlyUsedSceneGuid-1:
|
||||||
value: 500803525d0d0f585e0a5c7046770615174e1c2c282c71347d2b4a32bbe56168
|
value: 500803525d0d0f585e0a5c7046770615174e1c2c282c71347d2b4a32bbe56168
|
||||||
flags: 0
|
flags: 0
|
||||||
RecentlyUsedSceneGuid-3:
|
RecentlyUsedSceneGuid-2:
|
||||||
value: 07570502540759090e59587047775c48414f1b7d757924687d714432e6b93561
|
value: 07570502540759090e59587047775c48414f1b7d757924687d714432e6b93561
|
||||||
flags: 0
|
flags: 0
|
||||||
RecentlyUsedSceneGuid-4:
|
RecentlyUsedSceneGuid-3:
|
||||||
value: 54010c54510c5a5f5a0a0973477b0a4414151a2b757925367a7e4a6ab1b66260
|
value: 54010c54510c5a5f5a0a0973477b0a4414151a2b757925367a7e4a6ab1b66260
|
||||||
flags: 0
|
flags: 0
|
||||||
RecentlyUsedSceneGuid-5:
|
RecentlyUsedSceneGuid-4:
|
||||||
value: 56060350000d5b5a5908597a48255a44174e4d797a7d7e6475794f61e7b3643e
|
value: 56060350000d5b5a5908597a48255a44174e4d797a7d7e6475794f61e7b3643e
|
||||||
flags: 0
|
flags: 0
|
||||||
RecentlyUsedSceneGuid-6:
|
RecentlyUsedSceneGuid-5:
|
||||||
value: 015450045700505d0f0a5f2313260a444e164b2e757b76652c2d4d32bab0313a
|
value: 015450045700505d0f0a5f2313260a444e164b2e757b76652c2d4d32bab0313a
|
||||||
flags: 0
|
flags: 0
|
||||||
RecentlyUsedSceneGuid-7:
|
RecentlyUsedSceneGuid-6:
|
||||||
value: 0606045450065e5d55575a241522064444161c797f7b7234757c4f32e1b0353d
|
value: 0606045450065e5d55575a241522064444161c797f7b7234757c4f32e1b0353d
|
||||||
flags: 0
|
flags: 0
|
||||||
RecentlyUsedSceneGuid-8:
|
RecentlyUsedSceneGuid-7:
|
||||||
value: 5a07065703500c59585e0e7748770d44444f4a737d2d7f35787d4f63e0b26668
|
value: 5a07065703500c59585e0e7748770d44444f4a737d2d7f35787d4f63e0b26668
|
||||||
flags: 0
|
flags: 0
|
||||||
RecentlyUsedSceneGuid-9:
|
RecentlyUsedSceneGuid-8:
|
||||||
value: 50500404540c580d0f0b5e7543725b44424f4c7a7b7c7734747e4f36e4b1676d
|
value: 50500404540c580d0f0b5e7543725b44424f4c7a7b7c7734747e4f36e4b1676d
|
||||||
flags: 0
|
flags: 0
|
||||||
|
RecentlyUsedSceneGuid-9:
|
||||||
|
value: 5001560504060c590f5b0f7245725a44404f1d7c297e2233787e4a36b5e4666b
|
||||||
|
flags: 0
|
||||||
vcSharedLogLevel:
|
vcSharedLogLevel:
|
||||||
value: 0d5e400f0650
|
value: 0d5e400f0650
|
||||||
flags: 0
|
flags: 0
|
||||||
|
|||||||
@ -14,8 +14,8 @@ MonoBehaviour:
|
|||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
m_PixelRect:
|
m_PixelRect:
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
x: 0
|
x: 1920
|
||||||
y: 43
|
y: 48
|
||||||
width: 1920
|
width: 1920
|
||||||
height: 997
|
height: 997
|
||||||
m_ShowMode: 4
|
m_ShowMode: 4
|
||||||
@ -41,10 +41,10 @@ MonoBehaviour:
|
|||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
x: 0
|
x: 0
|
||||||
y: 566
|
y: 566
|
||||||
width: 308
|
width: 505
|
||||||
height: 381
|
height: 381
|
||||||
m_MinSize: {x: 51, y: 71}
|
m_MinSize: {x: 50, y: 50}
|
||||||
m_MaxSize: {x: 4001, y: 4021}
|
m_MaxSize: {x: 4000, y: 4000}
|
||||||
m_ActualView: {fileID: 14}
|
m_ActualView: {fileID: 14}
|
||||||
m_Panes:
|
m_Panes:
|
||||||
- {fileID: 14}
|
- {fileID: 14}
|
||||||
@ -70,7 +70,7 @@ MonoBehaviour:
|
|||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
x: 0
|
x: 0
|
||||||
y: 0
|
y: 0
|
||||||
width: 308
|
width: 505
|
||||||
height: 947
|
height: 947
|
||||||
m_MinSize: {x: 100, y: 100}
|
m_MinSize: {x: 100, y: 100}
|
||||||
m_MaxSize: {x: 8096, y: 16192}
|
m_MaxSize: {x: 8096, y: 16192}
|
||||||
@ -174,7 +174,7 @@ MonoBehaviour:
|
|||||||
m_MinSize: {x: 400, y: 100}
|
m_MinSize: {x: 400, y: 100}
|
||||||
m_MaxSize: {x: 32384, y: 16192}
|
m_MaxSize: {x: 32384, y: 16192}
|
||||||
vertical: 0
|
vertical: 0
|
||||||
controlID: 144
|
controlID: 104
|
||||||
draggingID: 0
|
draggingID: 0
|
||||||
--- !u!114 &8
|
--- !u!114 &8
|
||||||
MonoBehaviour:
|
MonoBehaviour:
|
||||||
@ -193,7 +193,7 @@ MonoBehaviour:
|
|||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
x: 0
|
x: 0
|
||||||
y: 0
|
y: 0
|
||||||
width: 308
|
width: 505
|
||||||
height: 566
|
height: 566
|
||||||
m_MinSize: {x: 201, y: 221}
|
m_MinSize: {x: 201, y: 221}
|
||||||
m_MaxSize: {x: 4001, y: 4021}
|
m_MaxSize: {x: 4001, y: 4021}
|
||||||
@ -219,9 +219,9 @@ MonoBehaviour:
|
|||||||
- {fileID: 11}
|
- {fileID: 11}
|
||||||
m_Position:
|
m_Position:
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
x: 308
|
x: 505
|
||||||
y: 0
|
y: 0
|
||||||
width: 387
|
width: 223
|
||||||
height: 947
|
height: 947
|
||||||
m_MinSize: {x: 100, y: 100}
|
m_MinSize: {x: 100, y: 100}
|
||||||
m_MaxSize: {x: 8096, y: 16192}
|
m_MaxSize: {x: 8096, y: 16192}
|
||||||
@ -245,10 +245,10 @@ MonoBehaviour:
|
|||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
x: 0
|
x: 0
|
||||||
y: 0
|
y: 0
|
||||||
width: 387
|
width: 223
|
||||||
height: 409
|
height: 409
|
||||||
m_MinSize: {x: 202, y: 221}
|
m_MinSize: {x: 200, y: 200}
|
||||||
m_MaxSize: {x: 4002, y: 4021}
|
m_MaxSize: {x: 4000, y: 4000}
|
||||||
m_ActualView: {fileID: 17}
|
m_ActualView: {fileID: 17}
|
||||||
m_Panes:
|
m_Panes:
|
||||||
- {fileID: 17}
|
- {fileID: 17}
|
||||||
@ -271,10 +271,10 @@ MonoBehaviour:
|
|||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
x: 0
|
x: 0
|
||||||
y: 409
|
y: 409
|
||||||
width: 387
|
width: 223
|
||||||
height: 538
|
height: 538
|
||||||
m_MinSize: {x: 102, y: 121}
|
m_MinSize: {x: 100, y: 100}
|
||||||
m_MaxSize: {x: 4002, y: 4021}
|
m_MaxSize: {x: 4000, y: 4000}
|
||||||
m_ActualView: {fileID: 18}
|
m_ActualView: {fileID: 18}
|
||||||
m_Panes:
|
m_Panes:
|
||||||
- {fileID: 18}
|
- {fileID: 18}
|
||||||
@ -295,9 +295,9 @@ MonoBehaviour:
|
|||||||
m_Children: []
|
m_Children: []
|
||||||
m_Position:
|
m_Position:
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
x: 695
|
x: 728
|
||||||
y: 0
|
y: 0
|
||||||
width: 607
|
width: 574
|
||||||
height: 947
|
height: 947
|
||||||
m_MinSize: {x: 232, y: 271}
|
m_MinSize: {x: 232, y: 271}
|
||||||
m_MaxSize: {x: 10002, y: 10021}
|
m_MaxSize: {x: 10002, y: 10021}
|
||||||
@ -352,9 +352,9 @@ MonoBehaviour:
|
|||||||
m_Tooltip:
|
m_Tooltip:
|
||||||
m_Pos:
|
m_Pos:
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
x: 0
|
x: 1920
|
||||||
y: 639
|
y: 644
|
||||||
width: 307
|
width: 504
|
||||||
height: 360
|
height: 360
|
||||||
m_SerializedDataModeController:
|
m_SerializedDataModeController:
|
||||||
m_DataMode: 0
|
m_DataMode: 0
|
||||||
@ -380,7 +380,7 @@ MonoBehaviour:
|
|||||||
m_UseMipMap: 0
|
m_UseMipMap: 0
|
||||||
m_VSyncEnabled: 0
|
m_VSyncEnabled: 0
|
||||||
m_Gizmos: 0
|
m_Gizmos: 0
|
||||||
m_Stats: 1
|
m_Stats: 0
|
||||||
m_SelectedSizes: 03000000000000000000000000000000000000000000000000000000000000000000000000000000
|
m_SelectedSizes: 03000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||||
m_ZoomArea:
|
m_ZoomArea:
|
||||||
m_HRangeLocked: 0
|
m_HRangeLocked: 0
|
||||||
@ -408,23 +408,23 @@ MonoBehaviour:
|
|||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
x: 0
|
x: 0
|
||||||
y: 21
|
y: 21
|
||||||
width: 307
|
width: 504
|
||||||
height: 339
|
height: 339
|
||||||
m_Scale: {x: 0.15989584, y: 0.15989585}
|
m_Scale: {x: 0.2625, y: 0.2625}
|
||||||
m_Translation: {x: 153.5, y: 169.5}
|
m_Translation: {x: 252, y: 169.5}
|
||||||
m_MarginLeft: 0
|
m_MarginLeft: 0
|
||||||
m_MarginRight: 0
|
m_MarginRight: 0
|
||||||
m_MarginTop: 0
|
m_MarginTop: 0
|
||||||
m_MarginBottom: 0
|
m_MarginBottom: 0
|
||||||
m_LastShownAreaInsideMargins:
|
m_LastShownAreaInsideMargins:
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
x: -960
|
x: -960.00006
|
||||||
y: -1060.0651
|
y: -645.7143
|
||||||
width: 1920
|
width: 1920.0001
|
||||||
height: 2120.1301
|
height: 1291.4286
|
||||||
m_MinimalGUI: 1
|
m_MinimalGUI: 1
|
||||||
m_defaultScale: 0.15989584
|
m_defaultScale: 0.2625
|
||||||
m_LastWindowPixelSize: {x: 307, y: 360}
|
m_LastWindowPixelSize: {x: 504, y: 360}
|
||||||
m_ClearInEditMode: 1
|
m_ClearInEditMode: 1
|
||||||
m_NoCameraWarning: 1
|
m_NoCameraWarning: 1
|
||||||
m_LowResolutionForAspectRatios: 01000000000000000000
|
m_LowResolutionForAspectRatios: 01000000000000000000
|
||||||
@ -520,9 +520,9 @@ MonoBehaviour:
|
|||||||
m_Tooltip:
|
m_Tooltip:
|
||||||
m_Pos:
|
m_Pos:
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
x: 0
|
x: 1920
|
||||||
y: 73
|
y: 78
|
||||||
width: 307
|
width: 504
|
||||||
height: 545
|
height: 545
|
||||||
m_SerializedDataModeController:
|
m_SerializedDataModeController:
|
||||||
m_DataMode: 0
|
m_DataMode: 0
|
||||||
@ -1066,7 +1066,7 @@ MonoBehaviour:
|
|||||||
m_Position:
|
m_Position:
|
||||||
m_Target: {x: 1000, y: 1000, z: 100}
|
m_Target: {x: 1000, y: 1000, z: 100}
|
||||||
speed: 2
|
speed: 2
|
||||||
m_Value: {x: 1000, y: 1000, z: 100}
|
m_Value: {x: 0, y: 0, z: 0}
|
||||||
m_RenderMode: 0
|
m_RenderMode: 0
|
||||||
m_CameraMode:
|
m_CameraMode:
|
||||||
drawMode: 0
|
drawMode: 0
|
||||||
@ -1104,7 +1104,7 @@ MonoBehaviour:
|
|||||||
m_Fade:
|
m_Fade:
|
||||||
m_Target: 0
|
m_Target: 0
|
||||||
speed: 2
|
speed: 2
|
||||||
m_Value: 0
|
m_Value: 1
|
||||||
m_Color: {r: 0.5, g: 0.5, b: 0.5, a: 0.4}
|
m_Color: {r: 0.5, g: 0.5, b: 0.5, a: 0.4}
|
||||||
m_Pivot: {x: 0, y: 0, z: 0}
|
m_Pivot: {x: 0, y: 0, z: 0}
|
||||||
m_Size: {x: 1, y: 1}
|
m_Size: {x: 1, y: 1}
|
||||||
@ -1114,11 +1114,11 @@ MonoBehaviour:
|
|||||||
m_Rotation:
|
m_Rotation:
|
||||||
m_Target: {x: -0.21037178, y: -0.10913931, z: 0.02363893, w: -0.97122556}
|
m_Target: {x: -0.21037178, y: -0.10913931, z: 0.02363893, w: -0.97122556}
|
||||||
speed: 2
|
speed: 2
|
||||||
m_Value: {x: -0.2103712, y: -0.10913901, z: 0.023638865, w: -0.9712229}
|
m_Value: {x: 0, y: 0, z: 0, w: 1}
|
||||||
m_Size:
|
m_Size:
|
||||||
m_Target: 0.7536363
|
m_Target: 0.7536363
|
||||||
speed: 2
|
speed: 2
|
||||||
m_Value: 0.7536363
|
m_Value: 10
|
||||||
m_Ortho:
|
m_Ortho:
|
||||||
m_Target: 0
|
m_Target: 0
|
||||||
speed: 2
|
speed: 2
|
||||||
@ -1163,9 +1163,9 @@ MonoBehaviour:
|
|||||||
m_Tooltip:
|
m_Tooltip:
|
||||||
m_Pos:
|
m_Pos:
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
x: 308
|
x: 2425
|
||||||
y: 73
|
y: 78
|
||||||
width: 385
|
width: 221
|
||||||
height: 388
|
height: 388
|
||||||
m_SerializedDataModeController:
|
m_SerializedDataModeController:
|
||||||
m_DataMode: 0
|
m_DataMode: 0
|
||||||
@ -1180,9 +1180,9 @@ MonoBehaviour:
|
|||||||
m_SceneHierarchy:
|
m_SceneHierarchy:
|
||||||
m_TreeViewState:
|
m_TreeViewState:
|
||||||
scrollPos: {x: 0, y: 0}
|
scrollPos: {x: 0, y: 0}
|
||||||
m_SelectedIDs: 02200000
|
m_SelectedIDs:
|
||||||
m_LastClickedID: 0
|
m_LastClickedID: 0
|
||||||
m_ExpandedIDs: aebbfffff2d0fffffad0fffffcd0ffff26fbffff28fbffff
|
m_ExpandedIDs: ccf9ffff
|
||||||
m_RenameOverlay:
|
m_RenameOverlay:
|
||||||
m_UserAcceptedRename: 0
|
m_UserAcceptedRename: 0
|
||||||
m_Name:
|
m_Name:
|
||||||
@ -1226,9 +1226,9 @@ MonoBehaviour:
|
|||||||
m_Tooltip:
|
m_Tooltip:
|
||||||
m_Pos:
|
m_Pos:
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
x: 308
|
x: 2425
|
||||||
y: 482
|
y: 487
|
||||||
width: 385
|
width: 221
|
||||||
height: 517
|
height: 517
|
||||||
m_SerializedDataModeController:
|
m_SerializedDataModeController:
|
||||||
m_DataMode: 0
|
m_DataMode: 0
|
||||||
@ -1260,9 +1260,9 @@ MonoBehaviour:
|
|||||||
m_Tooltip:
|
m_Tooltip:
|
||||||
m_Pos:
|
m_Pos:
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
x: 695
|
x: 2648
|
||||||
y: 73
|
y: 78
|
||||||
width: 605
|
width: 572
|
||||||
height: 926
|
height: 926
|
||||||
m_SerializedDataModeController:
|
m_SerializedDataModeController:
|
||||||
m_DataMode: 0
|
m_DataMode: 0
|
||||||
@ -1285,7 +1285,7 @@ MonoBehaviour:
|
|||||||
m_SkipHidden: 0
|
m_SkipHidden: 0
|
||||||
m_SearchArea: 2
|
m_SearchArea: 2
|
||||||
m_Folders:
|
m_Folders:
|
||||||
- Assets/Scripts/Hotfix/GameLogic
|
- Packages/com.alicizax.unity.framework
|
||||||
m_Globs: []
|
m_Globs: []
|
||||||
m_OriginalText:
|
m_OriginalText:
|
||||||
m_ImportLogFlags: 0
|
m_ImportLogFlags: 0
|
||||||
@ -1301,7 +1301,7 @@ MonoBehaviour:
|
|||||||
scrollPos: {x: 0, y: 0}
|
scrollPos: {x: 0, y: 0}
|
||||||
m_SelectedIDs: e48c0000
|
m_SelectedIDs: e48c0000
|
||||||
m_LastClickedID: 36068
|
m_LastClickedID: 36068
|
||||||
m_ExpandedIDs: 000000007e0200008c0d0000246c00008a6d00008c6d00008e6d0000906d0000926d0000946d0000966d0000986d00009a6d00009c6d00009e6d0000a06d0000a26d0000a46d0000a66d0000a86d0000aa6d0000ac6d0000ae6d0000b06d0000b26d0000b46d0000b66d0000b86d0000ba6d0000bc6d0000be6d0000c06d0000c26d0000c46d0000c66d0000c86d0000ca6d0000cc6d0000ce6d0000d06d0000d26d0000d46d0000d66d0000d86d0000da6d0000dc6d0000de6d0000e06d0000e26d0000e46d0000e66d0000e86d0000ea6d0000ec6d0000ee6d0000f06d0000f26d0000f46d0000f66d0000f86d0000fa6d0000fc6d0000fe6d0000006e0000
|
m_ExpandedIDs: 000000007e020000020d0000ec6a0000ee6a0000f06a0000f26a0000f46a0000f66a0000f86a0000fa6a0000fc6a0000fe6a0000006b0000026b0000046b0000066b0000086b00000a6b00000c6b00000e6b0000106b0000126b0000146b0000166b0000186b00001a6b00001c6b00001e6b0000206b0000226b0000246b0000266b0000286b00002a6b00002c6b00002e6b0000306b0000326b0000346b0000366b0000386b00003a6b00003c6b00003e6b0000406b0000426b0000446b0000466b0000486b00004a6b00004c6b00004e6b0000506b0000526b0000546b0000566b0000586b00005a6b00005c6b00005e6b0000606b0000626b0000646b0000666b0000686b00006a6b00006c6b00006e6b0000706b0000726b0000746b0000766b0000786b0000
|
||||||
m_RenameOverlay:
|
m_RenameOverlay:
|
||||||
m_UserAcceptedRename: 0
|
m_UserAcceptedRename: 0
|
||||||
m_Name:
|
m_Name:
|
||||||
@ -1329,21 +1329,21 @@ MonoBehaviour:
|
|||||||
scrollPos: {x: 0, y: 0}
|
scrollPos: {x: 0, y: 0}
|
||||||
m_SelectedIDs:
|
m_SelectedIDs:
|
||||||
m_LastClickedID: 0
|
m_LastClickedID: 0
|
||||||
m_ExpandedIDs: ffffffff000000007e0200008c0d00008a6d00008c6d00008e6d0000906d0000926d0000966d0000986d00009a6d00009c6d00009e6d0000a06d0000a26d0000a46d0000a66d0000a86d0000aa6d0000ac6d0000ae6d0000b06d0000b26d0000b46d0000b66d0000ba6d0000bc6d0000be6d0000c06d0000c26d0000c46d0000c66d0000c86d0000ca6d0000cc6d0000ce6d0000d06d0000d26d0000d46d0000d66d0000d86d0000da6d0000e46d0000e66d0000e86d0000ea6d0000ec6d0000ee6d0000f06d0000f26d0000f66d0000f86d0000fc6d0000fe6d0000006e0000be6f0000c06f0000187000001a7000001c7000006a700000207100003c7100007a7100007c7100007e71000080710000b2710000c472000060730000267400004a750000dc75000032770000
|
m_ExpandedIDs: ffffffff000000007e020000020d0000ec6a0000ee6a0000f06a0000f26a0000f46a0000f66a0000f86a0000fc6a0000fe6a0000006b0000026b0000046b0000066b0000086b00000a6b00000c6b00000e6b0000106b0000126b0000146b0000166b0000186b00001a6b00001c6b00001e6b0000206b0000226b0000246b0000266b0000286b00002a6b00002c6b00002e6b0000306b0000326b0000346b0000386b00003c6b00003e6b0000406b0000426b0000446b0000466b00004a6b00004c6b0000506b0000526b0000566b00005a6b00005c6b00005e6b0000606b0000626b0000646b0000666b0000686b00006a6b00006c6b00006e6b0000706b0000726b0000746b0000766b0000786b00006c6d00006e6d0000706d0000766d0000c86d0000
|
||||||
m_RenameOverlay:
|
m_RenameOverlay:
|
||||||
m_UserAcceptedRename: 0
|
m_UserAcceptedRename: 0
|
||||||
m_Name:
|
m_Name: ProcedureEntryState
|
||||||
m_OriginalName:
|
m_OriginalName: ProcedureEntryState
|
||||||
m_EditFieldRect:
|
m_EditFieldRect:
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
x: 0
|
x: 0
|
||||||
y: 0
|
y: 0
|
||||||
width: 0
|
width: 0
|
||||||
height: 0
|
height: 0
|
||||||
m_UserData: 0
|
m_UserData: 3678
|
||||||
m_IsWaitingForDelay: 0
|
m_IsWaitingForDelay: 0
|
||||||
m_IsRenaming: 0
|
m_IsRenaming: 0
|
||||||
m_OriginalEventType: 11
|
m_OriginalEventType: 0
|
||||||
m_IsRenamingFilename: 1
|
m_IsRenamingFilename: 1
|
||||||
m_ClientGUIView: {fileID: 12}
|
m_ClientGUIView: {fileID: 12}
|
||||||
m_SearchString:
|
m_SearchString:
|
||||||
@ -1405,8 +1405,8 @@ MonoBehaviour:
|
|||||||
m_Tooltip:
|
m_Tooltip:
|
||||||
m_Pos:
|
m_Pos:
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
x: 1302
|
x: 3222
|
||||||
y: 73
|
y: 78
|
||||||
width: 617
|
width: 617
|
||||||
height: 926
|
height: 926
|
||||||
m_SerializedDataModeController:
|
m_SerializedDataModeController:
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user