This commit is contained in:
陈思海 2025-12-10 17:38:31 +08:00
parent 21be7278cb
commit 0c654d8ae4
22 changed files with 1639 additions and 2289 deletions

View File

@ -17,7 +17,7 @@ MonoBehaviour:
- EntryId: 74156087
SectionId: 80328242
Key: Input.actiondsad.movedsa
Value:
Value: move ru
- EntryId: 94373125
SectionId: 80328242
Key: Input.action.usedas
@ -51,7 +51,7 @@ MonoBehaviour:
- EntryId: 74156087
SectionId: 80328242
Key: Input.actiondsad.movedsa
Value:
Value: Move
- EntryId: 94373125
SectionId: 80328242
Key: Input.action.usedas
@ -85,11 +85,11 @@ MonoBehaviour:
- EntryId: 74156087
SectionId: 80328242
Key: Input.actiondsad.movedsa
Value:
Value: move jp
- EntryId: 94373125
SectionId: 80328242
Key: Input.action.usedas
Value:
Value: USE FUCK U JP
- EntryId: 41381430
SectionId: 80328242
Key: Input.action.jumpdsad

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,216 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!213 &21300000
Sprite:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: EmojiOne_12
m_Rect:
serializedVersion: 2
x: 4
y: 4
width: 120
height: 120
m_Offset: {x: 0, y: 0}
m_Border: {x: 0, y: 0, z: 0, w: 0}
m_PixelsToUnits: 100
m_Pivot: {x: 0.5, y: 0.5}
m_Extrude: 1
m_IsPolygon: 0
m_AtlasName:
m_PackingTag:
m_RenderDataKey:
dffef66376be4fa480fb02b19edbe903: 21300022
m_AtlasTags: []
m_SpriteAtlas: {fileID: 0}
m_RD:
serializedVersion: 3
texture: {fileID: 2800000, guid: dffef66376be4fa480fb02b19edbe903, type: 3}
alphaTexture: {fileID: 0}
secondaryTextures: []
m_SubMeshes:
- serializedVersion: 2
firstByte: 0
indexCount: 6
topology: 0
baseVertex: 0
firstVertex: 0
vertexCount: 4
localAABB:
m_Center: {x: 0, y: 0, z: 0}
m_Extent: {x: 0, y: 0, z: 0}
m_IndexBuffer: 030000000100020001000000
m_VertexData:
serializedVersion: 3
m_VertexCount: 4
m_Channels:
- stream: 0
offset: 0
format: 0
dimension: 3
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 1
offset: 0
format: 0
dimension: 2
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
m_DataSize: 80
_typelessdata: 9a9919bf9a99193f000000009a99193f9a9919bf000000009a99193f9a99193f000000009a9919bf9a9919bf00000000f0ffff3b0000783e0000783ef0ffff3b0000783e0000783ef0ffff3bf0ffff3b
m_Bindpose: []
textureRect:
serializedVersion: 2
x: 4
y: 4
width: 120
height: 120
textureRectOffset: {x: 0, y: 0}
atlasRectOffset: {x: -1, y: -1}
settingsRaw: 64
uvTransform: {x: 100, y: 64, z: 100, w: 64}
downscaleMultiplier: 1
m_AtlasRD:
serializedVersion: 3
texture: {fileID: 2800000, guid: dffef66376be4fa480fb02b19edbe903, type: 3}
alphaTexture: {fileID: 0}
secondaryTextures: []
m_SubMeshes:
- serializedVersion: 2
firstByte: 0
indexCount: 6
topology: 0
baseVertex: 0
firstVertex: 0
vertexCount: 4
localAABB:
m_Center: {x: 0, y: 0, z: 0}
m_Extent: {x: 0, y: 0, z: 0}
m_IndexBuffer: 030000000100020001000000
m_VertexData:
serializedVersion: 3
m_VertexCount: 4
m_Channels:
- stream: 0
offset: 0
format: 0
dimension: 3
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 1
offset: 0
format: 0
dimension: 2
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
m_DataSize: 80
_typelessdata: 9a9919bf9a99193f000000009a99193f9a9919bf000000009a99193f9a99193f000000009a9919bf9a9919bf00000000f0ffff3b0000783e0000783ef0ffff3b0000783e0000783ef0ffff3bf0ffff3b
m_Bindpose: []
textureRect:
serializedVersion: 2
x: 4
y: 4
width: 120
height: 120
textureRectOffset: {x: 0, y: 0}
atlasRectOffset: {x: -1, y: -1}
settingsRaw: 64
uvTransform: {x: 100, y: 64, z: 100, w: 64}
downscaleMultiplier: 1
m_PhysicsShape:
- - {x: -0.59999996, y: 0.59999996}
- {x: -0.59999996, y: -0.59999996}
- {x: 0.59999996, y: -0.59999996}
- {x: 0.59999996, y: 0.59999996}
m_Bones: []
m_SpriteID: 412349a150598d14da4d7140df5c0286

View File

@ -1,7 +1,8 @@
fileFormatVersion: 2
guid: 002e269efc288864b9fe6b6c51d15935
DefaultImporter:
guid: 068091d572066f043aa79b9beace61ea
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 21300000
userData:
assetBundleName:
assetBundleVariant:

View File

@ -808,6 +808,142 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 215982991}
m_CullTransparentMesh: 1
--- !u!1 &344668135
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 344668136}
- component: {fileID: 344668138}
- component: {fileID: 344668137}
m_Layer: 5
m_Name: UXTextMeshPro
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &344668136
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 344668135}
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: 501104430}
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: 160, y: 30}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &344668137
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 344668135}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: bd17b8b605f2ba540bac156b5cf5ac77, 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: USE FUCK U
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: 4294967295
m_fontColor: {r: 1, g: 1, b: 1, 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: 36
m_fontSizeBase: 36
m_fontWeight: 400
m_enableAutoSizing: 0
m_fontSizeMin: 18
m_fontSizeMax: 72
m_fontStyle: 0
m_HorizontalAlignment: 1
m_VerticalAlignment: 256
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}
m_localizationID: 94373125
m_localizationKey: Input.action.usedas
--- !u!222 &344668138
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 344668135}
m_CullTransparentMesh: 1
--- !u!1 &346489238
GameObject:
m_ObjectHideFlags: 0
@ -1381,6 +1517,11 @@ RectTransform:
- {fileID: 1466314556}
- {fileID: 2043214059}
- {fileID: 1240218065}
- {fileID: 1461120293}
- {fileID: 1268519739}
- {fileID: 953234183}
- {fileID: 1108824070}
- {fileID: 344668136}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
@ -2568,6 +2709,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
actions: {fileID: -944628639613478452, guid: 916c72588b6bc6e48a022e8c82e6438f, type: 3}
inputGlyphDatabase: {fileID: 11400000, guid: 6ae7129e9026e8348b9d222e9d0d6f68, type: 2}
fileName: input_bindings.json
debugMode: 1
--- !u!1 &734992815
@ -3397,6 +3539,54 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 933311483}
m_CullTransparentMesh: 1
--- !u!1 &953234182
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 953234183}
- component: {fileID: 953234184}
m_Layer: 5
m_Name: GameObject (2)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &953234183
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 953234182}
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: 501104430}
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: 100, y: 100}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &953234184
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 953234182}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f7d3bd4152cc45d18982984253cfb298, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!1 &983400299
GameObject:
m_ObjectHideFlags: 0
@ -3602,7 +3792,6 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 6bacb75074f6f194a8047ae2fd93d01e, type: 3}
m_Name:
m_EditorClassIdentifier:
database: {fileID: 11400000, guid: 6ae7129e9026e8348b9d222e9d0d6f68, type: 2}
audioSource: {fileID: 1036822060}
hotButtons:
- {fileID: 0}
@ -3831,6 +4020,54 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1091182236}
m_CullTransparentMesh: 1
--- !u!1 &1108824069
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1108824070}
- component: {fileID: 1108824071}
m_Layer: 5
m_Name: GameObject (3)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &1108824070
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1108824069}
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: 501104430}
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: 100, y: 100}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &1108824071
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1108824069}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f7d3bd4152cc45d18982984253cfb298, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!1 &1174001929
GameObject:
m_ObjectHideFlags: 0
@ -4264,6 +4501,54 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1261491487}
m_CullTransparentMesh: 1
--- !u!1 &1268519738
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1268519739}
- component: {fileID: 1268519740}
m_Layer: 5
m_Name: GameObject (1)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &1268519739
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1268519738}
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: 501104430}
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: 100, y: 100}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &1268519740
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1268519738}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f7d3bd4152cc45d18982984253cfb298, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!1 &1276959926
GameObject:
m_ObjectHideFlags: 0
@ -4790,6 +5075,54 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1302014481}
m_CullTransparentMesh: 1
--- !u!1 &1461120292
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1461120293}
- component: {fileID: 1461120294}
m_Layer: 5
m_Name: GameObject
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &1461120293
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1461120292}
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: 501104430}
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: 100, y: 100}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &1461120294
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1461120292}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f7d3bd4152cc45d18982984253cfb298, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!1 &1466314555 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 2393741490227731184, guid: 5a0830a080d75784b9f03b1659413301, type: 3}
@ -5523,7 +5856,7 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 2393741488666459665, guid: 5a0830a080d75784b9f03b1659413301, type: 3}
propertyPath: m_SizeDelta.x
value: 92.01
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2393741488666459665, guid: 5a0830a080d75784b9f03b1659413301, type: 3}
propertyPath: m_SizeDelta.y
@ -5531,7 +5864,7 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 2393741488666459665, guid: 5a0830a080d75784b9f03b1659413301, type: 3}
propertyPath: m_AnchoredPosition.x
value: 86.005005
value: 40
objectReference: {fileID: 0}
- target: {fileID: 2393741488666459665, guid: 5a0830a080d75784b9f03b1659413301, type: 3}
propertyPath: m_AnchoredPosition.y

View File

@ -12,57 +12,67 @@ public static class GlyphService
/// </summary>
public static InputGlyphDatabase Database { get; set; }
public static string GetBindingDisplay(InputAction action, InputGlyphDatabase db = null)
public static string GetBindingControlPath(InputAction action, InputDeviceWatcher.InputDeviceCategory? deviceOverride = null)
{
if (action == null) return string.Empty;
var control = GetBindingControl(action);
return control != null ? control.displayName : string.Empty;
var binding = GetBindingControl(action, deviceOverride);
return binding.hasOverrides ? binding.effectivePath : binding.path;
}
public static string GetBindingControlPath(InputAction action, InputDeviceWatcher.InputDeviceCategory? deviceOverride = null, InputGlyphDatabase db = null)
public static bool TryGetTMPTagForActionPath(InputActionReference reference, InputDeviceWatcher.InputDeviceCategory device, out string tag, out string displayFallback, InputGlyphDatabase db = null)
{
if (action == null) return string.Empty;
var control = GetBindingControl(action, deviceOverride);
return control != null ? $"{(control.device?.displayName ?? "Unknown")}/{control.displayName}" : string.Empty;
string path = GetBindingControlPath(reference, device);
return TryGetTMPTagForActionPath(path, device, out tag, out displayFallback, db);
}
/// <summary>
/// 根据当前设备类别(或传入的 deviceOverride尝试在 action.controls 中找到匹配的 control。
/// 匹配策略:检查 control.device.displayName 是否包含类别提示词(忽略大小写)。
/// 如果没有匹配项则返回第一个 control作为最后的退路或 null。
/// </summary>
public static InputControl GetBindingControl(InputAction action, InputDeviceWatcher.InputDeviceCategory? deviceOverride = null)
public static bool TryGetUISpriteForActionPath(InputActionReference reference, InputDeviceWatcher.InputDeviceCategory device, out Sprite sprite, InputGlyphDatabase db = null)
{
if (action == null) return null;
string path = GetBindingControlPath(reference, device);
return TryGetUISpriteForActionPath(path, device, out sprite, db);
}
public static bool TryGetTMPTagForActionPath(string controlPath, InputDeviceWatcher.InputDeviceCategory device, out string tag, out string displayFallback, InputGlyphDatabase db = null)
{
tag = null;
displayFallback = null;
db = db ?? Database;
displayFallback = GetDisplayNameFromControlPath(controlPath);
var sprite = db.FindSprite(controlPath, device) ?? db.FindSprite(controlPath, InputDeviceWatcher.InputDeviceCategory.Keyboard);
var spriteName = sprite == null ? string.Empty : sprite.name;
tag = $"<sprite name=\"{spriteName}\">";
return true;
}
public static bool TryGetUISpriteForActionPath(string controlPath, InputDeviceWatcher.InputDeviceCategory device, out Sprite sprite, InputGlyphDatabase db = null)
{
sprite = null;
db = db ?? Database;
if (string.IsNullOrEmpty(controlPath) || db == null) return false;
sprite = db.FindSprite(controlPath, device) ?? db.FindSprite(controlPath, InputDeviceWatcher.InputDeviceCategory.Keyboard);
return sprite != null;
}
static InputBinding GetBindingControl(InputAction action, InputDeviceWatcher.InputDeviceCategory? deviceOverride = null)
{
if (action == null) return default;
var curCategory = deviceOverride ?? InputDeviceWatcher.CurrentCategory;
var hints = GetDeviceHintsForCategory(curCategory);
// 首先找匹配 hints 的 control
foreach (var control in action.controls)
foreach (var binding in action.bindings)
{
var deviceName = control.device?.displayName ?? string.Empty;
var deviceName = binding.path ?? string.Empty;
if (hints.Any(h => deviceName.IndexOf(h, StringComparison.OrdinalIgnoreCase) >= 0))
{
return control;
return binding;
}
}
// 如果没有匹配,尝试返回第一个 gamepad/keyboard 优先的 control更健壮
if (action.controls.Count > 0)
{
// 优先返回 keyboard/mouse 类型(如果当前类别是 keyboard
if (curCategory == InputDeviceWatcher.InputDeviceCategory.Keyboard)
{
var k = action.controls.FirstOrDefault(c => (c.device?.displayName ?? "").IndexOf("Keyboard", StringComparison.OrdinalIgnoreCase) >= 0)
?? action.controls.First();
return k;
}
return action.controls.First();
}
return null;
return default;
}
static string[] GetDeviceHintsForCategory(InputDeviceWatcher.InputDeviceCategory cat)
@ -76,76 +86,17 @@ public static class GlyphService
case InputDeviceWatcher.InputDeviceCategory.PlayStation:
return new[] { "DualShock", "DualSense", "PlayStation", "Gamepad" };
default:
return new[] { "Gamepad", "Joystick", "Keyboard", "Mouse" };
return new[] { "XInput", "Xbox", "Gamepad" };
}
}
/// <summary>
/// 尝试根据 controlPath 和设备获取 TMP sprite 标签;如果失败会返回 displayFallback可直接显示的文字
/// 逻辑:
/// 1) 使用传入 db 或静态 Database
/// 2) 先在指定设备表中查找 entry找不到则回退到 Keyboard 表;
/// 3) 如果 table 或 tmpAsset 缺失 或 entry.Sprite 缺失,则用 displayFallback从 controlPath 提取最后段或控制名)。
/// </summary>
public static bool TryGetTMPTagForActionPath(string controlPath, InputDeviceWatcher.InputDeviceCategory device, out string tag, out string displayFallback, InputGlyphDatabase db = null)
public static string GetDisplayNameFromInputAction(InputAction reference)
{
tag = null;
displayFallback = null;
db = db ?? Database;
if (string.IsNullOrEmpty(controlPath) || db == null)
{
displayFallback = GetDisplayNameFromControlPath(controlPath);
return false;
}
var entry = db.FindEntryByControlPath(controlPath, device);
if (entry == null)
{
// 设备缺失或没有 entry -> 回退 keyboard
entry = db.FindEntryByControlPath(controlPath, InputDeviceWatcher.InputDeviceCategory.Keyboard);
}
if (entry == null)
{
displayFallback = GetDisplayNameFromControlPath(controlPath);
return false;
}
// 查找对应表(优先目标设备,再 keyboard
var table = db.GetTable(device) ?? db.GetTable(InputDeviceWatcher.InputDeviceCategory.Keyboard);
if (table == null || table.tmpAsset == null)
{
displayFallback = GetDisplayNameFromControlPath(controlPath);
return false;
}
var sprite = entry.Sprite;
if (sprite == null)
{
displayFallback = GetDisplayNameFromControlPath(controlPath);
return false;
}
var spriteName = sprite.name;
tag = $"<sprite name=\"{spriteName}\">";
return true;
string controlPath=GetBindingControlPath(reference, InputDeviceWatcher.CurrentCategory);
return GetDisplayNameFromControlPath(controlPath);
}
public static bool TryGetUISpriteForActionPath(string controlPath, InputDeviceWatcher.InputDeviceCategory device, out Sprite sprite, InputGlyphDatabase db = null)
{
sprite = null;
db = db ?? Database;
if (string.IsNullOrEmpty(controlPath) || db == null) return false;
var entry = db.FindEntryByControlPath(controlPath, device) ?? db.FindEntryByControlPath(controlPath, InputDeviceWatcher.InputDeviceCategory.Keyboard);
if (entry == null) return false;
if (entry.Sprite == null) return false;
sprite = entry.Sprite;
return true;
}
static string GetDisplayNameFromControlPath(string controlPath)
public static string GetDisplayNameFromControlPath(string controlPath)
{
if (string.IsNullOrEmpty(controlPath)) return string.Empty;
var parts = controlPath.Split('/');

View File

@ -1,4 +1,5 @@
// InputBindingManager.cs
using System;
using System.IO;
using System.Linq;
@ -8,6 +9,7 @@ using System.Threading.Tasks;
using UnityEngine;
using UnityEngine.InputSystem;
using System.Reactive.Subjects;
using AlicizaX.InputGlyph;
using RxUnit = System.Reactive.Unit;
namespace InputRemapper
@ -18,6 +20,9 @@ namespace InputRemapper
[Tooltip("InputActionAsset to manage")]
public InputActionAsset actions;
[SerializeField] private InputGlyphDatabase inputGlyphDatabase;
public string fileName = "input_bindings.json";
public bool debugMode = false;
@ -52,6 +57,7 @@ namespace InputRemapper
private void Awake()
{
GlyphService.Database = inputGlyphDatabase;
if (actions == null)
{
Debug.LogError("InputBindingManager: InputActionAsset not assigned.");
@ -60,7 +66,14 @@ namespace InputRemapper
BuildActionMap();
try { defaultBindingsJson = actions.SaveBindingOverridesAsJson(); } catch { defaultBindingsJson = string.Empty; }
try
{
defaultBindingsJson = actions.SaveBindingOverridesAsJson();
}
catch
{
defaultBindingsJson = string.Empty;
}
if (File.Exists(SavePath))
{
@ -74,7 +87,10 @@ namespace InputRemapper
if (debugMode) Debug.Log($"Loaded overrides from {SavePath}");
}
}
catch (Exception ex) { Debug.LogError("Failed to load overrides: " + ex); }
catch (Exception ex)
{
Debug.LogError("Failed to load overrides: " + ex);
}
}
OnInputsInit.OnNext(RxUnit.Default);
@ -181,7 +197,6 @@ namespace InputRemapper
}
}
// Simple BindingPath (no glyph caching)
public sealed class BindingPath
{
public string bindingPath;
@ -215,7 +230,9 @@ namespace InputRemapper
public RebindContext(InputAction action, int bindingIndex, string overridePath)
{
this.action = action; this.bindingIndex = bindingIndex; this.overridePath = overridePath;
this.action = action;
this.bindingIndex = bindingIndex;
this.overridePath = overridePath;
}
public override bool Equals(object obj)
@ -237,6 +254,7 @@ namespace InputRemapper
{
if (map.Value.actions.TryGetValue(actionName, out var a)) return a.action;
}
Debug.LogError($"[InputBindingManager] Could not find action '{actionName}'");
return null;
}
@ -270,7 +288,9 @@ namespace InputRemapper
{
foreach (var ctx in Instance.preparedRebinds)
{
if (string.IsNullOrEmpty(ctx.overridePath)) { }
if (string.IsNullOrEmpty(ctx.overridePath))
{
}
else if (ctx.overridePath == NULL_BINDING) ctx.action.RemoveBindingOverride(ctx.bindingIndex);
else ctx.action.ApplyBindingOverride(ctx.bindingIndex, ctx.overridePath);
@ -365,10 +385,13 @@ namespace InputRemapper
{
if (ctx.overridePath == bindingPath && (ctx.action != currentAction || (ctx.action == currentAction && ctx.bindingIndex != currentIndex)))
{
duplicate = ctx; return true;
duplicate = ctx;
return true;
}
}
duplicate = null; return false;
duplicate = null;
return false;
}
private bool AnyBindingPath(string bindingPath, InputAction currentAction, int currentIndex, out (InputAction action, int bindingIndex) duplicate)
@ -389,7 +412,9 @@ namespace InputRemapper
}
}
}
duplicate = default; return false;
duplicate = default;
return false;
}
private void PrepareRebind(RebindContext context)
@ -424,7 +449,11 @@ namespace InputRemapper
using (var sw = new StreamWriter(SavePath, false)) await sw.WriteAsync(json);
if (debugMode) Debug.Log($"Overrides saved to {SavePath}");
}
catch (Exception ex) { Debug.LogError("Failed to save overrides: " + ex); throw; }
catch (Exception ex)
{
Debug.LogError("Failed to save overrides: " + ex);
throw;
}
}
public async Task ResetToDefaultAsync()
@ -435,16 +464,19 @@ namespace InputRemapper
else
{
foreach (var map in actionMap)
foreach (var a in map.Value.actions)
for (int b = 0; b < a.Value.action.bindings.Count; b++)
a.Value.action.RemoveBindingOverride(b);
foreach (var a in map.Value.actions)
for (int b = 0; b < a.Value.action.bindings.Count; b++)
a.Value.action.RemoveBindingOverride(b);
}
RefreshBindingPathsFromActions();
await WriteOverridesToDiskAsync();
if (debugMode) Debug.Log("Reset to default and saved.");
}
catch (Exception ex) { Debug.LogError("Failed to reset defaults: " + ex); }
catch (Exception ex)
{
Debug.LogError("Failed to reset defaults: " + ex);
}
}
public static BindingPath GetBindingPath(string actionName, int bindingIndex = 0)
@ -456,6 +488,7 @@ namespace InputRemapper
if (action.bindings.TryGetValue(bindingIndex, out var binding)) return binding.bindingPath;
}
}
return null;
}

File diff suppressed because it is too large Load Diff

View File

@ -16,7 +16,8 @@ namespace AlicizaX.InputGlyph
[Serializable]
public class DeviceGlyphTable
{
public InputDeviceWatcher.InputDeviceCategory deviceType;
// 改为使用字符串名称来区分 table会序列化
public string deviceName;
public TMP_SpriteAsset tmpAsset;
public List<GlyphEntry> entries = new List<GlyphEntry>();
}
@ -26,28 +27,69 @@ namespace AlicizaX.InputGlyph
{
public List<DeviceGlyphTable> tables = new List<DeviceGlyphTable>();
public DeviceGlyphTable GetTable(InputDeviceWatcher.InputDeviceCategory device)
// 当 FindEntryByControlPath 传空 path 时返回的占位 sprite
public Sprite placeholderSprite;
// 按名字获取 tablename 精确匹配,不区分大小写)
public DeviceGlyphTable GetTable(string deviceName)
{
if (string.IsNullOrEmpty(deviceName)) return null;
if (tables == null) return null;
for (int i = 0; i < tables.Count; ++i)
if (tables[i].deviceType == device)
return tables[i];
{
var t = tables[i];
if (t == null) continue;
if (string.Equals(t.deviceName, deviceName, StringComparison.OrdinalIgnoreCase))
return t;
}
return null;
}
// 为兼容保留接受枚举并映射为常用名称Keyboard, Xbox, PlayStation
public DeviceGlyphTable GetTable(InputDeviceWatcher.InputDeviceCategory device)
{
string name = "Other";
switch (device)
{
case InputDeviceWatcher.InputDeviceCategory.Keyboard: name = "Keyboard"; break;
case InputDeviceWatcher.InputDeviceCategory.Xbox: name = "Xbox"; break;
case InputDeviceWatcher.InputDeviceCategory.PlayStation: name = "PlayStation"; break;
default: name = "Xbox"; break; // 与原逻辑相同Other -> Xbox
}
return GetTable(name);
}
public Sprite FindSprite(string controlPath, InputDeviceWatcher.InputDeviceCategory device)
{
var entry = FindEntryByControlPath(controlPath, device);
if (string.IsNullOrEmpty(controlPath) || entry == null)
{
return placeholderSprite;
}
return entry.Sprite;
}
public GlyphEntry FindEntryByControlPath(string controlPath, InputDeviceWatcher.InputDeviceCategory device)
{
if (string.IsNullOrEmpty(controlPath)) return null;
var t = GetTable(device);
if (t != null)
{
for (int i = 0; i < t.entries.Count; ++i)
{
var e = t.entries[i];
if (e.action.controls.Count <= 0) continue;
var matchPath = $"{e.action.controls[0].device.displayName}/{e.action.controls[0].displayName}";
if (string.Equals(matchPath, controlPath, StringComparison.OrdinalIgnoreCase)) return e;
if (e == null) continue;
if (e.action == null) continue;
if (e.action.bindings.Count <= 0) continue;
foreach (var binding in e.action.bindings)
{
if (string.Equals(controlPath, binding.path, StringComparison.OrdinalIgnoreCase))
{
return e;
}
}
}
}

View File

@ -12,26 +12,45 @@ using TMPro;
public class InputGlyphDatabaseEditor : Editor
{
SerializedProperty tablesProp;
SerializedProperty placeholderSpriteProp;
InputGlyphDatabase db;
// 动态标签索引范围0 .. tablesCount 为各表,最后一个 index = tablesCount 为 Settings
int tabIndex = 0;
string[] tabNames = new string[] { "Keyboard", "Xbox", "PlayStation", "Other" };
// Pagination
const int itemsPerPage = 10; // 10 items per page as requested
int currentPage = 0;
// 添加表时使用的临时 UI 状态
bool showAddField = false;
string newTableName = "";
// 每个表的搜索字符串与分页状态editor 内存,不序列化)
List<string> searchStrings = new List<string>();
List<int> currentPages = new List<int>();
// 常量
const int itemsPerPage = 10;
// 缩小后的预览尺寸
const int previewSize = 52;
void OnEnable()
{
db = target as InputGlyphDatabase;
tablesProp = serializedObject.FindProperty("tables");
placeholderSpriteProp = serializedObject.FindProperty("placeholderSprite");
// Ensure serialized list exists
if (tablesProp == null)
{
// If the field name is different, user should fix it in their class or here.
Debug.LogError("Could not find serialized property 'tables' on InputGlyphDatabase. Check field name.");
return;
}
// 如果没有默认的 Keyboard/Xbox/PlayStation 三个表则确保创建(便于迁移)
EnsureDefaultTable("Keyboard");
EnsureDefaultTable("Xbox");
EnsureDefaultTable("PlayStation");
// 初始化 editor 状态列表,长度与 tablesProp 对应
SyncEditorListsWithTables();
}
public override void OnInspectorGUI()
@ -39,163 +58,328 @@ public class InputGlyphDatabaseEditor : Editor
serializedObject.Update();
if (db == null || tablesProp == null) return;
EditorGUILayout.Space();
tabIndex = GUILayout.Toolbar(tabIndex, tabNames, GUILayout.Height(24));
var curDevice = (InputDeviceWatcher.InputDeviceCategory)tabIndex;
// 顶部工具栏(与 Save 按钮风格一致),同时放置 Settings 按钮
EditorGUILayout.BeginHorizontal(EditorStyles.toolbar);
GUILayout.Space(4);
// Ensure all 4 tables exist (serialized-safe)
EnsureTableFor(InputDeviceWatcher.InputDeviceCategory.Keyboard);
EnsureTableFor(InputDeviceWatcher.InputDeviceCategory.Xbox);
EnsureTableFor(InputDeviceWatcher.InputDeviceCategory.PlayStation);
var tableProp = GetTablePropertyFor(curDevice);
if (tableProp == null)
{
EditorGUILayout.HelpBox("Table not found (this should not happen).", MessageType.Warning);
serializedObject.ApplyModifiedProperties();
return;
}
EditorGUILayout.BeginVertical("box");
EditorGUILayout.LabelField(curDevice.ToString(), EditorStyles.boldLabel);
var tmpAssetProp = tableProp.FindPropertyRelative("tmpAsset");
EditorGUILayout.PropertyField(tmpAssetProp, new GUIContent("TMP Sprite Asset"));
EditorGUILayout.BeginHorizontal();
if (GUILayout.Button("Parse TMP Asset"))
{
ParseTMPAssetIntoTableSerialized(tableProp);
}
if (GUILayout.Button("Clear"))
{
var entriesProp = tableProp.FindPropertyRelative("entries");
entriesProp.arraySize = 0;
serializedObject.ApplyModifiedProperties();
EditorUtility.SetDirty(db);
currentPage = 0;
}
EditorGUILayout.EndHorizontal();
EditorGUILayout.Space();
var entries = tableProp.FindPropertyRelative("entries");
if (entries != null)
{
int total = entries.arraySize;
int totalPages = Mathf.Max(1, (total + itemsPerPage - 1) / itemsPerPage);
currentPage = Mathf.Clamp(currentPage, 0, totalPages - 1);
// Pagination controls
EditorGUILayout.BeginHorizontal();
if (GUILayout.Button("<<", GUILayout.Width(40))) { currentPage = 0; }
if (GUILayout.Button("<", GUILayout.Width(40))) { currentPage = Mathf.Max(0, currentPage - 1); }
GUILayout.FlexibleSpace();
EditorGUILayout.LabelField(string.Format("Page {0}/{1}", currentPage + 1, totalPages), GUILayout.Width(100));
GUILayout.FlexibleSpace();
if (GUILayout.Button(">", GUILayout.Width(40))) { currentPage = Mathf.Min(totalPages - 1, currentPage + 1); }
if (GUILayout.Button(">>", GUILayout.Width(40))) { currentPage = totalPages - 1; }
EditorGUILayout.EndHorizontal();
EditorGUILayout.Space(4);
int start = currentPage * itemsPerPage;
int end = Mathf.Min(start + itemsPerPage, total);
for (int i = start; i < end; ++i)
{
var eProp = entries.GetArrayElementAtIndex(i);
if (eProp == null) continue;
using (new EditorGUILayout.HorizontalScope("box"))
{
// Left column: sprite preview (fixed width)
using (new EditorGUILayout.VerticalScope(GUILayout.Width(80)))
{
var spriteProp = eProp.FindPropertyRelative("Sprite");
Sprite s = spriteProp.objectReferenceValue as Sprite;
EditorGUILayout.LabelField(s != null ? s.name : "<missing>", EditorStyles.boldLabel);
if (s != null)
{
Texture2D preview = AssetPreview.GetAssetPreview(s);
if (preview == null) preview = AssetPreview.GetMiniThumbnail(s);
if (preview != null)
{
GUILayout.Label(preview, GUILayout.Width(64), GUILayout.Height(64));
}
else
{
EditorGUILayout.PropertyField(spriteProp, GUIContent.none, GUILayout.Width(64), GUILayout.Height(64));
}
}
else
{
EditorGUILayout.PropertyField(spriteProp, GUIContent.none, GUILayout.Width(64), GUILayout.Height(64));
}
}
// Right column: path + action should take the remaining width
EditorGUILayout.BeginVertical();
var actionProp = eProp.FindPropertyRelative("action");
EditorGUILayout.Space(2);
EditorGUILayout.PropertyField(actionProp, GUIContent.none, GUILayout.ExpandWidth(true));
// if (glyphEntry != null && glyphEntry.action != null)
// {
//
// }
EditorGUILayout.EndVertical();
}
EditorGUILayout.Space(6);
}
}
EditorGUILayout.EndVertical();
EditorGUILayout.Space();
if (GUILayout.Button("Save Asset"))
if (GUILayout.Button("Save Asset", EditorStyles.toolbarButton))
{
serializedObject.ApplyModifiedProperties();
EditorUtility.SetDirty(db);
AssetDatabase.SaveAssets();
}
GUILayout.FlexibleSpace();
// + 按钮:切换显示新增输入区域
if (GUILayout.Button(showAddField ? "Cancel +" : "+ Add Table", EditorStyles.toolbarButton, GUILayout.Width(110)))
{
showAddField = !showAddField;
newTableName = "";
}
// Settings 按钮也放在这个 toolbar 上(风格保持一致)
int settingsIndex = tablesProp != null ? tablesProp.arraySize : 0;
bool settingsSelected = (tabIndex == settingsIndex);
if (GUILayout.Toggle(settingsSelected, "Settings", EditorStyles.toolbarButton, GUILayout.Width(90)) != settingsSelected)
{
// 切换到 settings 页面或从 settings 切回第一个 table如果取消
tabIndex = (tabIndex == settingsIndex) ? 0 : settingsIndex;
}
EditorGUILayout.EndHorizontal();
// 如果正在新增,展示一个横向输入框(下方,同 toolbar 风格)
if (showAddField)
{
EditorGUILayout.BeginHorizontal(EditorStyles.toolbar);
GUILayout.Label("Name:", GUILayout.Width(40));
newTableName = EditorGUILayout.TextField(newTableName);
if (GUILayout.Button("Add", EditorStyles.toolbarButton, GUILayout.Width(80)))
{
string trimmed = newTableName != null ? newTableName.Trim() : "";
if (string.IsNullOrEmpty(trimmed))
{
EditorUtility.DisplayDialog("Invalid Name", "Table name cannot be empty.", "OK");
}
else
{
// 唯一性检查(不区分大小写)
bool exists = false;
for (int i = 0; i < tablesProp.arraySize; ++i)
{
var t = tablesProp.GetArrayElementAtIndex(i);
var nameProp = t.FindPropertyRelative("deviceName");
if (nameProp != null && string.Equals(nameProp.stringValue, trimmed, StringComparison.OrdinalIgnoreCase))
{
exists = true; break;
}
}
if (exists)
{
EditorUtility.DisplayDialog("Duplicate", "A table with that name already exists.", "OK");
}
else
{
int newIndex = tablesProp.arraySize;
tablesProp.InsertArrayElementAtIndex(newIndex);
var newTable = tablesProp.GetArrayElementAtIndex(newIndex);
var nameProp = newTable.FindPropertyRelative("deviceName");
if (nameProp != null) nameProp.stringValue = trimmed;
var tmpAssetProp = newTable.FindPropertyRelative("tmpAsset");
if (tmpAssetProp != null) tmpAssetProp.objectReferenceValue = null;
var entriesProp = newTable.FindPropertyRelative("entries");
if (entriesProp != null) entriesProp.arraySize = 0;
serializedObject.ApplyModifiedProperties();
EditorUtility.SetDirty(db);
// 重新 sync editor lists
SyncEditorListsWithTables();
showAddField = false;
tabIndex = tablesProp.arraySize - 1; // 选择新建的 tab
}
}
}
if (GUILayout.Button("Cancel", EditorStyles.toolbarButton, GUILayout.Width(80)))
{
showAddField = false;
newTableName = "";
}
EditorGUILayout.EndHorizontal();
}
EditorGUILayout.Space(6);
// 绘制标签行(来自 tables 的 deviceName但不再包含 SettingsSettings 已在上方 toolbar
EditorGUILayout.BeginHorizontal(EditorStyles.toolbar);
int tablesCount = tablesProp.arraySize;
for (int i = 0; i < tablesCount; ++i)
{
var t = tablesProp.GetArrayElementAtIndex(i);
var nameProp = t.FindPropertyRelative("deviceName");
string name = nameProp != null ? nameProp.stringValue : ("Table " + i);
bool selected = (tabIndex == i);
// 采用 toolbarButton 风格的 toggle
if (GUILayout.Toggle(selected, name, EditorStyles.toolbarButton, GUILayout.MinWidth(60)))
{
tabIndex = i;
}
// 每个表右侧加一个小删除按钮Settings 不在这里)
if (GUILayout.Button("×", EditorStyles.toolbarButton, GUILayout.Width(22)))
{
// 二次确认
if (EditorUtility.DisplayDialog("Delete Table?",
$"Delete table '{name}' and all its entries? This cannot be undone.", "Delete", "Cancel"))
{
tablesProp.DeleteArrayElementAtIndex(i);
serializedObject.ApplyModifiedProperties();
EditorUtility.SetDirty(db);
// 调整 tabIndex 与 editor 状态
SyncEditorListsWithTables();
tabIndex = Mathf.Clamp(tabIndex, 0, Math.Max(0, tablesProp.arraySize - 1));
return; // 直接返回防止继续绘制已修改的 serializedObject
}
}
}
EditorGUILayout.EndHorizontal();
EditorGUILayout.Space(8);
// 绘制选中页内容(如果是 Settings 或某个 table
EditorGUILayout.BeginVertical("box");
if (tabIndex == tablesProp.arraySize)
{
// Settings 页
EditorGUILayout.LabelField("Settings", EditorStyles.boldLabel);
EditorGUILayout.Space(4);
EditorGUILayout.PropertyField(placeholderSpriteProp, new GUIContent("Placeholder Sprite"));
Sprite placeholder = placeholderSpriteProp.objectReferenceValue as Sprite;
EditorGUILayout.Space(6);
EditorGUILayout.LabelField("Preview", EditorStyles.miniBoldLabel);
if (placeholder != null)
{
Texture2D preview = AssetPreview.GetAssetPreview(placeholder);
if (preview == null) preview = AssetPreview.GetMiniThumbnail(placeholder);
if (preview != null) GUILayout.Label(preview, GUILayout.Width(previewSize), GUILayout.Height(previewSize));
else EditorGUILayout.ObjectField(placeholder, typeof(Sprite), false, GUILayout.Width(previewSize), GUILayout.Height(previewSize));
}
else
{
EditorGUILayout.HelpBox("No placeholder sprite assigned. If FindEntryByControlPath receives an empty path, it will return null.", MessageType.Info);
}
}
else
{
// Table 页
if (tabIndex < 0 || tabIndex >= tablesProp.arraySize)
{
EditorGUILayout.HelpBox("Invalid table index.", MessageType.Error);
}
else
{
var tableProp = tablesProp.GetArrayElementAtIndex(tabIndex);
// 去掉顶部显示 table 名称的 label
// var nameProp = tableProp.FindPropertyRelative("deviceName");
// string tableName = nameProp != null ? nameProp.stringValue : $"Table {tabIndex}";
// EditorGUILayout.LabelField(tableName, EditorStyles.boldLabel);
// Ensure editor lists 长度一致
EnsureEditorListsLength();
// 搜索框:尽量使用 EditorStyles.toolbarSearchField去掉左侧标题和 clear 按钮)
GUILayout.BeginHorizontal();
GUIStyle searchStyle = EditorStyles.toolbarSearchField ?? EditorStyles.textField;
searchStrings[tabIndex] = GUILayout.TextField(searchStrings[tabIndex] ?? "", searchStyle);
GUILayout.EndHorizontal();
EditorGUILayout.Space(6);
// 将 TMP Sprite Asset 的选择框 与 Parse / Clear 按钮 水平显示
var tmpAssetProp = tableProp.FindPropertyRelative("tmpAsset");
EditorGUILayout.BeginHorizontal();
GUILayout.Label("TMP Sprite Asset", GUILayout.Width(140));
EditorGUILayout.PropertyField(tmpAssetProp, GUIContent.none, GUILayout.ExpandWidth(true));
if (GUILayout.Button("Parse TMP Asset", GUILayout.Width(120))) ParseTMPAssetIntoTableSerialized(tableProp);
if (GUILayout.Button("Clear", GUILayout.Width(80)))
{
var entriesProp = tableProp.FindPropertyRelative("entries");
if (entriesProp != null) entriesProp.arraySize = 0;
serializedObject.ApplyModifiedProperties();
EditorUtility.SetDirty(db);
currentPages[tabIndex] = 0;
}
EditorGUILayout.EndHorizontal();
EditorGUILayout.Space(6);
var entries = tableProp.FindPropertyRelative("entries");
if (entries != null)
{
int total = entries.arraySize;
// collect matched indices by searching sprite.name
List<int> matchedIndices = new List<int>();
string query = (searchStrings[tabIndex] ?? "").Trim();
for (int i = 0; i < total; ++i)
{
var eProp = entries.GetArrayElementAtIndex(i);
if (eProp == null) continue;
var spriteProp = eProp.FindPropertyRelative("Sprite");
Sprite s = spriteProp.objectReferenceValue as Sprite;
string name = s != null ? s.name : "";
if (string.IsNullOrEmpty(query) || name.IndexOf(query, StringComparison.OrdinalIgnoreCase) >= 0)
{
matchedIndices.Add(i);
}
}
int matchedTotal = matchedIndices.Count;
int totalPages = Mathf.Max(1, (matchedTotal + itemsPerPage - 1) / itemsPerPage);
currentPages[tabIndex] = Mathf.Clamp(currentPages[tabIndex], 0, totalPages - 1);
// pagination controls (toolbar 风格)
EditorGUILayout.BeginHorizontal();
if (GUILayout.Button("<<", EditorStyles.miniButtonLeft, GUILayout.Width(36))) { currentPages[tabIndex] = 0; }
if (GUILayout.Button("<", EditorStyles.miniButtonMid, GUILayout.Width(36))) { currentPages[tabIndex] = Mathf.Max(0, currentPages[tabIndex] - 1); }
GUILayout.FlexibleSpace();
EditorGUILayout.LabelField(string.Format("Page {0}/{1}", currentPages[tabIndex] + 1, totalPages), GUILayout.Width(120));
GUILayout.FlexibleSpace();
if (GUILayout.Button(">", EditorStyles.miniButtonMid, GUILayout.Width(36))) { currentPages[tabIndex] = Mathf.Min(totalPages - 1, currentPages[tabIndex] + 1); }
if (GUILayout.Button(">>", EditorStyles.miniButtonRight, GUILayout.Width(36))) { currentPages[tabIndex] = totalPages - 1; }
EditorGUILayout.EndHorizontal();
EditorGUILayout.Space(4);
int start = currentPages[tabIndex] * itemsPerPage;
int end = Math.Min(start + itemsPerPage, matchedTotal);
for (int mi = start; mi < end; ++mi)
{
int i = matchedIndices[mi];
var eProp = entries.GetArrayElementAtIndex(i);
if (eProp == null) continue;
// 使用稍小的间距并减小 preview 大小
using (new EditorGUILayout.HorizontalScope("box"))
{
// 左列 sprite 预览(固定宽)
using (new EditorGUILayout.VerticalScope(GUILayout.Width(80)))
{
var spriteProp = eProp.FindPropertyRelative("Sprite");
Sprite s = spriteProp.objectReferenceValue as Sprite;
EditorGUILayout.LabelField(s != null ? s.name : "<missing>", EditorStyles.boldLabel);
if (s != null)
{
Texture2D preview = AssetPreview.GetAssetPreview(s);
if (preview == null) preview = AssetPreview.GetMiniThumbnail(s);
if (preview != null)
{
GUILayout.Label(preview, GUILayout.Width(previewSize), GUILayout.Height(previewSize));
}
else
{
EditorGUILayout.PropertyField(spriteProp, GUIContent.none, GUILayout.Width(previewSize), GUILayout.Height(previewSize));
}
}
else
{
EditorGUILayout.PropertyField(spriteProp, GUIContent.none, GUILayout.Width(previewSize), GUILayout.Height(previewSize));
}
}
// 右列 action 字段
EditorGUILayout.BeginVertical();
var actionProp = eProp.FindPropertyRelative("action");
EditorGUILayout.Space(2);
EditorGUILayout.PropertyField(actionProp, GUIContent.none, GUILayout.ExpandWidth(true));
EditorGUILayout.EndVertical();
}
EditorGUILayout.Space(4);
}
if (matchedTotal == 0)
{
EditorGUILayout.HelpBox("No entries match the search.", MessageType.Info);
}
}
}
}
EditorGUILayout.EndVertical();
EditorGUILayout.Space(6);
serializedObject.ApplyModifiedProperties();
}
// Ensure a table for the device exists. Uses serialized properties (adds element if necessary).
void EnsureTableFor(InputDeviceWatcher.InputDeviceCategory device)
// Ensure table with name exists (用于初次迁移)
void EnsureDefaultTable(string name)
{
if (tablesProp == null) return;
// Search existing entries
for (int i = 0; i < tablesProp.arraySize; ++i)
{
var t = tablesProp.GetArrayElementAtIndex(i);
var devProp = t.FindPropertyRelative("deviceType");
if (devProp != null && devProp.enumValueIndex == (int)device)
return; // exists
var nameProp = t.FindPropertyRelative("deviceName");
if (nameProp != null && string.Equals(nameProp.stringValue, name, StringComparison.OrdinalIgnoreCase))
return;
}
// Not found -> append new element
int idx = tablesProp.arraySize;
tablesProp.InsertArrayElementAtIndex(idx); // Inserts a copy if exists, otherwise default
tablesProp.InsertArrayElementAtIndex(idx);
var newTable = tablesProp.GetArrayElementAtIndex(idx);
var deviceTypeProp = newTable.FindPropertyRelative("deviceType");
if (deviceTypeProp != null) deviceTypeProp.enumValueIndex = (int)device;
var deviceNameProp = newTable.FindPropertyRelative("deviceName");
if (deviceNameProp != null) deviceNameProp.stringValue = name;
var tmpAssetProp = newTable.FindPropertyRelative("tmpAsset");
if (tmpAssetProp != null) tmpAssetProp.objectReferenceValue = null;
var entriesProp = newTable.FindPropertyRelative("entries");
if (entriesProp != null) entriesProp.arraySize = 0;
@ -203,22 +387,26 @@ public class InputGlyphDatabaseEditor : Editor
EditorUtility.SetDirty(db);
}
// Return the SerializedProperty representing the DeviceGlyphTable that matches device
SerializedProperty GetTablePropertyFor(InputDeviceWatcher.InputDeviceCategory device)
void SyncEditorListsWithTables()
{
if (tablesProp == null) return null;
for (int i = 0; i < tablesProp.arraySize; ++i)
{
var t = tablesProp.GetArrayElementAtIndex(i);
var devProp = t.FindPropertyRelative("deviceType");
if (devProp != null && devProp.enumValueIndex == (int)device)
return t;
}
int count = tablesProp != null ? tablesProp.arraySize : 0;
if (searchStrings == null) searchStrings = new List<string>();
if (currentPages == null) currentPages = new List<int>();
return null;
while (searchStrings.Count < count) searchStrings.Add("");
while (currentPages.Count < count) currentPages.Add(0);
while (searchStrings.Count > count) searchStrings.RemoveAt(searchStrings.Count - 1);
while (currentPages.Count > count) currentPages.RemoveAt(currentPages.Count - 1);
}
// Parse TMP Sprite Asset and populate entries (serialized)
void EnsureEditorListsLength()
{
if (tablesProp == null) return;
SyncEditorListsWithTables();
}
// Parse TMP Sprite Asset into table (保持你原有实现)
void ParseTMPAssetIntoTableSerialized(SerializedProperty tableProp)
{
if (tableProp == null) return;
@ -249,20 +437,12 @@ public class InputGlyphDatabaseEditor : Editor
var glyph = ch.glyph as TMP_SpriteGlyph;
if (glyph != null && glyph.sprite != null) s = glyph.sprite;
}
catch
{
}
catch { }
if (s == null && atlas != null)
{
try
{
s = atlas.GetSprite(name);
}
catch
{
s = null;
}
try { s = atlas.GetSprite(name); }
catch { s = null; }
if (s == null)
{
@ -271,9 +451,7 @@ public class InputGlyphDatabaseEditor : Editor
var m = typeof(SpriteAtlas).GetMethod("GetSprite", new Type[] { typeof(string) });
if (m != null) s = m.Invoke(atlas, new object[] { name }) as Sprite;
}
catch
{
}
catch { }
}
}
@ -313,14 +491,10 @@ public class InputGlyphDatabaseEditor : Editor
}
}
// Create new entry and assign fields
int newIndex = entriesProp.arraySize;
entriesProp.InsertArrayElementAtIndex(newIndex);
var entryProp = entriesProp.GetArrayElementAtIndex(newIndex);
var spriteProp = entryProp.FindPropertyRelative("Sprite");
if (spriteProp != null) spriteProp.objectReferenceValue = s;
}
@ -351,9 +525,7 @@ public class InputGlyphDatabaseEditor : Editor
var val = p.GetValue(asset, null) as SpriteAtlas;
if (val != null) return val;
}
catch
{
}
catch { }
}
}

View File

@ -31,8 +31,7 @@ public class InputGlyphImage : MonoBehaviour
{
if (actionReference == null || actionReference.action == null || targetImage == null) return;
InputDeviceWatcher.InputDeviceCategory deviceCategory = InputDeviceWatcher.CurrentCategory;
string path = GlyphService.GetBindingControlPath(actionReference);
if (GlyphService.TryGetUISpriteForActionPath(path, deviceCategory, out Sprite sprite))
if (GlyphService.TryGetUISpriteForActionPath(actionReference, deviceCategory, out Sprite sprite))
{
targetImage.sprite = sprite;
}

View File

@ -1,4 +1,5 @@
// TestRebindScript.cs
using System;
using System.Threading.Tasks;
using TMPro;
@ -9,23 +10,19 @@ using UnityEngine.UI;
public class TestRebindScript : MonoBehaviour
{
[Header("UI")]
public UXButton btn;
[Header("UI")] public UXButton btn;
public TextMeshProUGUI bindKeyText;
public Image targetImage;
[Tooltip("如果不使用 actionReference则用 name 在全局 manager 查找")]
public string actionName = "movement";
[Header("Optional composite part (WASD style)")]
[Tooltip("如果需要绑定 composite 的某一部分(例如 Up/Down/Left/Right填这个留空表示绑定非 composite 或整体 binding")]
[Header("Optional composite part (WASD style)")] [Tooltip("如果需要绑定 composite 的某一部分(例如 Up/Down/Left/Right填这个留空表示绑定非 composite 或整体 binding")]
public string compositePartName = "";
[Header("Behavior")]
[Tooltip("如果 true在 Prepare 后自动调用 ConfirmApply() 并保存;否则等待手动 ConfirmPrepared()/CancelPrepared()")]
[Header("Behavior")] [Tooltip("如果 true在 Prepare 后自动调用 ConfirmApply() 并保存;否则等待手动 ConfirmPrepared()/CancelPrepared()")]
public bool autoConfirm = false;
private int targetBindingIndex = -1;
private IDisposable prepareSub;
private IDisposable applySub;
private IDisposable rebindEndSub;
@ -34,8 +31,6 @@ public class TestRebindScript : MonoBehaviour
{
if (btn != null) btn.onClick.AddListener(OnBtnClicked);
InputDeviceWatcher.OnDeviceChanged += OnDeviceChanged;
ResolveBindingIndex();
UpdateBindingText();
if (InputBindingManager.Instance != null)
@ -74,26 +69,13 @@ public class TestRebindScript : MonoBehaviour
return InputBindingManager.Action(actionName);
}
private void ResolveBindingIndex()
{
var action = GetAction();
if (action == null)
{
Debug.LogError($"TestRebindScript: Action not found ('{actionName}').");
targetBindingIndex = -1;
return;
}
// Ask manager to choose best index for keyboard and optional composite part
targetBindingIndex = InputBindingManager.Instance.FindBestBindingIndexForKeyboard(action, string.IsNullOrEmpty(compositePartName) ? null : compositePartName);
}
private bool IsTargetContext(InputRemapper.InputBindingManager.RebindContext ctx)
{
if (ctx == null || ctx.action == null) return false;
var action = GetAction();
if (action == null) return false;
return ctx.action == action && ctx.bindingIndex == targetBindingIndex;
return ctx.action == action;
}
private void OnBtnClicked()
@ -116,7 +98,11 @@ public class TestRebindScript : MonoBehaviour
if (task == null) return false;
return await task;
}
catch (Exception ex) { Debug.LogError(ex); return false; }
catch (Exception ex)
{
Debug.LogError(ex);
return false;
}
}
public void CancelPrepared()
@ -135,21 +121,11 @@ public class TestRebindScript : MonoBehaviour
return;
}
// Ensure binding index is refreshed (action/bindings may change)
if (targetBindingIndex < 0 || targetBindingIndex >= action.bindings.Count)
ResolveBindingIndex();
if (targetBindingIndex < 0)
{
bindKeyText.text = "<no binding>";
if (targetImage != null) targetImage.sprite = null;
return;
}
string disp = GlyphService.GetBindingControlPath(action, InputDeviceWatcher.CurrentCategory);
bindKeyText.text = GlyphService.GetDisplayNameFromInputAction(action);
string disp = action.GetBindingDisplayString(targetBindingIndex);
bindKeyText.text = string.IsNullOrEmpty(disp) ? "<unbound>" : disp;
// **Important**: use GlyphService with InputAction and device category (not manager-internal path)
try
{
var deviceCat = InputDeviceWatcher.CurrentCategory;

View File

@ -666,7 +666,18 @@
{
"name": "",
"id": "d1e2e650-d247-4fab-a06c-5a6fb5ccd2a5",
"path": "*/{Cancel}",
"path": "<Gamepad>/buttonEast",
"interactions": "",
"processors": "",
"groups": "",
"action": "Cancel",
"isComposite": false,
"isPartOfComposite": false
},
{
"name": "",
"id": "1a2a3800-59d9-452a-b7a7-e3968ddab191",
"path": "<Keyboard>/escape",
"interactions": "",
"processors": "",
"groups": "",

View File

@ -9,11 +9,8 @@ using UnityEngine.UI;
public class TestAudioPlay : MonoBehaviour
{
public InputGlyphDatabase database;
public AudioSource audioSource;
[SerializeField] private UXHotkeyButton[] hotButtons;
Slider slider;
private Selectable Selectable;
public class UXAuditoHelper : IUXAudioHelper
{
private AudioSource _audioSource;
@ -51,7 +48,6 @@ public class TestAudioPlay : MonoBehaviour
private void Awake()
{
GlyphService.Database = database;
UXComponentExtensionsHelper.SetAudioHelper(new UXAuditoHelper(audioSource));
BindHotKeys();
}

View File

@ -1,27 +1,57 @@
fileFormatVersion: 2
guid: dffef66376be4fa480fb02b19edbe903
TextureImporter:
fileIDToRecycleName:
21300000: EmojiOne_0
21300002: EmojiOne_1
21300004: EmojiOne_2
21300006: EmojiOne_3
21300008: EmojiOne_4
21300010: EmojiOne_6
21300012: EmojiOne_7
21300014: EmojiOne_8
21300016: EmojiOne_9
21300018: EmojiOne_10
21300020: EmojiOne_11
21300022: EmojiOne_12
21300024: EmojiOne_13
21300026: EmojiOne_5
21300028: EmojiOne_14
internalIDToNameTable:
- first:
213: 21300000
second: EmojiOne_0
- first:
213: 21300002
second: EmojiOne_1
- first:
213: 21300004
second: EmojiOne_2
- first:
213: 21300006
second: EmojiOne_3
- first:
213: 21300008
second: EmojiOne_4
- first:
213: 21300010
second: EmojiOne_6
- first:
213: 21300012
second: EmojiOne_7
- first:
213: 21300014
second: EmojiOne_8
- first:
213: 21300016
second: EmojiOne_9
- first:
213: 21300018
second: EmojiOne_10
- first:
213: 21300020
second: EmojiOne_11
- first:
213: 21300022
second: EmojiOne_12
- first:
213: 21300024
second: EmojiOne_13
- first:
213: 21300026
second: EmojiOne_5
- first:
213: 21300028
second: EmojiOne_14
externalObjects: {}
serializedVersion: 5
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
@ -35,7 +65,12 @@ TextureImporter:
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
@ -44,9 +79,9 @@ TextureImporter:
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: -1
aniso: -1
mipBias: -1
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
@ -58,19 +93,26 @@ TextureImporter:
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 0
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 1
swizzle: 50462976
cookieLightType: 1
platformSettings:
- serializedVersion: 2
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 512
resizeAlgorithm: 0
@ -80,8 +122,10 @@ TextureImporter:
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
- serializedVersion: 2
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 512
resizeAlgorithm: 0
@ -91,8 +135,10 @@ TextureImporter:
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
- serializedVersion: 2
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: iPhone
maxTextureSize: 512
resizeAlgorithm: 0
@ -102,8 +148,10 @@ TextureImporter:
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
- serializedVersion: 2
forceMaximumCompressionQuality_BC6H_BC7: 1
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 512
resizeAlgorithm: 0
@ -113,7 +161,22 @@ TextureImporter:
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 1
- serializedVersion: 3
buildTarget: WebGL
maxTextureSize: 512
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites:
@ -121,18 +184,19 @@ TextureImporter:
name: EmojiOne_0
rect:
serializedVersion: 2
x: 0
y: 384
width: 128
height: 128
x: 4
y: 388
width: 120
height: 120
alignment: 0
pivot: {x: 0.5, y: 0.5}
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
outline: []
physicsShape: []
tessellationDetail: 0
bones: []
spriteID: 4bcc36da2108f2c4ba3de5c921d25c3c
internalID: 21300000
vertices: []
indices:
edges: []
@ -141,18 +205,19 @@ TextureImporter:
name: EmojiOne_1
rect:
serializedVersion: 2
x: 128
y: 384
width: 128
height: 128
x: 132
y: 388
width: 120
height: 120
alignment: 0
pivot: {x: 0.5, y: 0.5}
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
outline: []
physicsShape: []
tessellationDetail: 0
bones: []
spriteID: e9eea8093eaeaee4d901c4553f572c22
internalID: 21300002
vertices: []
indices:
edges: []
@ -161,18 +226,19 @@ TextureImporter:
name: EmojiOne_2
rect:
serializedVersion: 2
x: 256
y: 384
width: 128
height: 128
x: 260
y: 388
width: 120
height: 120
alignment: 0
pivot: {x: 0.5, y: 0.5}
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
outline: []
physicsShape: []
tessellationDetail: 0
bones: []
spriteID: 49451da35411dcc42a3692e39b0fde70
internalID: 21300004
vertices: []
indices:
edges: []
@ -181,18 +247,19 @@ TextureImporter:
name: EmojiOne_3
rect:
serializedVersion: 2
x: 384
y: 384
width: 128
height: 128
x: 388
y: 388
width: 120
height: 120
alignment: 0
pivot: {x: 0.5, y: 0.5}
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
outline: []
physicsShape: []
tessellationDetail: 0
bones: []
spriteID: f65709664b924904790c850a50ca82bc
internalID: 21300006
vertices: []
indices:
edges: []
@ -201,18 +268,19 @@ TextureImporter:
name: EmojiOne_4
rect:
serializedVersion: 2
x: 0
y: 256
width: 128
height: 128
x: 4
y: 260
width: 120
height: 120
alignment: 0
pivot: {x: 0.5, y: 0.5}
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
outline: []
physicsShape: []
tessellationDetail: 0
bones: []
spriteID: 5b92c568a5ec9ad4b9ed90e271f1c9a8
internalID: 21300008
vertices: []
indices:
edges: []
@ -221,18 +289,19 @@ TextureImporter:
name: EmojiOne_6
rect:
serializedVersion: 2
x: 256
y: 256
width: 128
height: 128
x: 260
y: 260
width: 120
height: 120
alignment: 0
pivot: {x: 0.5, y: 0.5}
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
outline: []
physicsShape: []
tessellationDetail: 0
bones: []
spriteID: b10f2b48b7281594bb8a24a6511a35af
internalID: 21300010
vertices: []
indices:
edges: []
@ -241,18 +310,19 @@ TextureImporter:
name: EmojiOne_7
rect:
serializedVersion: 2
x: 384
y: 256
width: 128
height: 128
x: 388
y: 260
width: 120
height: 120
alignment: 0
pivot: {x: 0.5, y: 0.5}
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
outline: []
physicsShape: []
tessellationDetail: 0
bones: []
spriteID: 10a600f9329dc2246a897e89f4d283cd
internalID: 21300012
vertices: []
indices:
edges: []
@ -261,18 +331,19 @@ TextureImporter:
name: EmojiOne_8
rect:
serializedVersion: 2
x: 0
y: 128
width: 128
height: 128
x: 4
y: 132
width: 120
height: 120
alignment: 0
pivot: {x: 0.5, y: 0.5}
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
outline: []
physicsShape: []
tessellationDetail: 0
bones: []
spriteID: 66cffa363b90ab14787d8a5b90cf4502
internalID: 21300014
vertices: []
indices:
edges: []
@ -281,18 +352,19 @@ TextureImporter:
name: EmojiOne_9
rect:
serializedVersion: 2
x: 128
y: 128
width: 128
height: 128
x: 132
y: 132
width: 120
height: 120
alignment: 0
pivot: {x: 0.5, y: 0.5}
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
outline: []
physicsShape: []
tessellationDetail: 0
bones: []
spriteID: 55cf3d409c9b89349b1e1bdc1cc224ad
internalID: 21300016
vertices: []
indices:
edges: []
@ -301,18 +373,19 @@ TextureImporter:
name: EmojiOne_10
rect:
serializedVersion: 2
x: 256
y: 128
width: 128
height: 128
x: 260
y: 132
width: 120
height: 120
alignment: 0
pivot: {x: 0.5, y: 0.5}
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
outline: []
physicsShape: []
tessellationDetail: 0
bones: []
spriteID: 2a9e58eaf96feef42bcefa1cf257193f
internalID: 21300018
vertices: []
indices:
edges: []
@ -321,18 +394,19 @@ TextureImporter:
name: EmojiOne_11
rect:
serializedVersion: 2
x: 384
y: 128
width: 128
height: 128
x: 388
y: 132
width: 120
height: 120
alignment: 0
pivot: {x: 0.5, y: 0.5}
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
outline: []
physicsShape: []
tessellationDetail: 0
bones: []
spriteID: 2489120affc155840ae6a7be2e93ce19
internalID: 21300020
vertices: []
indices:
edges: []
@ -341,18 +415,19 @@ TextureImporter:
name: EmojiOne_12
rect:
serializedVersion: 2
x: 0
y: 0
width: 128
height: 128
x: 4
y: 4
width: 120
height: 120
alignment: 0
pivot: {x: 0.5, y: 0.5}
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
outline: []
physicsShape: []
tessellationDetail: 0
bones: []
spriteID: 412349a150598d14da4d7140df5c0286
internalID: 21300022
vertices: []
indices:
edges: []
@ -361,18 +436,19 @@ TextureImporter:
name: EmojiOne_13
rect:
serializedVersion: 2
x: 128
y: 0
width: 128
height: 128
x: 132
y: 4
width: 120
height: 120
alignment: 0
pivot: {x: 0.5, y: 0.5}
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
outline: []
physicsShape: []
tessellationDetail: 0
bones: []
spriteID: a937464b42bb3634782dea34c6becb6c
internalID: 21300024
vertices: []
indices:
edges: []
@ -381,10 +457,10 @@ TextureImporter:
name: EmojiOne_5
rect:
serializedVersion: 2
x: 256
y: 0
width: 128
height: 128
x: 132
y: 260
width: 120
height: 120
alignment: 0
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
@ -393,6 +469,7 @@ TextureImporter:
tessellationDetail: 0
bones: []
spriteID: b0f933b217682124dbfc5e6b89abe3d0
internalID: 21300026
vertices: []
indices:
edges: []
@ -401,10 +478,10 @@ TextureImporter:
name: EmojiOne_14
rect:
serializedVersion: 2
x: 128
y: 256
width: 128
height: 128
x: 260
y: 4
width: 120
height: 120
alignment: 0
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
@ -413,6 +490,28 @@ TextureImporter:
tessellationDetail: 0
bones: []
spriteID: f7235c763afe4434e8bb666750a41096
internalID: 21300028
vertices: []
indices:
edges: []
weights: []
- serializedVersion: 2
name: EmojiOne_15
rect:
serializedVersion: 2
x: 388
y: 4
width: 120
height: 120
alignment: 0
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
outline: []
physicsShape: []
tessellationDetail: 0
bones: []
spriteID: a436e8e6563ab82468bdca71043fbfa4
internalID: -1093879911
vertices: []
indices:
edges: []
@ -421,11 +520,31 @@ TextureImporter:
physicsShape: []
bones: []
spriteID: 3e32d8f5477abfc43b19066e8ad5032e
internalID: 0
vertices: []
indices:
edges: []
weights: []
spritePackingTag:
secondaryTextures: []
nameFileIdTable:
EmojiOne_0: 21300000
EmojiOne_1: 21300002
EmojiOne_10: 21300018
EmojiOne_11: 21300020
EmojiOne_12: 21300022
EmojiOne_13: 21300024
EmojiOne_14: 21300028
EmojiOne_15: -1093879911
EmojiOne_2: 21300004
EmojiOne_3: 21300006
EmojiOne_4: 21300008
EmojiOne_5: 21300026
EmojiOne_6: 21300010
EmojiOne_7: 21300012
EmojiOne_8: 21300014
EmojiOne_9: 21300016
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1 +1 @@
{"bindings":[{"action":"input.map.player/input.action.movement","id":"15d59094-85d1-408d-b565-724532c15263","path":"<Keyboard>/v","interactions":"null","processors":"null"}]}
{"bindings":[{"action":"input.map.player/input.action.movement","id":"15d59094-85d1-408d-b565-724532c15263","path":"<Keyboard>/2","interactions":"null","processors":"null"}]}

@ -1 +1 @@
Subproject commit da3a43a2a647bf7c28cb247024f84ae0a28b54ff
Subproject commit 57c49b1e2f59087abbfb6b2f64970dc558145a7a

@ -1 +1 @@
Subproject commit d17eaaaa8b9fbdc64b1e1b1cf48c7b9d79957fb7
Subproject commit 5084130abe0668f57385437cc92a68a542238fd0

View File

@ -30,10 +30,10 @@ EditorUserSettings:
value: 54010c54510c5a5f5a0a0973477b0a4414151a2b757925367a7e4a6ab1b66260
flags: 0
RecentlyUsedSceneGuid-7:
value: 50500404540c580d0f0b5e7543725b44424f4c7a7b7c7734747e4f36e4b1676d
value: 5a07065703500c59585e0e7748770d44444f4a737d2d7f35787d4f63e0b26668
flags: 0
RecentlyUsedSceneGuid-8:
value: 5a07065703500c59585e0e7748770d44444f4a737d2d7f35787d4f63e0b26668
value: 50500404540c580d0f0b5e7543725b44424f4c7a7b7c7734747e4f36e4b1676d
flags: 0
RecentlyUsedSceneGuid-9:
value: 015450045700505d0f0a5f2313260a444e164b2e757b76652c2d4d32bab0313a

View File

@ -19,12 +19,64 @@ MonoBehaviour:
width: 1920
height: 997
m_ShowMode: 4
m_Title: Inspector
m_RootView: {fileID: 2}
m_Title: Hierarchy
m_RootView: {fileID: 4}
m_MinSize: {x: 875, y: 300}
m_MaxSize: {x: 10000, y: 10000}
m_Maximized: 1
--- !u!114 &2
MonoBehaviour:
m_ObjectHideFlags: 52
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: 12006, guid: 0000000000000000e000000000000000, type: 0}
m_Name: GameView
m_EditorClassIdentifier:
m_Children: []
m_Position:
serializedVersion: 2
x: 0
y: 491
width: 612
height: 456
m_MinSize: {x: 50, y: 50}
m_MaxSize: {x: 4000, y: 4000}
m_ActualView: {fileID: 14}
m_Panes:
- {fileID: 14}
m_Selected: 0
m_LastSelected: 0
--- !u!114 &3
MonoBehaviour:
m_ObjectHideFlags: 52
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: 12010, guid: 0000000000000000e000000000000000, type: 0}
m_Name:
m_EditorClassIdentifier:
m_Children:
- {fileID: 8}
- {fileID: 2}
m_Position:
serializedVersion: 2
x: 0
y: 0
width: 612
height: 947
m_MinSize: {x: 100, y: 100}
m_MaxSize: {x: 8096, y: 16192}
vertical: 1
controlID: 17
draggingID: 0
--- !u!114 &4
MonoBehaviour:
m_ObjectHideFlags: 52
m_CorrespondingSourceObject: {fileID: 0}
@ -37,9 +89,9 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
m_Children:
- {fileID: 3}
- {fileID: 5}
- {fileID: 4}
- {fileID: 7}
- {fileID: 6}
m_Position:
serializedVersion: 2
x: 0
@ -52,7 +104,7 @@ MonoBehaviour:
m_TopViewHeight: 30
m_UseBottomView: 1
m_BottomViewHeight: 20
--- !u!114 &3
--- !u!114 &5
MonoBehaviour:
m_ObjectHideFlags: 52
m_CorrespondingSourceObject: {fileID: 0}
@ -74,7 +126,7 @@ MonoBehaviour:
m_MinSize: {x: 0, y: 0}
m_MaxSize: {x: 0, y: 0}
m_LastLoadedLayoutName:
--- !u!114 &4
--- !u!114 &6
MonoBehaviour:
m_ObjectHideFlags: 52
m_CorrespondingSourceObject: {fileID: 0}
@ -95,7 +147,7 @@ MonoBehaviour:
height: 20
m_MinSize: {x: 0, y: 0}
m_MaxSize: {x: 0, y: 0}
--- !u!114 &5
--- !u!114 &7
MonoBehaviour:
m_ObjectHideFlags: 52
m_CorrespondingSourceObject: {fileID: 0}
@ -108,7 +160,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
m_Children:
- {fileID: 6}
- {fileID: 3}
- {fileID: 9}
- {fileID: 12}
- {fileID: 13}
@ -121,35 +173,9 @@ MonoBehaviour:
m_MinSize: {x: 400, y: 100}
m_MaxSize: {x: 32384, y: 16192}
vertical: 0
controlID: 155
controlID: 144
draggingID: 0
--- !u!114 &6
MonoBehaviour:
m_ObjectHideFlags: 52
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: 12010, guid: 0000000000000000e000000000000000, type: 0}
m_Name:
m_EditorClassIdentifier:
m_Children:
- {fileID: 7}
- {fileID: 8}
m_Position:
serializedVersion: 2
x: 0
y: 0
width: 468
height: 947
m_MinSize: {x: 100, y: 100}
m_MaxSize: {x: 8096, y: 16192}
vertical: 1
controlID: 25
draggingID: 0
--- !u!114 &7
--- !u!114 &8
MonoBehaviour:
m_ObjectHideFlags: 52
m_CorrespondingSourceObject: {fileID: 0}
@ -166,42 +192,16 @@ MonoBehaviour:
serializedVersion: 2
x: 0
y: 0
width: 468
height: 363
m_MinSize: {x: 201, y: 221}
m_MaxSize: {x: 4001, y: 4021}
width: 612
height: 491
m_MinSize: {x: 200, y: 200}
m_MaxSize: {x: 4000, y: 4000}
m_ActualView: {fileID: 16}
m_Panes:
- {fileID: 15}
- {fileID: 16}
m_Selected: 1
m_LastSelected: 0
--- !u!114 &8
MonoBehaviour:
m_ObjectHideFlags: 52
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: 12006, guid: 0000000000000000e000000000000000, type: 0}
m_Name: GameView
m_EditorClassIdentifier:
m_Children: []
m_Position:
serializedVersion: 2
x: 0
y: 363
width: 468
height: 584
m_MinSize: {x: 51, y: 71}
m_MaxSize: {x: 4001, y: 4021}
m_ActualView: {fileID: 14}
m_Panes:
- {fileID: 14}
m_Selected: 0
m_LastSelected: 0
--- !u!114 &9
MonoBehaviour:
m_ObjectHideFlags: 52
@ -219,14 +219,14 @@ MonoBehaviour:
- {fileID: 11}
m_Position:
serializedVersion: 2
x: 468
x: 612
y: 0
width: 288
width: 333
height: 947
m_MinSize: {x: 100, y: 100}
m_MaxSize: {x: 8096, y: 16192}
vertical: 1
controlID: 69
controlID: 49
draggingID: 0
--- !u!114 &10
MonoBehaviour:
@ -245,8 +245,8 @@ MonoBehaviour:
serializedVersion: 2
x: 0
y: 0
width: 288
height: 601
width: 333
height: 461
m_MinSize: {x: 202, y: 221}
m_MaxSize: {x: 4002, y: 4021}
m_ActualView: {fileID: 17}
@ -270,9 +270,9 @@ MonoBehaviour:
m_Position:
serializedVersion: 2
x: 0
y: 601
width: 288
height: 346
y: 461
width: 333
height: 486
m_MinSize: {x: 102, y: 121}
m_MaxSize: {x: 4002, y: 4021}
m_ActualView: {fileID: 18}
@ -295,9 +295,9 @@ MonoBehaviour:
m_Children: []
m_Position:
serializedVersion: 2
x: 756
x: 945
y: 0
width: 183
width: 332
height: 947
m_MinSize: {x: 232, y: 271}
m_MaxSize: {x: 10002, y: 10021}
@ -321,9 +321,9 @@ MonoBehaviour:
m_Children: []
m_Position:
serializedVersion: 2
x: 939
x: 1277
y: 0
width: 981
width: 643
height: 947
m_MinSize: {x: 276, y: 71}
m_MaxSize: {x: 4001, y: 4021}
@ -353,9 +353,9 @@ MonoBehaviour:
m_Pos:
serializedVersion: 2
x: 0
y: 436
width: 467
height: 563
y: 564
width: 611
height: 435
m_SerializedDataModeController:
m_DataMode: 0
m_PreferredDataMode: 0
@ -408,10 +408,10 @@ MonoBehaviour:
serializedVersion: 2
x: 0
y: 21
width: 467
height: 542
m_Scale: {x: 0.24322917, y: 0.24322918}
m_Translation: {x: 233.5, y: 271}
width: 611
height: 414
m_Scale: {x: 0.31822917, y: 0.31822917}
m_Translation: {x: 305.5, y: 207}
m_MarginLeft: 0
m_MarginRight: 0
m_MarginTop: 0
@ -419,12 +419,12 @@ MonoBehaviour:
m_LastShownAreaInsideMargins:
serializedVersion: 2
x: -960
y: -1114.1755
y: -650.4746
width: 1920
height: 2228.351
height: 1300.9492
m_MinimalGUI: 1
m_defaultScale: 0.24322917
m_LastWindowPixelSize: {x: 467, y: 563}
m_defaultScale: 0.31822917
m_LastWindowPixelSize: {x: 611, y: 435}
m_ClearInEditMode: 1
m_NoCameraWarning: 1
m_LowResolutionForAspectRatios: 01000000000000000000
@ -451,9 +451,9 @@ MonoBehaviour:
m_Pos:
serializedVersion: 2
x: 0
y: 73
width: 518
height: 926
y: 79
width: 365
height: 915
m_SerializedDataModeController:
m_DataMode: 0
m_PreferredDataMode: 0
@ -522,8 +522,8 @@ MonoBehaviour:
serializedVersion: 2
x: 0
y: 73
width: 467
height: 342
width: 611
height: 470
m_SerializedDataModeController:
m_DataMode: 0
m_PreferredDataMode: 0
@ -538,8 +538,8 @@ MonoBehaviour:
floating: 0
collapsed: 0
displayed: 1
snapOffset: {x: -179, y: -26}
snapOffsetDelta: {x: 0, y: 0}
snapOffset: {x: -174, y: -26}
snapOffsetDelta: {x: -5, y: 0}
snapCorner: 3
id: Tool Settings
index: 0
@ -616,9 +616,9 @@ MonoBehaviour:
floating: 0
collapsed: 0
displayed: 1
snapOffset: {x: 24, y: 64}
snapOffset: {x: 24, y: -131}
snapOffsetDelta: {x: 0, y: 0}
snapCorner: 0
snapCorner: 2
id: Orientation
index: 0
layout: 4
@ -867,7 +867,7 @@ MonoBehaviour:
snapOffsetDelta: {x: 0, y: 0}
snapCorner: 0
id: UnityEditor.SceneViewCameraOverlay
index: 10
index: 9
layout: 4
size: {x: 0, y: 0}
sizeOverriden: 0
@ -1064,9 +1064,9 @@ MonoBehaviour:
m_PlayAudio: 0
m_AudioPlay: 0
m_Position:
m_Target: {x: 1241.503, y: 212.77849, z: -0.5889411}
m_Target: {x: 1194.6714, y: 398.0959, z: -5.0133038}
speed: 2
m_Value: {x: 1241.503, y: 212.77849, z: -0.5889411}
m_Value: {x: 1194.6714, y: 398.0959, z: -5.0133038}
m_RenderMode: 0
m_CameraMode:
drawMode: 0
@ -1116,9 +1116,9 @@ MonoBehaviour:
speed: 2
m_Value: {x: 0, y: 0, z: 0, w: 1}
m_Size:
m_Target: 161.9702
m_Target: 694.8482
speed: 2
m_Value: 161.9702
m_Value: 694.8482
m_Ortho:
m_Target: 1
speed: 2
@ -1163,10 +1163,10 @@ MonoBehaviour:
m_Tooltip:
m_Pos:
serializedVersion: 2
x: 468
x: 612
y: 73
width: 286
height: 580
width: 331
height: 440
m_SerializedDataModeController:
m_DataMode: 0
m_PreferredDataMode: 0
@ -1182,7 +1182,7 @@ MonoBehaviour:
scrollPos: {x: 0, y: 0}
m_SelectedIDs:
m_LastClickedID: 0
m_ExpandedIDs: b0faffff006e0000
m_ExpandedIDs: c8faffff286e0000
m_RenameOverlay:
m_UserAcceptedRename: 0
m_Name:
@ -1198,7 +1198,7 @@ MonoBehaviour:
m_IsRenaming: 0
m_OriginalEventType: 11
m_IsRenamingFilename: 0
m_ClientGUIView: {fileID: 10}
m_ClientGUIView: {fileID: 8}
m_SearchString:
m_ExpandedScenes: []
m_CurrenRootInstanceID: 0
@ -1226,10 +1226,10 @@ MonoBehaviour:
m_Tooltip:
m_Pos:
serializedVersion: 2
x: 468
y: 674
width: 286
height: 325
x: 612
y: 534
width: 331
height: 465
m_SerializedDataModeController:
m_DataMode: 0
m_PreferredDataMode: 0
@ -1260,9 +1260,9 @@ MonoBehaviour:
m_Tooltip:
m_Pos:
serializedVersion: 2
x: 756
x: 945
y: 73
width: 181
width: 330
height: 926
m_SerializedDataModeController:
m_DataMode: 0
@ -1283,9 +1283,9 @@ MonoBehaviour:
m_SceneHandles:
m_ShowAllHits: 0
m_SkipHidden: 0
m_SearchArea: 0
m_SearchArea: 1
m_Folders:
- Assets/InputGlyph
- Assets
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: 00000000e86f0000987200004e74000050740000527400005474000056740000587400005a7400005c7400005e74000060740000627400006474000066740000687400006a7400006c7400006e74000070740000727400007474000076740000787400007a7400007c7400007e74000080740000827400008474000086740000887400008a7400008c7400008e74000090740000927400009474000096740000987400009a7400009c7400009e740000a0740000a2740000a4740000a6740000a8740000aa740000ac740000ae740000b0740000b2740000b4740000b6740000b8740000ba740000bc740000be740000c0740000c2740000c4740000c6740000c8740000ca740000cc740000ce740000d0740000d2740000d4740000d6740000d8740000da740000dc740000de740000e0740000e2740000e4740000e6740000e8740000ea740000ec740000ee740000f0740000f2740000f4740000f6740000f8740000fa740000fc740000fe74000000750000027500000475000006750000087500000a7500000c7500000e75000010750000127500001475000016750000187500001a7500001c7500001e75000020750000227500002475000026750000287500002a7500002c7500002e75000030750000327500003475000036750000387500003a7500003c7500003e75000040750000427500004475000046750000487500004a7500004c7500004e75000050750000527500005475000056750000587500005a7500005c7500005e75000060750000627500006475000066750000687500006a7500006c7500006e75000070750000727500007475000076750000787500007a7500007c7500007e75000080750000827500008475000086750000887500008a7500008c7500008e75000090750000927500009475000096750000987500009a7500009c7500009e750000a0750000a2750000a4750000a6750000a8750000aa750000ac750000ae750000b0750000b2750000b4750000b6750000b8750000ba750000bc750000be750000c0750000c2750000c4750000c6750000c8750000ca750000cc750000ce750000d0750000d2750000d4750000d6750000d8750000da750000dc750000de750000e0750000e2750000e4750000e6750000e8750000ea750000ec750000ee750000f0750000f2750000f4750000f6750000f8750000fa750000fc750000fe75000000760000027600000476000006760000087600000a7600000c7600000e7600001076000012760000147600001676000018760000
m_ExpandedIDs: 0000000006740000087400000a7400000c7400000e74000010740000127400001474000016740000187400001a7400001c7400001e74000020740000227400002474000026740000287400002a7400002c7400002e74000030740000327400003474000036740000387400003a7400003c7400003e74000040740000427400004474000046740000487400004a7400004c7400004e74000050740000527400005474000056740000587400005a7400005c7400005e74000060740000627400006474000066740000687400006a7400006c7400006e74000070740000727400007474000076740000787400007a7400007c7400007e74000080740000827400008474000086740000887400008a7400008c7400008e74000090740000927400009474000096740000987400009a7400009c7400009e740000a0740000a2740000a4740000a6740000a8740000aa740000ac740000ae740000b0740000b2740000b4740000b6740000b8740000ba740000bc740000be740000c0740000c2740000c4740000c6740000c8740000ca740000cc740000ce740000d0740000d2740000d4740000d6740000d8740000da740000dc740000de740000e0740000e2740000e4740000e6740000e8740000ea740000ec740000ee740000f0740000f2740000f4740000f6740000f8740000fa740000fc740000fe74000000750000027500000475000006750000087500000a7500000c7500000e75000010750000127500001475000016750000187500001a7500001c7500001e75000020750000227500002475000026750000287500002a7500002c7500002e75000030750000327500003475000036750000387500003a7500003c7500003e75000040750000427500004475000046750000487500004a7500004c7500004e75000050750000527500005475000056750000587500005a7500005c7500005e75000060750000627500006475000066750000687500006a7500006c7500006e75000070750000727500007475000076750000787500007a7500007c7500007e75000080750000827500008475000086750000887500008a7500008c7500008e75000090750000927500009475000096750000987500009a7500009c7500009e750000a0750000a2750000a4750000a6750000a8750000aa750000ac750000ae750000b0750000b2750000b4750000b6750000b8750000ba750000bc750000be750000c0750000c2750000c4750000
m_RenameOverlay:
m_UserAcceptedRename: 0
m_Name:
@ -1329,21 +1329,21 @@ MonoBehaviour:
scrollPos: {x: 0, y: 0}
m_SelectedIDs:
m_LastClickedID: 0
m_ExpandedIDs: ffffffff00000000e86f0000987200004e74000050740000527400005474000056740000587400005a7400005c7400005e74000060740000627400006474000066740000687400006a7400006c7400006e74000070740000727400007474000076740000787400007a7400007c7400007e74000080740000827400008474000086740000887400008a7400008c7400008e74000090740000927400009474000096740000987400009a7400009c7400009e740000a0740000a2740000a4740000a6740000a8740000aa740000ac740000ae740000b0740000b2740000b4740000b6740000b8740000ba740000bc740000be740000c0740000c2740000c4740000c6740000c8740000ca740000cc740000ce740000d0740000d2740000d4740000d6740000d8740000da740000dc740000de740000e0740000e2740000e4740000e6740000e8740000ea740000ec740000ee740000f0740000f2740000f4740000f6740000f8740000fa740000fc740000fe74000000750000027500000475000006750000087500000a7500000c7500000e75000010750000127500001475000016750000187500001a7500001c7500001e75000020750000227500002475000026750000287500002a7500002c7500002e75000030750000327500003475000036750000387500003a7500003c7500003e75000040750000427500004475000046750000487500004a7500004c7500004e75000050750000527500005475000056750000587500005a7500005c7500005e75000060750000627500006475000066750000687500006a7500006c7500006e75000070750000727500007475000076750000787500007a7500007c7500007e75000080750000827500008475000086750000887500008a7500008c7500008e75000090750000927500009475000096750000987500009a7500009c7500009e750000a0750000a2750000a4750000a6750000a8750000aa750000ac750000ae750000b0750000b2750000b4750000b6750000b8750000ba750000bc750000be750000c0750000c2750000c4750000c6750000c8750000ca750000cc750000ce750000d0750000d2750000d4750000d6750000d8750000da750000dc750000de750000e0750000e2750000e4750000e6750000e8750000ea750000ec750000ee750000f0750000f2750000f4750000f6750000f8750000fa750000fc750000fe75000000760000027600000476000006760000087600000a7600000c7600000e7600001076000012760000147600001676000018760000
m_ExpandedIDs: ffffffff0000000006740000087400000a7400000c7400000e74000010740000127400001474000016740000187400001a7400001c7400001e74000020740000227400002474000026740000287400002a7400002c7400002e74000030740000327400003474000036740000387400003a7400003c7400003e74000040740000427400004474000046740000487400004a7400004c7400004e74000050740000527400005474000056740000587400005a7400005c7400005e74000060740000627400006474000066740000687400006a7400006c7400006e74000070740000727400007474000076740000787400007a7400007c7400007e74000080740000827400008474000086740000887400008a7400008c7400008e74000090740000927400009474000096740000987400009a7400009c7400009e740000a0740000a2740000a4740000a6740000a8740000aa740000ac740000ae740000b0740000b2740000b4740000b6740000b8740000ba740000bc740000be740000c0740000c2740000c4740000c6740000c8740000ca740000cc740000ce740000d0740000d2740000d4740000d6740000d8740000da740000dc740000de740000e0740000e2740000e4740000e6740000e8740000ea740000ec740000ee740000f0740000f2740000f4740000f6740000f8740000fa740000fc740000fe74000000750000027500000475000006750000087500000a7500000c7500000e75000010750000127500001475000016750000187500001a7500001c7500001e75000020750000227500002475000026750000287500002a7500002c7500002e75000030750000327500003475000036750000387500003a7500003c7500003e75000040750000427500004475000046750000487500004a7500004c7500004e75000050750000527500005475000056750000587500005a7500005c7500005e75000060750000627500006475000066750000687500006a7500006c7500006e75000070750000727500007475000076750000787500007a7500007c7500007e75000080750000827500008475000086750000887500008a7500008c7500008e75000090750000927500009475000096750000987500009a7500009c7500009e750000a0750000a2750000a4750000a6750000a8750000aa750000ac750000ae750000b0750000b2750000b4750000b6750000b8750000ba750000bc750000be750000c0750000c2750000c4750000
m_RenameOverlay:
m_UserAcceptedRename: 0
m_Name:
m_OriginalName:
m_Name: InputBindingManager
m_OriginalName: InputBindingManager
m_EditFieldRect:
serializedVersion: 2
x: 0
y: 0
width: 0
height: 0
m_UserData: 0
m_UserData: 10908
m_IsWaitingForDelay: 0
m_IsRenaming: 0
m_OriginalEventType: 11
m_OriginalEventType: 0
m_IsRenamingFilename: 1
m_ClientGUIView: {fileID: 12}
m_SearchString:
@ -1405,9 +1405,9 @@ MonoBehaviour:
m_Tooltip:
m_Pos:
serializedVersion: 2
x: 939
x: 1277
y: 73
width: 980
width: 642
height: 926
m_SerializedDataModeController:
m_DataMode: 0
@ -1422,11 +1422,11 @@ MonoBehaviour:
m_ObjectsLockedBeforeSerialization: []
m_InstanceIDsLockedBeforeSerialization:
m_PreviewResizer:
m_CachedPref: 151
m_CachedPref: 318
m_ControlHash: 1412526313
m_PrefName: Preview_InspectorPreview
m_LastInspectedObjectInstanceID: -1
m_LastVerticalScrollValue: 0
m_LastVerticalScrollValue: 459
m_GlobalObjectId:
m_InspectorMode: 0
m_LockTracker: