Compare commits

..

No commits in common. "b8aee17f11aea50fff67bfdb8b829da474909f13" and "7b32b87ec74d2de9963b08e2890b20f9edd6ee4a" have entirely different histories.

45 changed files with 1238 additions and 4103 deletions

File diff suppressed because it is too large Load Diff

View File

@ -1,720 +0,0 @@
%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

View File

@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 6c71b0671f6a82747a5405628e110163
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,16 +0,0 @@
%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}

View File

@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: e43c1733d8e85a5419c0754bbd597e3b
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,233 +0,0 @@
{
"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": []
}

View File

@ -1,14 +0,0 @@
fileFormatVersion: 2
guid: b603efb45eabf544d9f962c635627a64
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 8404be70184654265930450def6a9037, type: 3}
generateWrapperCode: 0
wrapperCodePath:
wrapperClassName:
wrapperCodeNamespace:

View File

@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: bb7e653c16f0005419e1eb9226655176
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: 096043edb2be8224f8564b40992f588b
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,303 +0,0 @@
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
};
}
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 72d9df70bb4f43f6a73be92b5f332871
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,5 +1,4 @@
using System;
using System.Collections.Generic;
using System;
using UnityEngine;
using UnityEngine.InputSystem;
@ -10,8 +9,6 @@ public static class GlyphService
private static readonly string[] PlayStationGroupHints = { "playstation", "dualshock", "dualsense", "gamepad", "controller" };
private static readonly string[] OtherGamepadGroupHints = { "gamepad", "controller", "joystick" };
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;
@ -105,7 +102,7 @@ public static class GlyphService
return false;
}
tag = GetSpriteTag(sprite);
tag = $"<sprite name=\"{sprite.name}\">";
return true;
}
@ -141,21 +138,14 @@ public static class GlyphService
return string.Empty;
}
if (DisplayNameCache.TryGetValue(controlPath, out string cachedDisplayName))
{
return cachedDisplayName;
}
string humanReadable = InputControlPath.ToHumanReadableString(controlPath, InputControlPath.HumanReadableStringOptions.OmitDevice);
if (!string.IsNullOrWhiteSpace(humanReadable))
{
DisplayNameCache[controlPath] = humanReadable;
return humanReadable;
}
int separatorIndex = controlPath.LastIndexOf('/');
string last = (separatorIndex >= 0 ? controlPath.Substring(separatorIndex + 1) : controlPath).Trim(TrimChars);
DisplayNameCache[controlPath] = last;
string[] parts = controlPath.Split('/');
string last = parts[parts.Length - 1].Trim(TrimChars);
return last;
}
@ -247,102 +237,19 @@ public static class GlyphService
}
string[] hints = GetGroupHints(category);
int tokenStart = 0;
for (int i = 0; i <= groups.Length; i++)
string[] tokens = groups.Split(InputBinding.Separator);
for (int i = 0; i < tokens.Length; i++)
{
if (i < groups.Length && groups[i] != InputBinding.Separator)
{
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);
string token = tokens[i].Trim();
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 false;
}
private static bool StartsWithDevice(string path, string deviceTag)
{
return path.StartsWith(deviceTag, StringComparison.OrdinalIgnoreCase);
}
private static string[] GetGroupHints(InputDeviceWatcher.InputDeviceCategory category)
{
switch (category)
{
case InputDeviceWatcher.InputDeviceCategory.Keyboard:
return KeyboardGroupHints;
case InputDeviceWatcher.InputDeviceCategory.Xbox:
return XboxGroupHints;
case InputDeviceWatcher.InputDeviceCategory.PlayStation:
return PlayStationGroupHints;
default:
return OtherGamepadGroupHints;
}
}
private static string GetEffectivePath(InputBinding binding)
{
return string.IsNullOrWhiteSpace(binding.effectivePath) ? binding.path : binding.effectivePath;
}
private static bool MatchesControlPath(string path, InputDeviceWatcher.InputDeviceCategory category)
{
if (string.IsNullOrWhiteSpace(path))
@ -363,4 +270,46 @@ public static class GlyphService
}
}
private static bool StartsWithDevice(string path, string deviceTag)
{
return path.StartsWith(deviceTag, StringComparison.OrdinalIgnoreCase);
}
private static string[] GetGroupHints(InputDeviceWatcher.InputDeviceCategory category)
{
switch (category)
{
case InputDeviceWatcher.InputDeviceCategory.Keyboard:
return KeyboardGroupHints;
case InputDeviceWatcher.InputDeviceCategory.Xbox:
return XboxGroupHints;
case InputDeviceWatcher.InputDeviceCategory.PlayStation:
return PlayStationGroupHints;
default:
return OtherGamepadGroupHints;
}
}
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)
{
return string.IsNullOrWhiteSpace(binding.effectivePath) ? binding.path : binding.effectivePath;
}
}

View File

@ -6,6 +6,7 @@ using UnityEngine.InputSystem;
/// <summary>
/// 输入读取工具。
/// 负责运行时输入轮询、单次触发和切换态管理,
/// 与 InputBindingManager 的绑定/重绑定职责分离。
/// </summary>
public static class InputActionReader
{

View File

@ -95,7 +95,7 @@ public class InputBindingManager : MonoSingleton<InputBindingManager>
if (actions == null)
{
Log.Error("InputBindingManager: InputActionAsset not assigned.");
Debug.LogError("InputBindingManager: InputActionAsset not assigned.");
return;
}
@ -107,7 +107,7 @@ public class InputBindingManager : MonoSingleton<InputBindingManager>
}
catch (Exception ex)
{
Log.Warning($"[InputBindingManager] Failed to save default bindings: {ex.Message}");
Debug.LogWarning($"[InputBindingManager] Failed to save default bindings: {ex.Message}");
defaultBindingsJson = string.Empty;
}
@ -123,13 +123,13 @@ public class InputBindingManager : MonoSingleton<InputBindingManager>
BindingsChanged?.Invoke();
if (debugMode)
{
Log.Info($"Loaded overrides from {SavePath}");
Debug.Log($"Loaded overrides from {SavePath}");
}
}
}
catch (Exception ex)
{
Log.Error("Failed to load overrides: " + ex);
Debug.LogError("Failed to load overrides: " + ex);
}
}
@ -193,7 +193,7 @@ public class InputBindingManager : MonoSingleton<InputBindingManager>
{
actionLookup.Remove(actionName);
ambiguousActionNames.Add(actionName);
Log.Warning($"[InputBindingManager] Duplicate action name '{actionName}' detected. Use 'MapName/{actionName}' to resolve it.");
Debug.LogWarning($"[InputBindingManager] Duplicate action name '{actionName}' detected. Use 'MapName/{actionName}' to resolve it.");
}
return;
@ -268,6 +268,7 @@ public class InputBindingManager : MonoSingleton<InputBindingManager>
action.name,
binding.name,
bindingIndex,
binding.groups?.Split(InputBinding.Separator) ?? Array.Empty<string>(),
new BindingPath(binding.path, binding.overridePath),
binding
));
@ -280,16 +281,18 @@ public class InputBindingManager : MonoSingleton<InputBindingManager>
public readonly string parentAction;
public readonly string compositePart;
public readonly int bindingIndex;
public readonly string[] group;
public readonly BindingPath bindingPath;
public readonly InputBinding inputBinding;
public Binding(string name, string parentAction, string compositePart, int bindingIndex,
BindingPath bindingPath, InputBinding inputBinding)
string[] group, BindingPath bindingPath, InputBinding inputBinding)
{
this.name = name;
this.parentAction = parentAction;
this.compositePart = compositePart;
this.bindingIndex = bindingIndex;
this.group = group;
this.bindingPath = bindingPath;
this.inputBinding = inputBinding;
}
@ -398,11 +401,11 @@ public class InputBindingManager : MonoSingleton<InputBindingManager>
if (instance.ambiguousActionNames.Contains(actionName))
{
Log.Error($"[InputBindingManager] Action name '{actionName}' is ambiguous. Use 'MapName/{actionName}' instead.");
Debug.LogError($"[InputBindingManager] Action name '{actionName}' is ambiguous. Use 'MapName/{actionName}' instead.");
return null;
}
Log.Error($"[InputBindingManager] Could not find action '{actionName}'");
Debug.LogError($"[InputBindingManager] Could not find action '{actionName}'");
return null;
}
@ -439,7 +442,7 @@ public class InputBindingManager : MonoSingleton<InputBindingManager>
int bindingIndex = Instance.FindBestBindingIndexForKeyboard(action, compositePartName);
if (bindingIndex < 0)
{
Log.Error($"[InputBindingManager] No suitable binding found for action '{actionName}' (part={compositePartName ?? "<null>"})");
Debug.LogError($"[InputBindingManager] No suitable binding found for action '{actionName}' (part={compositePartName ?? "<null>"})");
return;
}
@ -448,7 +451,7 @@ public class InputBindingManager : MonoSingleton<InputBindingManager>
Instance.OnRebindStart?.Invoke();
if (Instance.debugMode)
{
Log.Info("[InputBindingManager] Rebind started");
Debug.Log("[InputBindingManager] Rebind started");
}
}
@ -469,9 +472,7 @@ public class InputBindingManager : MonoSingleton<InputBindingManager>
try
{
// 在清除之前创建准备好的重绑定的副本
HashSet<RebindContext> appliedContexts = Instance.OnApply != null
? new HashSet<RebindContext>(Instance.preparedRebinds)
: null;
var appliedContexts = new HashSet<RebindContext>(Instance.preparedRebinds);
foreach (var ctx in Instance.preparedRebinds)
{
@ -501,15 +502,15 @@ public class InputBindingManager : MonoSingleton<InputBindingManager>
Instance.isApplyPending = false;
if (Instance.debugMode)
{
Log.Info("[InputBindingManager] Apply confirmed and saved.");
Debug.Log("[InputBindingManager] Apply confirmed and saved.");
}
return true;
}
catch (Exception ex)
{
Log.Error("[InputBindingManager] Failed to apply binds: " + ex);
Instance.OnApply?.Invoke(false, null);
Debug.LogError("[InputBindingManager] Failed to apply binds: " + ex);
Instance.OnApply?.Invoke(false, new HashSet<RebindContext>());
return false;
}
}
@ -522,16 +523,14 @@ public class InputBindingManager : MonoSingleton<InputBindingManager>
if (!Instance.isApplyPending) return;
// 在清除之前创建准备好的重绑定的副本(用于事件通知)
HashSet<RebindContext> discardedContexts = Instance.OnApply != null
? new HashSet<RebindContext>(Instance.preparedRebinds)
: null;
var discardedContexts = new HashSet<RebindContext>(Instance.preparedRebinds);
Instance.preparedRebinds.Clear();
Instance.isApplyPending = false;
Instance.OnApply?.Invoke(false, discardedContexts);
if (Instance.debugMode)
{
Log.Info("[InputBindingManager] Prepared rebinds discarded.");
Debug.Log("[InputBindingManager] Prepared rebinds discarded.");
}
}
@ -555,30 +554,28 @@ public class InputBindingManager : MonoSingleton<InputBindingManager>
rebindOperation = op
.OnApplyBinding((o, path) =>
{
RebindContext preparedContext = new RebindContext(action, bindingIndex, path);
if (AnyPreparedRebind(path, action, bindingIndex, out var existing))
{
PrepareRebind(preparedContext);
PrepareRebind(new RebindContext(action, bindingIndex, path));
PrepareRebind(new RebindContext(existing.action, existing.bindingIndex, NULL_BINDING));
OnRebindConflict?.Invoke(preparedContext, existing);
OnRebindConflict?.Invoke(new RebindContext(action, bindingIndex, path), existing);
}
else if (AnyBindingPath(path, action, bindingIndex, out var dup))
{
RebindContext conflictingContext = new RebindContext(dup.action, dup.bindingIndex, dup.action.bindings[dup.bindingIndex].path);
PrepareRebind(preparedContext);
PrepareRebind(new RebindContext(action, bindingIndex, path));
PrepareRebind(new RebindContext(dup.action, dup.bindingIndex, NULL_BINDING));
OnRebindConflict?.Invoke(preparedContext, conflictingContext);
OnRebindConflict?.Invoke(new RebindContext(action, bindingIndex, path), new RebindContext(dup.action, dup.bindingIndex, dup.action.bindings[dup.bindingIndex].path));
}
else
{
PrepareRebind(preparedContext);
PrepareRebind(new RebindContext(action, bindingIndex, path));
}
})
.OnComplete(opc =>
{
if (debugMode)
{
Log.Info("[InputBindingManager] Rebind completed");
Debug.Log("[InputBindingManager] Rebind completed");
}
actions.Enable();
@ -589,7 +586,7 @@ public class InputBindingManager : MonoSingleton<InputBindingManager>
{
if (debugMode)
{
Log.Info("[InputBindingManager] Rebind cancelled");
Debug.Log("[InputBindingManager] Rebind cancelled");
}
actions.Enable();
@ -650,17 +647,18 @@ public class InputBindingManager : MonoSingleton<InputBindingManager>
private void PrepareRebind(RebindContext context)
{
// Remove any existing prepared state for the same action/binding pair.
// 如果存在相同操作/绑定的现有重绑定,则移除
preparedRebinds.Remove(context);
BindingPath bindingPath = GetBindingPath(context.action, context.bindingIndex);
if (bindingPath == null) return;
if (string.IsNullOrEmpty(context.overridePath))
{
context.overridePath = bindingPath.bindingPath;
var bp = GetBindingPath(context.action, context.bindingIndex);
if (bp != null) context.overridePath = bp.bindingPath;
}
var bindingPath = GetBindingPath(context.action, context.bindingIndex);
if (bindingPath == null) return;
if (bindingPath.EffectivePath != context.overridePath)
{
preparedRebinds.Add(context);
@ -668,7 +666,7 @@ public class InputBindingManager : MonoSingleton<InputBindingManager>
OnRebindPrepare?.Invoke(context);
if (debugMode)
{
Log.Info($"Prepared rebind: {context} -> {context.overridePath}");
Debug.Log($"Prepared rebind: {context} -> {context.overridePath}");
}
}
}
@ -682,12 +680,12 @@ public class InputBindingManager : MonoSingleton<InputBindingManager>
using (var sw = new StreamWriter(SavePath, false)) await sw.WriteAsync(json);
if (debugMode)
{
Log.Info($"Overrides saved to {SavePath}");
Debug.Log($"Overrides saved to {SavePath}");
}
}
catch (Exception ex)
{
Log.Error("Failed to save overrides: " + ex);
Debug.LogError("Failed to save overrides: " + ex);
throw;
}
}
@ -722,12 +720,12 @@ public class InputBindingManager : MonoSingleton<InputBindingManager>
BindingsChanged?.Invoke();
if (debugMode)
{
Log.Info("Reset to default and saved.");
Debug.Log("Reset to default and saved.");
}
}
catch (Exception ex)
{
Log.Error("Failed to reset defaults: " + ex);
Debug.LogError("Failed to reset defaults: " + ex);
}
}

View File

@ -1,5 +1,4 @@
using System;
using System.Collections.Generic;
using System;
#if UNITY_EDITOR
using UnityEditor;
#endif
@ -94,7 +93,6 @@ public static class InputDeviceWatcher
private static InputAction _anyInputAction;
private static float _lastSwitchTime = -Mathf.Infinity;
private static DeviceContext _lastEmittedContext = CreateDefaultContext();
private static readonly Dictionary<int, DeviceContext> DeviceContextCache = new();
private static bool _initialized;
public static event Action<InputDeviceCategory> OnDeviceChanged;
@ -114,10 +112,10 @@ public static class InputDeviceWatcher
_anyInputAction = new InputAction("AnyDevice", InputActionType.PassThrough);
_anyInputAction.AddBinding("<Keyboard>/anyKey");
// _anyInputAction.AddBinding("<Mouse>/leftButton");
// _anyInputAction.AddBinding("<Mouse>/rightButton");
// _anyInputAction.AddBinding("<Mouse>/middleButton");
// _anyInputAction.AddBinding("<Mouse>/scroll");
_anyInputAction.AddBinding("<Mouse>/leftButton");
_anyInputAction.AddBinding("<Mouse>/rightButton");
_anyInputAction.AddBinding("<Mouse>/middleButton");
_anyInputAction.AddBinding("<Mouse>/scroll");
_anyInputAction.AddBinding("<Gamepad>/*");
_anyInputAction.AddBinding("<Joystick>/*");
_anyInputAction.performed += OnAnyInputPerformed;
@ -156,7 +154,6 @@ public static class InputDeviceWatcher
}
InputSystem.onDeviceChange -= OnDeviceChange;
DeviceContextCache.Clear();
ApplyContext(CreateDefaultContext(), false);
_lastEmittedContext = CurrentContext;
@ -174,13 +171,7 @@ public static class InputDeviceWatcher
return;
}
InputDevice device = control.device;
if (device == null || device.deviceId == CurrentDeviceId)
{
return;
}
DeviceContext deviceContext = BuildContext(device);
DeviceContext deviceContext = BuildContext(control.device);
if (deviceContext.DeviceId == CurrentDeviceId)
{
return;
@ -207,7 +198,6 @@ public static class InputDeviceWatcher
{
case InputDeviceChange.Removed:
case InputDeviceChange.Disconnected:
DeviceContextCache.Remove(device.deviceId);
if (device.deviceId == CurrentDeviceId)
{
PromoteFallbackDevice(device.deviceId);
@ -215,7 +205,6 @@ public static class InputDeviceWatcher
break;
case InputDeviceChange.Reconnected:
case InputDeviceChange.Added:
DeviceContextCache.Remove(device.deviceId);
if (CurrentDeviceId < 0 && IsRelevantDevice(device))
{
SetCurrentContext(BuildContext(device));
@ -282,22 +271,15 @@ public static class InputDeviceWatcher
return CreateDefaultContext();
}
if (DeviceContextCache.TryGetValue(device.deviceId, out DeviceContext cachedContext))
{
return cachedContext;
}
TryParseVendorProductIds(device.description.capabilities, out int vendorId, out int productId);
string deviceName = string.IsNullOrWhiteSpace(device.displayName) ? device.name : device.displayName;
DeviceContext context = new DeviceContext(
DetermineCategoryFromDevice(device, vendorId),
return new DeviceContext(
DetermineCategoryFromDevice(device),
device.deviceId,
vendorId,
productId,
deviceName,
device.layout);
DeviceContextCache[device.deviceId] = context;
return context;
}
private static DeviceContext CreateDefaultContext()
@ -305,7 +287,7 @@ public static class InputDeviceWatcher
return new DeviceContext(InputDeviceCategory.Keyboard, -1, 0, 0, DefaultKeyboardDeviceName, Keyboard.current != null ? Keyboard.current.layout : string.Empty);
}
private static InputDeviceCategory DetermineCategoryFromDevice(InputDevice device, int vendorId = 0)
private static InputDeviceCategory DetermineCategoryFromDevice(InputDevice device)
{
if (device == null)
{
@ -319,17 +301,18 @@ public static class InputDeviceWatcher
if (IsGamepadLike(device))
{
return GetGamepadCategory(device, vendorId);
return GetGamepadCategory(device);
}
if (DescriptionContains(device, "xbox") || DescriptionContains(device, "xinput"))
string combined = CombineDeviceDescription(device);
if (ContainsIgnoreCase(combined, "xbox") || ContainsIgnoreCase(combined, "xinput"))
{
return InputDeviceCategory.Xbox;
}
if (DescriptionContains(device, "dualshock")
|| DescriptionContains(device, "dualsense")
|| DescriptionContains(device, "playstation"))
if (ContainsIgnoreCase(combined, "dualshock")
|| ContainsIgnoreCase(combined, "dualsense")
|| ContainsIgnoreCase(combined, "playstation"))
{
return InputDeviceCategory.PlayStation;
}
@ -384,7 +367,7 @@ public static class InputDeviceWatcher
|| ContainsIgnoreCase(layout, "Joystick");
}
private static InputDeviceCategory GetGamepadCategory(InputDevice device, int vendorId = 0)
private static InputDeviceCategory GetGamepadCategory(InputDevice device)
{
if (device == null)
{
@ -397,11 +380,8 @@ public static class InputDeviceWatcher
return InputDeviceCategory.Xbox;
}
if (vendorId == 0 && TryParseVendorProductIds(device.description.capabilities, out int parsedVendorId, out _))
if (TryParseVendorProductIds(device.description.capabilities, out int vendorId, out _))
{
vendorId = parsedVendorId;
}
if (vendorId == 0x045E || vendorId == 1118)
{
return InputDeviceCategory.Xbox;
@ -411,15 +391,17 @@ public static class InputDeviceWatcher
{
return InputDeviceCategory.PlayStation;
}
}
if (DescriptionContains(device, "xbox"))
string combined = CombineDeviceDescription(device);
if (ContainsIgnoreCase(combined, "xbox"))
{
return InputDeviceCategory.Xbox;
}
if (DescriptionContains(device, "dualshock")
|| DescriptionContains(device, "dualsense")
|| DescriptionContains(device, "playstation"))
if (ContainsIgnoreCase(combined, "dualshock")
|| ContainsIgnoreCase(combined, "dualsense")
|| ContainsIgnoreCase(combined, "playstation"))
{
return InputDeviceCategory.PlayStation;
}
@ -427,20 +409,14 @@ public static class InputDeviceWatcher
return InputDeviceCategory.Other;
}
private static bool DescriptionContains(InputDevice device, string value)
private static string CombineDeviceDescription(InputDevice device)
{
if (device == null)
{
return false;
}
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);
return string.Concat(
device.description.interfaceName, " ",
device.layout, " ",
device.description.product, " ",
device.description.manufacturer, " ",
device.displayName);
}
private static bool TryParseVendorProductIds(string capabilities, out int vendorId, out int productId)

View File

@ -1,296 +0,0 @@
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();
}
}
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 211cfb186fc74ca694ec6f7f4b0fd933
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -20,9 +20,7 @@ public abstract class InputGlyphBehaviourBase : MonoBehaviour
private void HandleDeviceChanged(InputDeviceWatcher.InputDeviceCategory category)
{
InputDeviceWatcher.InputDeviceCategory previousCategory = CurrentCategory;
CurrentCategory = category;
OnDeviceCategoryChanged(previousCategory, category);
RefreshGlyph();
}
@ -31,11 +29,5 @@ public abstract class InputGlyphBehaviourBase : MonoBehaviour
RefreshGlyph();
}
protected virtual void OnDeviceCategoryChanged(
InputDeviceWatcher.InputDeviceCategory previousCategory,
InputDeviceWatcher.InputDeviceCategory newCategory)
{
}
protected abstract void RefreshGlyph();
}

View File

@ -45,7 +45,6 @@ public sealed class InputGlyphDatabase : ScriptableObject
InputDeviceWatcher.InputDeviceCategory.Xbox,
InputDeviceWatcher.InputDeviceCategory.Keyboard,
};
private static readonly Dictionary<string, string> NormalizedPathCache = new(StringComparer.Ordinal);
public List<DeviceGlyphTable> tables = new List<DeviceGlyphTable>();
public Sprite placeholderSprite;
@ -73,7 +72,7 @@ public sealed class InputGlyphDatabase : ScriptableObject
}
EnsureCache();
_tableCache.TryGetValue(deviceName, out DeviceGlyphTable table);
_tableCache.TryGetValue(deviceName.ToLowerInvariant(), out DeviceGlyphTable table);
return table;
}
@ -176,11 +175,6 @@ public sealed class InputGlyphDatabase : ScriptableObject
InitializeLookup(InputDeviceWatcher.InputDeviceCategory.PlayStation);
InitializeLookup(InputDeviceWatcher.InputDeviceCategory.Other);
if (tables == null)
{
return;
}
for (int i = 0; i < tables.Count; i++)
{
DeviceGlyphTable table = tables[i];
@ -189,25 +183,13 @@ public sealed class InputGlyphDatabase : ScriptableObject
continue;
}
_tableCache[table.deviceName] = table;
_tableCache[table.deviceName.ToLowerInvariant()] = table;
InputDeviceWatcher.InputDeviceCategory category = ParseCategory(table.deviceName);
Dictionary<string, Sprite> map = _pathLookup[category];
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)
{
_pathLookup[category] = new Dictionary<string, Sprite>(StringComparer.OrdinalIgnoreCase);
@ -254,14 +236,7 @@ public sealed class InputGlyphDatabase : ScriptableObject
return string.Empty;
}
if (NormalizedPathCache.TryGetValue(controlPath, out string normalizedPath))
{
return normalizedPath;
}
normalizedPath = CanonicalizeDeviceLayout(controlPath.Trim().ToLowerInvariant());
NormalizedPathCache[controlPath] = normalizedPath;
return normalizedPath;
return CanonicalizeDeviceLayout(controlPath.Trim().ToLowerInvariant());
}
private static string CanonicalizeDeviceLayout(string controlPath)

View File

@ -0,0 +1,62 @@
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);
}
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 9e40d0d4d3ba4745ac9893991c94131e
timeCreated: 1764917685

View File

@ -0,0 +1,54 @@
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;
}
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 215afdfefaef434db3618081810a0e3d
timeCreated: 1764917669

View File

@ -0,0 +1,65 @@
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;
}
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: f24ff96430d042109462f373aed1f2cc
timeCreated: 1765870646

View File

@ -1,7 +1,7 @@
using AlicizaX.UI;
using TMPro;
using UnityEngine;
using UnityEngine;
using UnityEngine.UI;
using TMPro;
using AlicizaX.UI;
using AlicizaX.UI.Runtime;
namespace Game.UI
{
@ -12,33 +12,21 @@ namespace Game.UI
#region Generated by Script Tool
[SerializeField]
private UXButton mBtnETest;
public UXButton BtnETest => mBtnETest;
[SerializeField]
private UXButton mBtnEscTest;
public UXButton BtnEscTest => mBtnEscTest;
[SerializeField]
private UXButton mBtnQTest;
public UXButton BtnQTest => mBtnQTest;
private Image mImgBackGround;
public Image ImgBackGround => mImgBackGround;
[SerializeField]
private UXButton mBtnTest;
public UXButton BtnTest => mBtnTest;
[SerializeField]
private UXImage mImgBackGround;
public UXImage ImgBackGround => mImgBackGround;
private TextMeshProUGUI mTextTitl;
public TextMeshProUGUI TextTitl => mTextTitl;
[SerializeField]
private RecyclerView mScrollViewTestList;
public RecyclerView ScrollViewTestList => mScrollViewTestList;
[SerializeField]
private TextMeshProUGUI mTextTitl;
public TextMeshProUGUI TextTitl => mTextTitl;
#endregion

View File

@ -1,24 +0,0 @@
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
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 03b1a1a765ce78b4ea4ee026785671f7
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -6,7 +6,6 @@ using AlicizaX.UI.Runtime;
using Cysharp.Threading.Tasks;
using Game.UI;
using GameLogic.Event;
using GameLogic.UI;
using UnityEngine;
public class TestData : ISimpleViewData
@ -30,28 +29,7 @@ public class UILoadUpdate : UITabWindow<ui_UILoadUpdateWindow>
{
testDataList.Add(new TestData() { Name = $"TestProp:{i}" });
}
_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");
}
@ -70,6 +48,24 @@ public class UILoadUpdate : UITabWindow<ui_UILoadUpdateWindow>
private void OnTestClick()
{
GameApp.UI.ShowUISync<UILogicTestAlert>();
// int index = Random.Range(0, 99);
// 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");
}
}

View File

@ -1,29 +0,0 @@
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();
}
}
}

View File

@ -1,3 +0,0 @@
fileFormatVersion: 2
guid: 20e52127e6b741c8b3b93665f603692b
timeCreated: 1773976819

View File

@ -10,7 +10,7 @@
"BuildPipeline": "EditorSimulateBuildPipeline",
"PackageName": "DefaultPackage",
"PackageVersion": "Simulate",
"PackageNote": "2026/3/20 11:28:53",
"PackageNote": "2026/3/11 11:40:21",
"AssetList": [
{
"Address": "Click",
@ -54,6 +54,96 @@
"BundleID": 1,
"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",
"AssetPath": "Assets/Bundles/Scenes/Map1000.unity",
@ -61,7 +151,7 @@
"AssetTags": [
"Scenes"
],
"BundleID": 3,
"BundleID": 4,
"DependBundleIDs": []
},
{
@ -81,16 +171,6 @@
"AssetTags": [
"UI"
],
"BundleID": 4,
"DependBundleIDs": []
},
{
"Address": "UILogicTestAlert",
"AssetPath": "Assets/Bundles/UI/Window/UILogicTestAlert.prefab",
"AssetGUID": "",
"AssetTags": [
"UI"
],
"BundleID": 5,
"DependBundleIDs": []
}
@ -134,6 +214,18 @@
],
"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",
"UnityCRC": 0,
@ -151,19 +243,7 @@
"UnityCRC": 0,
"FileHash": "82253a65841b8f1db612149ec8c9a317",
"FileCRC": 0,
"FileSize": 57247,
"Encrypted": false,
"Tags": [
"UI"
],
"DependBundleIDs": []
},
{
"BundleName": "assets_bundles_ui_window_uilogictestalert.bundle",
"UnityCRC": 0,
"FileHash": "cf84038a2a1620e6ff49815bcd8e6a73",
"FileCRC": 0,
"FileSize": 21629,
"FileSize": 30683,
"Encrypted": false,
"Tags": [
"UI"

@ -1 +1 @@
Subproject commit 4c86d6bbda4d8bd142c5952c504bbe182026ccea
Subproject commit a978c68586cf761c577842532dfa6af5847851a4

@ -1 +1 @@
Subproject commit 4364f4673d24c4a27062c46526ca5f6687675f5e
Subproject commit 7b4feec0f0eb8a7af67063eda3c7a0d8d8bc2b5e

View File

@ -21,47 +21,45 @@ MonoBehaviour:
- ViewHolder
UIElementRegexConfigs:
- uiElementRegex: Rect
componentType: UnityEngine.RectTransform
componentType: RectTransform
- uiElementRegex: Obj
componentType: GameObject
- uiElementRegex: Tf
componentType: UnityEngine.Transform
componentType: Transform
- uiElementRegex: Btn
componentType: UnityEngine.UI.UXButton
componentType: UXButton
- uiElementRegex: Slider
componentType: UnityEngine.UI.Slider
componentType: Slider
- uiElementRegex: Img
componentType: UnityEngine.UI.UXImage
- uiElementRegex: RImg
componentType: UnityEngine.UI.RawImage
componentType: RawImage
- uiElementRegex: Scrollbar
componentType: UnityEngine.UI.Scrollbar
componentType: Scrollbar
- uiElementRegex: ScrollRect
componentType: UnityEngine.UI.ScrollRect
componentType: ScrollRect
- uiElementRegex: GLayout
componentType: UnityEngine.UI.GridLayoutGroup
componentType: GridLayoutGroup
- uiElementRegex: HLayout
componentType: UnityEngine.UI.HorizontalLayoutGroup
componentType: HorizontalLayoutGroup
- uiElementRegex: VLayout
componentType: UnityEngine.UI.VerticalLayoutGroup
componentType: VerticalLayoutGroup
- uiElementRegex: Text
componentType: TMPro.TextMeshProUGUI
- uiElementRegex: TogGroup
componentType: UnityEngine.UI.UXGroup
componentType: UXGroup
- uiElementRegex: Mask2D
componentType: UnityEngine.UI.RectMask2D
componentType: RectMask2D
- uiElementRegex: Video
componentType: UnityEngine.Video.VideoPlayer
componentType: Video.VideoPlayer
- uiElementRegex: Input
componentType: TMPro.TMP_InputField
- uiElementRegex: CanvasGroup
componentType: UnityEngine.CanvasGroup
componentType: CanvasGroup
- uiElementRegex: ScrollView
componentType: AlicizaX.UI.RecyclerView
componentType: RecyclerView
- uiElementRegex: Drag
componentType: UnityEngine.UI.UXDraggable
- uiElementRegex: Img
componentType: UnityEngine.UI.Image
componentType: UXDraggable
UIScriptGenerateConfigs:
- ProjectName: MainProject
NameSpace: Game.UI

View File

@ -9,34 +9,34 @@ EditorUserSettings:
value: 18134705175a055722080a3115371d4a0d55006876786860616b0471b8b07a68ffab74f9ee2a3a30300cea1a11320d0beb1a0c25f7060f494b4cc80018eb09361fc211cb1f862d19c51d19dcc413d6ade0d8ddfcddf9f4d9d29195fcfde6ebeae6f0a9c9afa6f8c5b89ff7a1aacececac4eba4d7c9d28bda
flags: 0
RecentlyUsedSceneGuid-0:
value: 0200010555015e0a5e5f0d2341775b15414f4a7f787d22367b2d4967b4b6623c
value: 5b55075f56030d590b5d5574127707474f4f487b2d7d7f362c2c4564e1b5603e
flags: 0
RecentlyUsedSceneGuid-1:
value: 500803525d0d0f585e0a5c7046770615174e1c2c282c71347d2b4a32bbe56168
value: 0200010555015e0a5e5f0d2341775b15414f4a7f787d22367b2d4967b4b6623c
flags: 0
RecentlyUsedSceneGuid-2:
value: 07570502540759090e59587047775c48414f1b7d757924687d714432e6b93561
value: 500803525d0d0f585e0a5c7046770615174e1c2c282c71347d2b4a32bbe56168
flags: 0
RecentlyUsedSceneGuid-3:
value: 54010c54510c5a5f5a0a0973477b0a4414151a2b757925367a7e4a6ab1b66260
value: 07570502540759090e59587047775c48414f1b7d757924687d714432e6b93561
flags: 0
RecentlyUsedSceneGuid-4:
value: 56060350000d5b5a5908597a48255a44174e4d797a7d7e6475794f61e7b3643e
value: 54010c54510c5a5f5a0a0973477b0a4414151a2b757925367a7e4a6ab1b66260
flags: 0
RecentlyUsedSceneGuid-5:
value: 015450045700505d0f0a5f2313260a444e164b2e757b76652c2d4d32bab0313a
value: 56060350000d5b5a5908597a48255a44174e4d797a7d7e6475794f61e7b3643e
flags: 0
RecentlyUsedSceneGuid-6:
value: 0606045450065e5d55575a241522064444161c797f7b7234757c4f32e1b0353d
value: 015450045700505d0f0a5f2313260a444e164b2e757b76652c2d4d32bab0313a
flags: 0
RecentlyUsedSceneGuid-7:
value: 5a07065703500c59585e0e7748770d44444f4a737d2d7f35787d4f63e0b26668
value: 0606045450065e5d55575a241522064444161c797f7b7234757c4f32e1b0353d
flags: 0
RecentlyUsedSceneGuid-8:
value: 50500404540c580d0f0b5e7543725b44424f4c7a7b7c7734747e4f36e4b1676d
value: 5a07065703500c59585e0e7748770d44444f4a737d2d7f35787d4f63e0b26668
flags: 0
RecentlyUsedSceneGuid-9:
value: 5001560504060c590f5b0f7245725a44404f1d7c297e2233787e4a36b5e4666b
value: 50500404540c580d0f0b5e7543725b44424f4c7a7b7c7734747e4f36e4b1676d
flags: 0
vcSharedLogLevel:
value: 0d5e400f0650

View File

@ -14,8 +14,8 @@ MonoBehaviour:
m_EditorClassIdentifier:
m_PixelRect:
serializedVersion: 2
x: 1920
y: 48
x: 0
y: 43
width: 1920
height: 997
m_ShowMode: 4
@ -41,10 +41,10 @@ MonoBehaviour:
serializedVersion: 2
x: 0
y: 566
width: 505
width: 308
height: 381
m_MinSize: {x: 50, y: 50}
m_MaxSize: {x: 4000, y: 4000}
m_MinSize: {x: 51, y: 71}
m_MaxSize: {x: 4001, y: 4021}
m_ActualView: {fileID: 14}
m_Panes:
- {fileID: 14}
@ -70,7 +70,7 @@ MonoBehaviour:
serializedVersion: 2
x: 0
y: 0
width: 505
width: 308
height: 947
m_MinSize: {x: 100, y: 100}
m_MaxSize: {x: 8096, y: 16192}
@ -174,7 +174,7 @@ MonoBehaviour:
m_MinSize: {x: 400, y: 100}
m_MaxSize: {x: 32384, y: 16192}
vertical: 0
controlID: 104
controlID: 144
draggingID: 0
--- !u!114 &8
MonoBehaviour:
@ -193,7 +193,7 @@ MonoBehaviour:
serializedVersion: 2
x: 0
y: 0
width: 505
width: 308
height: 566
m_MinSize: {x: 201, y: 221}
m_MaxSize: {x: 4001, y: 4021}
@ -219,9 +219,9 @@ MonoBehaviour:
- {fileID: 11}
m_Position:
serializedVersion: 2
x: 505
x: 308
y: 0
width: 223
width: 387
height: 947
m_MinSize: {x: 100, y: 100}
m_MaxSize: {x: 8096, y: 16192}
@ -245,10 +245,10 @@ MonoBehaviour:
serializedVersion: 2
x: 0
y: 0
width: 223
width: 387
height: 409
m_MinSize: {x: 200, y: 200}
m_MaxSize: {x: 4000, y: 4000}
m_MinSize: {x: 202, y: 221}
m_MaxSize: {x: 4002, y: 4021}
m_ActualView: {fileID: 17}
m_Panes:
- {fileID: 17}
@ -271,10 +271,10 @@ MonoBehaviour:
serializedVersion: 2
x: 0
y: 409
width: 223
width: 387
height: 538
m_MinSize: {x: 100, y: 100}
m_MaxSize: {x: 4000, y: 4000}
m_MinSize: {x: 102, y: 121}
m_MaxSize: {x: 4002, y: 4021}
m_ActualView: {fileID: 18}
m_Panes:
- {fileID: 18}
@ -295,9 +295,9 @@ MonoBehaviour:
m_Children: []
m_Position:
serializedVersion: 2
x: 728
x: 695
y: 0
width: 574
width: 607
height: 947
m_MinSize: {x: 232, y: 271}
m_MaxSize: {x: 10002, y: 10021}
@ -352,9 +352,9 @@ MonoBehaviour:
m_Tooltip:
m_Pos:
serializedVersion: 2
x: 1920
y: 644
width: 504
x: 0
y: 639
width: 307
height: 360
m_SerializedDataModeController:
m_DataMode: 0
@ -380,7 +380,7 @@ MonoBehaviour:
m_UseMipMap: 0
m_VSyncEnabled: 0
m_Gizmos: 0
m_Stats: 0
m_Stats: 1
m_SelectedSizes: 03000000000000000000000000000000000000000000000000000000000000000000000000000000
m_ZoomArea:
m_HRangeLocked: 0
@ -408,23 +408,23 @@ MonoBehaviour:
serializedVersion: 2
x: 0
y: 21
width: 504
width: 307
height: 339
m_Scale: {x: 0.2625, y: 0.2625}
m_Translation: {x: 252, y: 169.5}
m_Scale: {x: 0.15989584, y: 0.15989585}
m_Translation: {x: 153.5, y: 169.5}
m_MarginLeft: 0
m_MarginRight: 0
m_MarginTop: 0
m_MarginBottom: 0
m_LastShownAreaInsideMargins:
serializedVersion: 2
x: -960.00006
y: -645.7143
width: 1920.0001
height: 1291.4286
x: -960
y: -1060.0651
width: 1920
height: 2120.1301
m_MinimalGUI: 1
m_defaultScale: 0.2625
m_LastWindowPixelSize: {x: 504, y: 360}
m_defaultScale: 0.15989584
m_LastWindowPixelSize: {x: 307, y: 360}
m_ClearInEditMode: 1
m_NoCameraWarning: 1
m_LowResolutionForAspectRatios: 01000000000000000000
@ -520,9 +520,9 @@ MonoBehaviour:
m_Tooltip:
m_Pos:
serializedVersion: 2
x: 1920
y: 78
width: 504
x: 0
y: 73
width: 307
height: 545
m_SerializedDataModeController:
m_DataMode: 0
@ -1066,7 +1066,7 @@ MonoBehaviour:
m_Position:
m_Target: {x: 1000, y: 1000, z: 100}
speed: 2
m_Value: {x: 0, y: 0, z: 0}
m_Value: {x: 1000, y: 1000, z: 100}
m_RenderMode: 0
m_CameraMode:
drawMode: 0
@ -1104,7 +1104,7 @@ MonoBehaviour:
m_Fade:
m_Target: 0
speed: 2
m_Value: 1
m_Value: 0
m_Color: {r: 0.5, g: 0.5, b: 0.5, a: 0.4}
m_Pivot: {x: 0, y: 0, z: 0}
m_Size: {x: 1, y: 1}
@ -1114,11 +1114,11 @@ MonoBehaviour:
m_Rotation:
m_Target: {x: -0.21037178, y: -0.10913931, z: 0.02363893, w: -0.97122556}
speed: 2
m_Value: {x: 0, y: 0, z: 0, w: 1}
m_Value: {x: -0.2103712, y: -0.10913901, z: 0.023638865, w: -0.9712229}
m_Size:
m_Target: 0.7536363
speed: 2
m_Value: 10
m_Value: 0.7536363
m_Ortho:
m_Target: 0
speed: 2
@ -1163,9 +1163,9 @@ MonoBehaviour:
m_Tooltip:
m_Pos:
serializedVersion: 2
x: 2425
y: 78
width: 221
x: 308
y: 73
width: 385
height: 388
m_SerializedDataModeController:
m_DataMode: 0
@ -1180,9 +1180,9 @@ MonoBehaviour:
m_SceneHierarchy:
m_TreeViewState:
scrollPos: {x: 0, y: 0}
m_SelectedIDs:
m_SelectedIDs: 02200000
m_LastClickedID: 0
m_ExpandedIDs: ccf9ffff
m_ExpandedIDs: aebbfffff2d0fffffad0fffffcd0ffff26fbffff28fbffff
m_RenameOverlay:
m_UserAcceptedRename: 0
m_Name:
@ -1226,9 +1226,9 @@ MonoBehaviour:
m_Tooltip:
m_Pos:
serializedVersion: 2
x: 2425
y: 487
width: 221
x: 308
y: 482
width: 385
height: 517
m_SerializedDataModeController:
m_DataMode: 0
@ -1260,9 +1260,9 @@ MonoBehaviour:
m_Tooltip:
m_Pos:
serializedVersion: 2
x: 2648
y: 78
width: 572
x: 695
y: 73
width: 605
height: 926
m_SerializedDataModeController:
m_DataMode: 0
@ -1285,7 +1285,7 @@ MonoBehaviour:
m_SkipHidden: 0
m_SearchArea: 2
m_Folders:
- Packages/com.alicizax.unity.framework
- Assets/Scripts/Hotfix/GameLogic
m_Globs: []
m_OriginalText:
m_ImportLogFlags: 0
@ -1301,7 +1301,7 @@ MonoBehaviour:
scrollPos: {x: 0, y: 0}
m_SelectedIDs: e48c0000
m_LastClickedID: 36068
m_ExpandedIDs: 000000007e020000020d0000ec6a0000ee6a0000f06a0000f26a0000f46a0000f66a0000f86a0000fa6a0000fc6a0000fe6a0000006b0000026b0000046b0000066b0000086b00000a6b00000c6b00000e6b0000106b0000126b0000146b0000166b0000186b00001a6b00001c6b00001e6b0000206b0000226b0000246b0000266b0000286b00002a6b00002c6b00002e6b0000306b0000326b0000346b0000366b0000386b00003a6b00003c6b00003e6b0000406b0000426b0000446b0000466b0000486b00004a6b00004c6b00004e6b0000506b0000526b0000546b0000566b0000586b00005a6b00005c6b00005e6b0000606b0000626b0000646b0000666b0000686b00006a6b00006c6b00006e6b0000706b0000726b0000746b0000766b0000786b0000
m_ExpandedIDs: 000000007e0200008c0d0000246c00008a6d00008c6d00008e6d0000906d0000926d0000946d0000966d0000986d00009a6d00009c6d00009e6d0000a06d0000a26d0000a46d0000a66d0000a86d0000aa6d0000ac6d0000ae6d0000b06d0000b26d0000b46d0000b66d0000b86d0000ba6d0000bc6d0000be6d0000c06d0000c26d0000c46d0000c66d0000c86d0000ca6d0000cc6d0000ce6d0000d06d0000d26d0000d46d0000d66d0000d86d0000da6d0000dc6d0000de6d0000e06d0000e26d0000e46d0000e66d0000e86d0000ea6d0000ec6d0000ee6d0000f06d0000f26d0000f46d0000f66d0000f86d0000fa6d0000fc6d0000fe6d0000006e0000
m_RenameOverlay:
m_UserAcceptedRename: 0
m_Name:
@ -1329,21 +1329,21 @@ MonoBehaviour:
scrollPos: {x: 0, y: 0}
m_SelectedIDs:
m_LastClickedID: 0
m_ExpandedIDs: ffffffff000000007e020000020d0000ec6a0000ee6a0000f06a0000f26a0000f46a0000f66a0000f86a0000fc6a0000fe6a0000006b0000026b0000046b0000066b0000086b00000a6b00000c6b00000e6b0000106b0000126b0000146b0000166b0000186b00001a6b00001c6b00001e6b0000206b0000226b0000246b0000266b0000286b00002a6b00002c6b00002e6b0000306b0000326b0000346b0000386b00003c6b00003e6b0000406b0000426b0000446b0000466b00004a6b00004c6b0000506b0000526b0000566b00005a6b00005c6b00005e6b0000606b0000626b0000646b0000666b0000686b00006a6b00006c6b00006e6b0000706b0000726b0000746b0000766b0000786b00006c6d00006e6d0000706d0000766d0000c86d0000
m_ExpandedIDs: ffffffff000000007e0200008c0d00008a6d00008c6d00008e6d0000906d0000926d0000966d0000986d00009a6d00009c6d00009e6d0000a06d0000a26d0000a46d0000a66d0000a86d0000aa6d0000ac6d0000ae6d0000b06d0000b26d0000b46d0000b66d0000ba6d0000bc6d0000be6d0000c06d0000c26d0000c46d0000c66d0000c86d0000ca6d0000cc6d0000ce6d0000d06d0000d26d0000d46d0000d66d0000d86d0000da6d0000e46d0000e66d0000e86d0000ea6d0000ec6d0000ee6d0000f06d0000f26d0000f66d0000f86d0000fc6d0000fe6d0000006e0000be6f0000c06f0000187000001a7000001c7000006a700000207100003c7100007a7100007c7100007e71000080710000b2710000c472000060730000267400004a750000dc75000032770000
m_RenameOverlay:
m_UserAcceptedRename: 0
m_Name: ProcedureEntryState
m_OriginalName: ProcedureEntryState
m_Name:
m_OriginalName:
m_EditFieldRect:
serializedVersion: 2
x: 0
y: 0
width: 0
height: 0
m_UserData: 3678
m_UserData: 0
m_IsWaitingForDelay: 0
m_IsRenaming: 0
m_OriginalEventType: 0
m_OriginalEventType: 11
m_IsRenamingFilename: 1
m_ClientGUIView: {fileID: 12}
m_SearchString:
@ -1405,8 +1405,8 @@ MonoBehaviour:
m_Tooltip:
m_Pos:
serializedVersion: 2
x: 3222
y: 78
x: 1302
y: 73
width: 617
height: 926
m_SerializedDataModeController: