This commit is contained in:
ALIENJACK\alien 2024-08-22 15:16:58 +08:00
parent 71b4bdef6b
commit 0290ebbd06
37 changed files with 8445 additions and 2157 deletions

View File

@ -137,6 +137,10 @@ Material:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ParamTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Floats:
- _ColorMask: 15
- _Stencil: 0
@ -285,6 +289,10 @@ Material:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ParamTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Floats:
- _ColorMask: 15
- _Stencil: 0
@ -319,6 +327,10 @@ Material:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ParamTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Floats:
- _ColorMask: 15
- _Stencil: 0
@ -353,6 +365,10 @@ Material:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ParamTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Floats:
- _ColorMask: 15
- _Stencil: 0

View File

@ -0,0 +1,798 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &29419265480821815
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8126322204359135913}
- component: {fileID: 2718916271043989317}
- component: {fileID: 3380485461544738227}
m_Layer: 5
m_Name: Descript
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &8126322204359135913
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 29419265480821815}
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_Children: []
m_Father: {fileID: 8789823129857705082}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 33}
m_Pivot: {x: 0, y: 1}
--- !u!222 &2718916271043989317
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 29419265480821815}
m_CullTransparentMesh: 1
--- !u!114 &3380485461544738227
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 29419265480821815}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, 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_FontData:
m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
m_FontSize: 20
m_FontStyle: 0
m_BestFit: 0
m_MinSize: 2
m_MaxSize: 300
m_Alignment: 4
m_AlignByGeometry: 0
m_RichText: 1
m_HorizontalOverflow: 1
m_VerticalOverflow: 1
m_LineSpacing: 1
m_Text: DESCRIPTION
--- !u!1 &734025543935719296
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1323634865265500141}
- component: {fileID: 5792146190930927166}
- component: {fileID: 2619187604372594158}
- component: {fileID: 1779247868001543556}
- component: {fileID: 4496630961732192070}
- component: {fileID: 2059277597780235898}
m_Layer: 5
m_Name: shadowIcon
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &1323634865265500141
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 734025543935719296}
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_Children: []
m_Father: {fileID: 6087025893861054323}
m_RootOrder: 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!222 &5792146190930927166
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 734025543935719296}
m_CullTransparentMesh: 1
--- !u!114 &2619187604372594158
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 734025543935719296}
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: 21300000, guid: 230e155ce0d5a8d4283675d040631efc, type: 3}
m_Type: 0
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!114 &1779247868001543556
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 734025543935719296}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f8b2ed11d675446c5a49da1ea296d490, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Version: 300
m_EffectMaterial: {fileID: 21305736874167728, guid: aee96bc531e6eba468ec405e536f515f, type: 2}
m_EffectFactor: 0
m_ColorFactor: 0
m_BlurFactor: 0
m_EffectMode: 0
m_ColorMode: 1
m_BlurMode: 3
m_AdvancedBlur: 1
m_ShadowBlur: 1
m_ShadowStyle: 0
m_ShadowColor: {r: 0, g: 0, b: 0, a: 1}
m_EffectDistance: {x: 1, y: -1}
m_UseGraphicAlpha: 1
m_EffectColor: {r: 1, g: 1, b: 1, a: 1}
m_AdditionalShadows: []
--- !u!114 &4496630961732192070
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 734025543935719296}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 0848bff101191904ead4bb831f7084db, type: 3}
m_Name:
m_EditorClassIdentifier:
m_BlurFactor: 1
m_Style: 3
m_AdditionalShadows: []
m_EffectColor: {r: 1, g: 1, b: 1, a: 0}
m_EffectDistance: {x: 8, y: 8}
m_UseGraphicAlpha: 0
--- !u!95 &2059277597780235898
Animator:
serializedVersion: 3
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 734025543935719296}
m_Enabled: 1
m_Avatar: {fileID: 0}
m_Controller: {fileID: 9100000, guid: 0b3ccf7414d2ead43be0cd33b6e1b53c, type: 2}
m_CullingMode: 0
m_UpdateMode: 0
m_ApplyRootMotion: 0
m_LinearVelocityBlending: 0
m_WarningMessage:
m_HasTransformHierarchy: 1
m_AllowConstantClipSamplingOptimization: 1
m_KeepAnimatorControllerStateOnDisable: 0
--- !u!1 &1776357407830023228
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 6087025893861054323}
- component: {fileID: 7036072602178187444}
- component: {fileID: 6771349210554360888}
m_Layer: 5
m_Name: Icon
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &6087025893861054323
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1776357407830023228}
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_Children:
- {fileID: 1323634865265500141}
m_Father: {fileID: 8754483333502849411}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 1}
m_AnchorMax: {x: 0.5, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 100, y: 100}
m_Pivot: {x: 0.5, y: 1}
--- !u!222 &7036072602178187444
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1776357407830023228}
m_CullTransparentMesh: 1
--- !u!114 &6771349210554360888
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1776357407830023228}
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: 21300000, guid: 230e155ce0d5a8d4283675d040631efc, type: 3}
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 &3189920797946144379
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1998281097548910301}
- component: {fileID: -3959751710151339114}
- component: {fileID: 5700455559359757662}
m_Layer: 5
m_Name: Game_NES_Template
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &1998281097548910301
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3189920797946144379}
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_Children:
- {fileID: 8754483333502849411}
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 100, y: 102}
m_Pivot: {x: 0, y: 0.5}
--- !u!114 &-3959751710151339114
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3189920797946144379}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: e2f2e38adaa854144b67512333b1b363, type: 3}
m_Name:
m_EditorClassIdentifier:
Icon: {fileID: 6771349210554360888}
Txt: {fileID: 991446423622995247}
Descript: {fileID: 3380485461544738227}
Root: {fileID: 8754483333502849411}
ShadowIcon: {fileID: 2619187604372594158}
InfoNode: {fileID: 5331629140490413834}
SubMenuItemGroup: {fileID: 0}
SelectScale: 1
UnSelectScale: 1
RomGroup: {fileID: 6055880809428073973}
RomGroupRoot: {fileID: 3086674949377227884}
--- !u!114 &5700455559359757662
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3189920797946144379}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
m_Name:
m_EditorClassIdentifier:
m_IgnoreLayout: 0
m_MinWidth: -1
m_MinHeight: -1
m_PreferredWidth: 200
m_PreferredHeight: 230
m_FlexibleWidth: -1
m_FlexibleHeight: -1
m_LayoutPriority: 1
--- !u!1 &3462611600707696275
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2303118795734916657}
m_Layer: 5
m_Name: viewport
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &2303118795734916657
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3462611600707696275}
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_Children:
- {fileID: 8865437771338118001}
m_Father: {fileID: 331028397738758164}
m_RootOrder: 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!1 &3811189825355447390
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 331028397738758164}
- component: {fileID: 3428297980621487917}
- component: {fileID: 4672405243908051711}
- component: {fileID: 3086674949377227884}
m_Layer: 5
m_Name: RomGroupScroll
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &331028397738758164
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3811189825355447390}
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_Children:
- {fileID: 2303118795734916657}
m_Father: {fileID: 8754483333502849411}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 1, y: 0.5}
m_AnchorMax: {x: 1, y: 0.5}
m_AnchoredPosition: {x: 50, y: -165.08997}
m_SizeDelta: {x: 2338.0796, y: 1768.3333}
m_Pivot: {x: 0, y: 0.5}
--- !u!114 &3428297980621487917
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3811189825355447390}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 1aa08ab6e0800fa44ae55d278d1423e3, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Content: {fileID: 8865437771338118001}
m_Horizontal: 0
m_Vertical: 1
m_MovementType: 1
m_Elasticity: 0.1
m_Inertia: 1
m_DecelerationRate: 0.135
m_ScrollSensitivity: 1
m_Viewport: {fileID: 2303118795734916657}
m_HorizontalScrollbar: {fileID: 0}
m_VerticalScrollbar: {fileID: 0}
m_HorizontalScrollbarVisibility: 0
m_VerticalScrollbarVisibility: 0
m_HorizontalScrollbarSpacing: 0
m_VerticalScrollbarSpacing: 0
m_OnValueChanged:
m_PersistentCalls:
m_Calls: []
--- !u!114 &4672405243908051711
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3811189825355447390}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 1d1e3e91ac34bc8468f357ee247ffb6a, type: 3}
m_Name:
m_EditorClassIdentifier:
WidthFix: 225
--- !u!225 &3086674949377227884
CanvasGroup:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3811189825355447390}
m_Enabled: 1
m_Alpha: 1
m_Interactable: 1
m_BlocksRaycasts: 1
m_IgnoreParentGroups: 0
--- !u!1 &3993825260653792697
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8789823129857705082}
- component: {fileID: 3252398029444565139}
- component: {fileID: 4972426757569440742}
- component: {fileID: 5331629140490413834}
m_Layer: 5
m_Name: InfoNode
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &8789823129857705082
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3993825260653792697}
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_Children:
- {fileID: 6095356919362338847}
- {fileID: 8126322204359135913}
m_Father: {fileID: 8754483333502849411}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 1, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0, y: 0.5}
--- !u!114 &3252398029444565139
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3993825260653792697}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Padding:
m_Left: 20
m_Right: 0
m_Top: 0
m_Bottom: 0
m_ChildAlignment: 3
m_Spacing: 0
m_ChildForceExpandWidth: 0
m_ChildForceExpandHeight: 1
m_ChildControlWidth: 1
m_ChildControlHeight: 0
m_ChildScaleWidth: 0
m_ChildScaleHeight: 0
m_ReverseArrangement: 0
--- !u!114 &4972426757569440742
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3993825260653792697}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
m_Name:
m_EditorClassIdentifier:
m_HorizontalFit: 2
m_VerticalFit: 2
--- !u!225 &5331629140490413834
CanvasGroup:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3993825260653792697}
m_Enabled: 1
m_Alpha: 1
m_Interactable: 1
m_BlocksRaycasts: 1
m_IgnoreParentGroups: 0
--- !u!1 &5340761592919397836
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 6095356919362338847}
- component: {fileID: 7651669947470814669}
- component: {fileID: 991446423622995247}
m_Layer: 5
m_Name: Name
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &6095356919362338847
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5340761592919397836}
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_Children: []
m_Father: {fileID: 8789823129857705082}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 33}
m_Pivot: {x: 0, y: 1}
--- !u!222 &7651669947470814669
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5340761592919397836}
m_CullTransparentMesh: 1
--- !u!114 &991446423622995247
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5340761592919397836}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, 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_FontData:
m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
m_FontSize: 20
m_FontStyle: 0
m_BestFit: 0
m_MinSize: 2
m_MaxSize: 300
m_Alignment: 4
m_AlignByGeometry: 0
m_RichText: 1
m_HorizontalOverflow: 1
m_VerticalOverflow: 1
m_LineSpacing: 1
m_Text: NAME
--- !u!1 &6164337287601107676
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8865437771338118001}
- component: {fileID: 6055880809428073973}
- component: {fileID: 1286529697012677180}
m_Layer: 5
m_Name: RomGroup
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &8865437771338118001
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6164337287601107676}
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_Children: []
m_Father: {fileID: 2303118795734916657}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0, y: 1}
--- !u!114 &6055880809428073973
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6164337287601107676}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fdacbe30e88f6a844a435595a4affdbb, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Padding:
m_Left: 0
m_Right: 0
m_Top: 0
m_Bottom: 0
m_ChildAlignment: 0
m_StartCorner: 0
m_StartAxis: 0
m_CellSize: {x: 500, y: 200}
m_Spacing: {x: 0, y: 10}
m_Constraint: 1
m_ConstraintCount: 1
ItemTemplate: {fileID: 1998281097548910301, guid: e6df0d7c236795247971f0d1e691b068, type: 3}
ViewRect: {fileID: 2303118795734916657}
PauseUpdateView: 0
--- !u!114 &1286529697012677180
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6164337287601107676}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
m_Name:
m_EditorClassIdentifier:
m_HorizontalFit: 0
m_VerticalFit: 2
--- !u!1 &8290338740711049006
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8754483333502849411}
m_Layer: 5
m_Name: Root
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &8754483333502849411
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8290338740711049006}
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_Children:
- {fileID: 6087025893861054323}
- {fileID: 8789823129857705082}
- {fileID: 331028397738758164}
m_Father: {fileID: 1998281097548910301}
m_RootOrder: 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}

View File

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

View File

@ -131,10 +131,10 @@ MonoBehaviour:
Descript: {fileID: 0}
Root: {fileID: 8754483333502849411}
ShadowIcon: {fileID: 0}
InfoNode: {fileID: 632697230221148209}
SubMenuItemGroup: {fileID: 2060695589654091386}
SelectScale: 1
UnSelectScale: 0.85
m_progress: 0
--- !u!114 &5700455559359757662
MonoBehaviour:
m_ObjectHideFlags: 0
@ -166,6 +166,7 @@ GameObject:
- component: {fileID: 6095356919362338847}
- component: {fileID: 7651669947470814669}
- component: {fileID: 991446423622995247}
- component: {fileID: 632697230221148209}
m_Layer: 5
m_Name: Text
m_TagString: Untagged
@ -234,6 +235,18 @@ MonoBehaviour:
m_VerticalOverflow: 1
m_LineSpacing: 1
m_Text: NAME
--- !u!225 &632697230221148209
CanvasGroup:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5340761592919397836}
m_Enabled: 1
m_Alpha: 1
m_Interactable: 1
m_BlocksRaycasts: 1
m_IgnoreParentGroups: 0
--- !u!1 &8218630550162509793
GameObject:
m_ObjectHideFlags: 0
@ -285,7 +298,6 @@ MonoBehaviour:
m_EditorClassIdentifier:
PulseInvoke_Delay: 0.4
PulseInvoke_Interval: 0.05
m_listenControlAction: 0
m_menuItemRoot: {fileID: 3226730524206505336}
SubMenuItemTemplate: {fileID: 2502609279043838113, guid: 01f3c5497992f944eae9b9efa15a19c2, type: 3}
alphaGroup: {fileID: 6355204462360987243}

View File

@ -0,0 +1,649 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &29419265480821815
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8126322204359135913}
- component: {fileID: 2718916271043989317}
- component: {fileID: 3380485461544738227}
m_Layer: 5
m_Name: Descript
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &8126322204359135913
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 29419265480821815}
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_Children: []
m_Father: {fileID: 8789823129857705082}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 33}
m_Pivot: {x: 0, y: 1}
--- !u!222 &2718916271043989317
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 29419265480821815}
m_CullTransparentMesh: 1
--- !u!114 &3380485461544738227
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 29419265480821815}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, 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_FontData:
m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
m_FontSize: 20
m_FontStyle: 0
m_BestFit: 0
m_MinSize: 2
m_MaxSize: 300
m_Alignment: 3
m_AlignByGeometry: 0
m_RichText: 1
m_HorizontalOverflow: 1
m_VerticalOverflow: 1
m_LineSpacing: 1
m_Text: 111111111111111111111111111111111111111111
--- !u!1 &734025543935719296
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1323634865265500141}
- component: {fileID: 5792146190930927166}
- component: {fileID: 2619187604372594158}
- component: {fileID: 1779247868001543556}
- component: {fileID: 4496630961732192070}
- component: {fileID: 2059277597780235898}
m_Layer: 5
m_Name: shadowIcon
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &1323634865265500141
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 734025543935719296}
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_Children: []
m_Father: {fileID: 6087025893861054323}
m_RootOrder: 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!222 &5792146190930927166
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 734025543935719296}
m_CullTransparentMesh: 1
--- !u!114 &2619187604372594158
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 734025543935719296}
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: 0.4577373, b: 0, 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: 10907, guid: 0000000000000000f000000000000000, type: 0}
m_Type: 0
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!114 &1779247868001543556
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 734025543935719296}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f8b2ed11d675446c5a49da1ea296d490, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Version: 300
m_EffectMaterial: {fileID: 21305736874167728, guid: aee96bc531e6eba468ec405e536f515f, type: 2}
m_EffectFactor: 0
m_ColorFactor: 0
m_BlurFactor: 0
m_EffectMode: 0
m_ColorMode: 1
m_BlurMode: 3
m_AdvancedBlur: 1
m_ShadowBlur: 1
m_ShadowStyle: 0
m_ShadowColor: {r: 0, g: 0, b: 0, a: 1}
m_EffectDistance: {x: 1, y: -1}
m_UseGraphicAlpha: 1
m_EffectColor: {r: 1, g: 1, b: 1, a: 1}
m_AdditionalShadows: []
--- !u!114 &4496630961732192070
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 734025543935719296}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 0848bff101191904ead4bb831f7084db, type: 3}
m_Name:
m_EditorClassIdentifier:
m_BlurFactor: 1
m_Style: 3
m_AdditionalShadows: []
m_EffectColor: {r: 1, g: 1, b: 1, a: 0}
m_EffectDistance: {x: 8, y: 8}
m_UseGraphicAlpha: 0
--- !u!95 &2059277597780235898
Animator:
serializedVersion: 3
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 734025543935719296}
m_Enabled: 1
m_Avatar: {fileID: 0}
m_Controller: {fileID: 9100000, guid: 0b3ccf7414d2ead43be0cd33b6e1b53c, type: 2}
m_CullingMode: 0
m_UpdateMode: 0
m_ApplyRootMotion: 0
m_LinearVelocityBlending: 0
m_WarningMessage:
m_HasTransformHierarchy: 1
m_AllowConstantClipSamplingOptimization: 1
m_KeepAnimatorControllerStateOnDisable: 0
--- !u!1 &1776357407830023228
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 6087025893861054323}
- component: {fileID: 7036072602178187444}
- component: {fileID: 6771349210554360888}
m_Layer: 5
m_Name: Icon
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &6087025893861054323
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1776357407830023228}
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_Children:
- {fileID: 1323634865265500141}
m_Father: {fileID: 8105925540140519754}
m_RootOrder: 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: 4, y: 4}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &7036072602178187444
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1776357407830023228}
m_CullTransparentMesh: 1
--- !u!114 &6771349210554360888
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1776357407830023228}
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: 0.4577373, b: 0, 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: 10907, guid: 0000000000000000f000000000000000, type: 0}
m_Type: 1
m_PreserveAspect: 0
m_FillCenter: 0
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!1 &3189920797946144379
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1998281097548910301}
- component: {fileID: 8404333486862214380}
- component: {fileID: 5700455559359757662}
m_Layer: 5
m_Name: RomItemTemplate
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &1998281097548910301
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3189920797946144379}
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_Children:
- {fileID: 8754483333502849411}
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 500, y: 200}
m_Pivot: {x: 0, y: 0.5}
--- !u!114 &8404333486862214380
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3189920797946144379}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f236de3ffaafd4149a3b7395e05b8d07, type: 3}
m_Name:
m_EditorClassIdentifier:
Icon: {fileID: 6771349210554360888}
Txt: {fileID: 991446423622995247}
Descript: {fileID: 3380485461544738227}
Root: {fileID: 8754483333502849411}
ShadowIcon: {fileID: 2619187604372594158}
InfoNode: {fileID: 6788248266412682264}
SubMenuItemGroup: {fileID: 0}
SelectScale: 1
UnSelectScale: 1
m_romImage: {fileID: 67125096702760250}
--- !u!114 &5700455559359757662
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3189920797946144379}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
m_Name:
m_EditorClassIdentifier:
m_IgnoreLayout: 0
m_MinWidth: -1
m_MinHeight: -1
m_PreferredWidth: 200
m_PreferredHeight: 230
m_FlexibleWidth: -1
m_FlexibleHeight: -1
m_LayoutPriority: 1
--- !u!1 &3993825260653792697
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8789823129857705082}
- component: {fileID: 3252398029444565139}
- component: {fileID: 6788248266412682264}
m_Layer: 5
m_Name: InfoNode
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &8789823129857705082
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3993825260653792697}
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_Children:
- {fileID: 6095356919362338847}
- {fileID: 8126322204359135913}
m_Father: {fileID: 8754483333502849411}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 100, y: 0}
m_SizeDelta: {x: -200, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &3252398029444565139
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3993825260653792697}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Padding:
m_Left: 20
m_Right: 0
m_Top: 0
m_Bottom: 0
m_ChildAlignment: 3
m_Spacing: 0
m_ChildForceExpandWidth: 0
m_ChildForceExpandHeight: 1
m_ChildControlWidth: 1
m_ChildControlHeight: 0
m_ChildScaleWidth: 0
m_ChildScaleHeight: 0
m_ReverseArrangement: 0
--- !u!225 &6788248266412682264
CanvasGroup:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3993825260653792697}
m_Enabled: 1
m_Alpha: 1
m_Interactable: 1
m_BlocksRaycasts: 1
m_IgnoreParentGroups: 0
--- !u!1 &4643603390456494410
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8105925540140519754}
- component: {fileID: 1377401926964550360}
- component: {fileID: 67125096702760250}
m_Layer: 5
m_Name: RomImage
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &8105925540140519754
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4643603390456494410}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 2}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- {fileID: 6087025893861054323}
m_Father: {fileID: 8754483333502849411}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0.5}
m_AnchorMax: {x: 0, y: 0.5}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 200, y: 200}
m_Pivot: {x: 0, y: 0.5}
--- !u!222 &1377401926964550360
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4643603390456494410}
m_CullTransparentMesh: 1
--- !u!114 &67125096702760250
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4643603390456494410}
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: 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 &5340761592919397836
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 6095356919362338847}
- component: {fileID: 7651669947470814669}
- component: {fileID: 991446423622995247}
m_Layer: 5
m_Name: Name
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &6095356919362338847
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5340761592919397836}
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_Children: []
m_Father: {fileID: 8789823129857705082}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 33}
m_Pivot: {x: 0, y: 1}
--- !u!222 &7651669947470814669
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5340761592919397836}
m_CullTransparentMesh: 1
--- !u!114 &991446423622995247
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5340761592919397836}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, 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_FontData:
m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
m_FontSize: 20
m_FontStyle: 0
m_BestFit: 0
m_MinSize: 2
m_MaxSize: 300
m_Alignment: 4
m_AlignByGeometry: 0
m_RichText: 1
m_HorizontalOverflow: 1
m_VerticalOverflow: 1
m_LineSpacing: 1
m_Text: NAME
--- !u!1 &8290338740711049006
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8754483333502849411}
m_Layer: 5
m_Name: Root
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &8754483333502849411
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8290338740711049006}
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_Children:
- {fileID: 8105925540140519754}
- {fileID: 8789823129857705082}
m_Father: {fileID: 1998281097548910301}
m_RootOrder: 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}

View File

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

View File

@ -353,6 +353,7 @@ MonoBehaviour:
Descript: {fileID: 3380485461544738227}
Root: {fileID: 8754483333502849411}
ShadowIcon: {fileID: 2619187604372594158}
InfoNode: {fileID: 2621205976727769389}
SubMenuItemGroup: {fileID: 0}
SelectScale: 1
UnSelectScale: 1
@ -387,6 +388,7 @@ GameObject:
- component: {fileID: 8789823129857705082}
- component: {fileID: 3252398029444565139}
- component: {fileID: 4972426757569440742}
- component: {fileID: 2621205976727769389}
m_Layer: 5
m_Name: InfoNode
m_TagString: Untagged
@ -455,6 +457,18 @@ MonoBehaviour:
m_EditorClassIdentifier:
m_HorizontalFit: 2
m_VerticalFit: 2
--- !u!225 &2621205976727769389
CanvasGroup:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3993825260653792697}
m_Enabled: 1
m_Alpha: 1
m_Interactable: 1
m_BlocksRaycasts: 1
m_IgnoreParentGroups: 0
--- !u!1 &5340761592919397836
GameObject:
m_ObjectHideFlags: 0

View File

@ -1,11 +1,12 @@
using AxibugEmuOnline.Client.Manager;
using AxibugEmuOnline.Client.Network;
using System;
using System.Collections;
using UnityEngine;
namespace AxibugEmuOnline.Client.ClientCore
{
public class AppAxibugEmuOnline
public static class AppAxibugEmuOnline
{
public static string TokenStr;
public static long RID = -1;
@ -18,7 +19,7 @@ namespace AxibugEmuOnline.Client.ClientCore
public static UserDataManager user;
public static AppNetGame netgame;
public static AppEmu emu;
public static RomLib romLib;
public static RomLib nesRomLib;
public static HttpAPI httpAPI;
private static CoroutineRunner coRunner;
@ -34,12 +35,28 @@ namespace AxibugEmuOnline.Client.ClientCore
user = new UserDataManager();
emu = new AppEmu();
netgame = new AppNetGame();
romLib = new RomLib();
httpAPI = new HttpAPI();
nesRomLib = new RomLib(EnumPlatform.NES);
var go = new GameObject("[AppAxibugEmuOnline]");
GameObject.DontDestroyOnLoad(go);
coRunner = go.AddComponent<CoroutineRunner>();
StartCoroutine(AppTickFlow());
}
private static IEnumerator AppTickFlow()
{
while (true)
{
Tick();
yield return null;
}
}
private static void Tick()
{
nesRomLib.ExecuteFetchRomInfo();
}
public static Coroutine StartCoroutine(IEnumerator itor)

View File

@ -12,6 +12,8 @@ namespace AxibugEmuOnline.Client
public string WebSite = "http://emu.axibug.com/api";
public string DownSite = "http://emu.axibug.com";
public delegate void GetRomListAPI(Action<Resp_GameList> callback, int page, int pageSize = 10);
public void GetNesRomList(Action<Resp_GameList> callback, int page, int pageSize = 10)
{
AppAxibugEmuOnline.StartCoroutine(GetNesRomListFlow(page, pageSize, callback));
@ -66,6 +68,7 @@ namespace AxibugEmuOnline.Client
[Serializable]
public class Resp_RomInfo
{
public int orderid;
public int id;
public string romName;
public string gType;

View File

@ -15,23 +15,42 @@ namespace AxibugEmuOnline.Client
private string fileName;
private EnumPlatform platform;
/// <summary> 指示该Rom文件的存放路径 </summary>
public string LocalFilePath => $"{CoreSupporter.PersistentDataPath}/RemoteRoms/{platform}/{fileName}";
public bool FileReady => hasLocalFile;
public int ID => webData != null ? webData.id : -1;
/// <summary> 指示该Rom文件是否已下载完毕 </summary>
public bool RomReady => hasLocalFile;
/// <summary> 指示是否正在下载Rom文件 </summary>
public bool IsDownloading { get; private set; }
/// <summary> 指示该Rom信息是否已填充 </summary>
public bool InfoReady => webData != null;
/// <summary> 唯一标识 </summary>
public int ID => webData != null ? webData.id : -1;
/// <summary> 别名 </summary>
public string Alias => webData.romName;
/// <summary> 描述 </summary>
public string Descript => webData.desc;
/// <summary> 文件名 </summary>
public string FileName => fileName;
/// <summary> 在查询结果中的索引 </summary>
public int Index { get; private set; }
/// <summary> 在查询结果中的所在页 </summary>
public int Page { get; private set; }
public event Action OnDownloadOver;
public event Action OnInfoFilled;
public RomFile(EnumPlatform platform)
public RomFile(EnumPlatform platform, int index, int insidePage)
{
this.platform = platform;
Index = index;
Page = insidePage;
}
public void BeginDownload()
{
if (FileReady) return;
if (RomReady) return;
if (IsDownloading) return;
IsDownloading = true;
@ -54,7 +73,7 @@ namespace AxibugEmuOnline.Client
public byte[] GetRomFileData()
{
if (webData == null) throw new Exception("Not Valid Rom");
if (!FileReady) throw new Exception("Rom File Not Downloaded");
if (!RomReady) throw new Exception("Rom File Not Downloaded");
var bytes = File.ReadAllBytes(LocalFilePath);
if (Path.GetExtension(LocalFilePath).ToLower() == ".zip")
@ -118,6 +137,8 @@ namespace AxibugEmuOnline.Client
{
hasLocalFile = false;
}
OnInfoFilled?.Invoke();
}
}
}

View File

@ -1,52 +1,93 @@
using AxibugEmuOnline.Client.ClientCore;
using System;
using System.Collections.Generic;
using static AxibugEmuOnline.Client.HttpAPI;
namespace AxibugEmuOnline.Client
{
public class RomLib
{
/// <summary> Rom请求,一页的大小 </summary>
private const int PAGE_SIZE = 10;
/// <summary> 请求指令 </summary>
private HashSet<int> FetchPageCmd = new HashSet<int>();
private RomFile[] nesRomFetchList;
private Dictionary<int, RomFile> nesRomFileIdMapper = new Dictionary<int, RomFile>();
private Dictionary<string, RomFile> nesRomFileNameMapper = new Dictionary<string, RomFile>();
private HttpAPI.GetRomListAPI m_romGetFunc;
private EnumPlatform m_platform;
public RomFile GetNesRomFile(string romFileName)
public RomLib(EnumPlatform platform)
{
m_platform = platform;
switch (platform)
{
case EnumPlatform.NES:
m_romGetFunc = AppAxibugEmuOnline.httpAPI.GetNesRomList;
break;
}
}
public RomFile GetRomFile(string romFileName)
{
RomFile romFile;
nesRomFileNameMapper.TryGetValue(romFileName, out romFile);
return romFile;
}
public void GetNesRomFile(int page, int pageSize, Action<List<RomFile>> callback)
/// <summary>
/// 获得所有Rom文件
/// </summary>
/// <param name="callback"></param>
public void FetchRomCount(Action<RomFile[]> callback)
{
AppAxibugEmuOnline.httpAPI.GetNesRomList((romList) =>
m_romGetFunc((romList) =>
{
if (romList == null)
FetchPageCmd.Clear();
nesRomFileIdMapper.Clear();
nesRomFileNameMapper.Clear();
nesRomFetchList = new RomFile[romList.resultAllCount];
for (int i = 0; i < nesRomFetchList.Length; i++)
{
callback.Invoke(null);
//以后考虑用对象池实例化RomFile
nesRomFetchList[i] = new RomFile(m_platform, i, i / PAGE_SIZE);
}
else
{
List<RomFile> result = new List<RomFile>();
for (int i = 0; i < romList.gameList.Count; i++)
{
var webData = romList.gameList[i];
RomFile targetRomFile;
nesRomFileIdMapper.TryGetValue(webData.id, out targetRomFile);
if (targetRomFile == null)
{
targetRomFile = new RomFile(EnumPlatform.NES);
targetRomFile.SetWebData(webData);
nesRomFileIdMapper[webData.id] = targetRomFile;
SaveRomInfoFromWeb(romList);
callback.Invoke(nesRomFetchList);
}, 0, PAGE_SIZE);
}
public void BeginFetchRomInfo(RomFile romFile)
{
if (romFile.InfoReady) return;
FetchPageCmd.Add(romFile.Page);
}
public void ExecuteFetchRomInfo()
{
if (FetchPageCmd.Count == 0) return;
foreach (var pageNo in FetchPageCmd)
{
m_romGetFunc(SaveRomInfoFromWeb, pageNo, PAGE_SIZE);
}
FetchPageCmd.Clear();
}
private void SaveRomInfoFromWeb(Resp_GameList resp)
{
for (int i = 0; i < resp.gameList.Count; i++)
{
var webData = resp.gameList[i];
RomFile targetRomFile = nesRomFetchList[webData.orderid];
targetRomFile.SetWebData(webData);
nesRomFileIdMapper[webData.id] = nesRomFetchList[webData.orderid];
nesRomFileNameMapper[targetRomFile.FileName] = targetRomFile;
}
result.Add(targetRomFile);
}
callback(result);
}
}, page, pageSize);
}
public static string CalcHash(byte[] data)

View File

@ -20,7 +20,7 @@ namespace AxibugEmuOnline.Client
{
try
{
var romFile = AppAxibugEmuOnline.romLib.GetNesRomFile(fname);
var romFile = AppAxibugEmuOnline.nesRomLib.GetRomFile(fname);
var bytes = romFile.GetRomFileData();
Debug.Log($"Open {romFile.Alias}");
return new MemoryStream(bytes);
@ -34,7 +34,7 @@ namespace AxibugEmuOnline.Client
public void GetRomPathInfo(string fname, out string fullPath, out string directPath)
{
var romFile = AppAxibugEmuOnline.romLib.GetNesRomFile(fname);
var romFile = AppAxibugEmuOnline.nesRomLib.GetRomFile(fname);
UnityEngine.Debug.Assert(romFile != null);
fullPath = romFile.LocalFilePath;

View File

@ -84,38 +84,6 @@ namespace AxibugEmuOnline.Client
UnityEditor.EditorUtility.SetDirty(db);
UnityEditor.AssetDatabase.SaveAssets();
}
[ContextMenu("LoadRom")]
public void LoadRom()
{
AppAxibugEmuOnline.romLib.GetNesRomFile(0, 10, (romFiles) =>
{
if (romFiles == null) return;
var file = romFiles[2];
if (file.FileReady)
{
StartGame(file);
}
else
{
file.BeginDownload();
Action action = null;
action = () =>
{
file.OnDownloadOver -= action;
if (!file.FileReady)
{
throw new Exception("Download Failed");
}
StartGame(file);
};
file.OnDownloadOver += action;
}
});
}
#endif
}
}

View File

@ -0,0 +1,57 @@
using AxibugEmuOnline.Client.UI;
using DG.Tweening;
using DG.Tweening.Core;
using DG.Tweening.Plugins.Options;
using UnityEngine;
using App = AxibugEmuOnline.Client.ClientCore.AppAxibugEmuOnline;
namespace AxibugEmuOnline.Client
{
public class Game_NES : MenuItem
{
[SerializeField]
ItemPresent RomGroup;
[SerializeField]
CanvasGroup RomGroupRoot;
private TweenerCore<float, float, FloatOptions> m_showTween;
private void Awake()
{
RomGroupRoot.gameObject.SetActive(false);
RomGroupRoot.alpha = 0;
}
public override void OnEnterItem()
{
RomGroupRoot.gameObject.SetActive(true);
RomGroupRoot.alpha = 0;
if (m_showTween != null)
{
m_showTween.Kill();
m_showTween = null;
}
m_showTween = DOTween.To(() => RomGroupRoot.alpha, (x) => RomGroupRoot.alpha = x, 1, 0.2f);
App.nesRomLib.FetchRomCount((roms) =>
{
RomGroup.UpdateDependencyProperty(App.nesRomLib);
RomGroup.SetData(roms);
});
}
public override void OnExitItem()
{
if (m_showTween != null)
{
m_showTween.Kill();
m_showTween = null;
}
m_showTween = DOTween.To(() => RomGroupRoot.alpha, (x) => RomGroupRoot.alpha = x, 0, 0.2f)
.OnComplete(() =>
{
RomGroupRoot.gameObject.SetActive(false);
});
}
}
}

View File

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

View File

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

View File

@ -0,0 +1,58 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public static class GameObjectPool
{
private static GameObject PoolAttach;
private static Dictionary<GameObject, Queue<GameObject>> s_poolMap = new Dictionary<GameObject, Queue<GameObject>>();
private static Dictionary<GameObject, GameObject> s_instanceToSrc = new Dictionary<GameObject, GameObject>();
public static GameObject GetInstance(GameObject prefabSrc, Transform parent)
{
if (PoolAttach == null)
{
PoolAttach = new GameObject("[GameObjectPool]");
PoolAttach.transform.localScale = Vector3.zero;
GameObject.DontDestroyOnLoad(PoolAttach);
}
if (!s_poolMap.ContainsKey(prefabSrc)) s_poolMap[prefabSrc] = new Queue<GameObject>();
GameObject instance = null;
var pool = s_poolMap[prefabSrc];
if (pool.Count > 0)
{
instance = pool.Dequeue();
instance.transform.SetParent(parent, true);
instance.transform.localScale = prefabSrc.transform.localScale;
instance.transform.localRotation = prefabSrc.transform.localRotation;
instance.transform.localPosition = prefabSrc.transform.localPosition;
}
else
{
instance = GameObject.Instantiate(prefabSrc, parent);
s_instanceToSrc[instance] = prefabSrc;
}
//instance.SetActive(true);
return instance;
}
public static void Release(GameObject instance)
{
s_instanceToSrc.TryGetValue(instance, out var src);
if (src != null && s_poolMap.TryGetValue(src, out var pool))
{
pool.Enqueue(instance);
//instance.SetActive(false);
if (instance == null) return;
if (PoolAttach == null) return;
instance.transform.SetParent(PoolAttach.transform, true);
}
else
{
GameObject.Destroy(instance);
}
}
}

View File

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

View File

@ -0,0 +1,542 @@
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class ItemPresent : GridLayoutGroup, IVirtualLayout
{
public RectTransform ItemTemplate;
public RectTransform ViewRect;
private Dictionary<GameObject, ScripteInterface> _cacheItemScripts = new Dictionary<GameObject, ScripteInterface>();
private List<object> _dataList;
private object _dependencyProperty;
private Vector2 _layoutCellsize;
public Action OnItemDelayShowPorcessComplete;
#if UNITY_EDITOR
public int EditorOnlyItemCount
{
get => ItemCount;
set => ItemCount = value;
}
#endif
private int ItemCount
{
get => children.Count;
set
{
if (value == ItemCount) return;
if (value <= 0)
{
foreach (var child in children)
{
child.Dispose();
}
children.Clear();
}
else
{
var gap = value - children.Count;
if (gap > 0)
{
for (int i = 0; i < gap; i++)
{
ItemProxy item = new ItemProxy(ItemTemplate, this);
children.Add(item);
item.Width = cellSize.x;
item.Height = cellSize.y;
item.Index = children.Count - 1;
}
}
else if (gap < 0)
{
for (int i = 0; i < -gap; i++)
{
int removeIndex = children.Count - 1;
children[removeIndex].Dispose();
children.RemoveAt(removeIndex);
}
}
}
SetDirty();
}
}
private List<ItemProxy> children = new List<ItemProxy>();
private List<ItemProxy> handleChildren = new List<ItemProxy>();
private bool m_dataDirty;
public override void CalculateLayoutInputHorizontal()
{
handleChildren.Clear();
for (int i = 0; i < children.Count; i++)
{
var child = children[i];
if (child.IsDestroyed || !child.Visible)
continue;
handleChildren.Add(child);
}
m_Tracker.Clear();
updateFixHeightAndWidth();
int minColumns = 0;
int preferredColumns = 0;
if (m_Constraint == Constraint.FixedColumnCount)
{
minColumns = preferredColumns = m_ConstraintCount;
}
else if (m_Constraint == Constraint.FixedRowCount)
{
minColumns = preferredColumns = Mathf.CeilToInt(handleChildren.Count / (float)m_ConstraintCount - 0.001f);
}
else
{
minColumns = 1;
preferredColumns = Mathf.CeilToInt(Mathf.Sqrt(handleChildren.Count));
}
SetLayoutInputForAxis(
padding.horizontal + (_layoutCellsize.x + spacing.x) * minColumns - spacing.x,
padding.horizontal + (_layoutCellsize.x + spacing.x) * preferredColumns - spacing.x,
-1, 0);
}
public void MoveToScrollViewCenter(ScrollRect scrollRect, int dataIndex)
{
if (m_dataDirty)
{
for (int i = 0; i < children.Count; i++)
{
var child = children[i];
child.UpdateLayout();
}
Canvas.ForceUpdateCanvases();
}
var targetProxy = children[dataIndex];
var width = rectTransform.rect.width;
var height = rectTransform.rect.height;
// Item is here
var itemCenterPositionInScroll = GetWorldPointInWidget(scrollRect.transform as RectTransform, GetWidgetWorldPoint(targetProxy));
//Debug.Log("Item Anchor Pos In Scroll: " + itemCenterPositionInScroll);
// But must be here
var targetPositionInScroll = GetWorldPointInWidget(scrollRect.transform as RectTransform, GetWidgetWorldPoint(scrollRect.viewport));
//Debug.Log("Target Anchor Pos In Scroll: " + targetPositionInScroll);
// So it has to move this distance
var difference = targetPositionInScroll - itemCenterPositionInScroll;
difference.z = 0f;
var newNormalizedPosition = new Vector2(difference.x / (rectTransform.rect.width - scrollRect.viewport.rect.width),
difference.y / (rectTransform.rect.height - scrollRect.viewport.rect.height));
newNormalizedPosition = scrollRect.normalizedPosition - newNormalizedPosition;
newNormalizedPosition.x = Mathf.Clamp01(newNormalizedPosition.x);
newNormalizedPosition.y = Mathf.Clamp01(newNormalizedPosition.y);
scrollRect.normalizedPosition = newNormalizedPosition;
//DOTween.To(() => scrollRect.normalizedPosition, x => scrollRect.normalizedPosition = x, newNormalizedPosition, 0.2f);
}
Vector3 GetWidgetWorldPoint(RectTransform target)
{
//pivot position + item size has to be included
var pivotOffset = new Vector3(
(0.5f - target.pivot.x) * target.rect.size.x,
(0.5f - target.pivot.y) * target.rect.size.y,
0f);
var localPosition = target.localPosition + pivotOffset;
return target.parent.TransformPoint(localPosition);
}
Vector3 GetWidgetWorldPoint(ItemProxy proxy)
{
Vector3[] temp = new Vector3[4];
rectTransform.GetLocalCorners(temp);
var pos = (Vector2)temp[1] + proxy.AnchoredPosition;
pos = rectTransform.TransformPoint(pos);
return pos;
}
Vector3 GetWorldPointInWidget(RectTransform target, Vector3 worldPoint)
{
return target.InverseTransformPoint(worldPoint);
}
public override void CalculateLayoutInputVertical()
{
int minRows = 0;
if (m_Constraint == Constraint.FixedColumnCount)
{
minRows = Mathf.CeilToInt(handleChildren.Count / (float)m_ConstraintCount - 0.001f);
}
else if (m_Constraint == Constraint.FixedRowCount)
{
minRows = m_ConstraintCount;
}
else
{
float width = rectTransform.rect.width;
int cellCountX = Mathf.Max(1, Mathf.FloorToInt((width - padding.horizontal + spacing.x + 0.001f) / (_layoutCellsize.x + spacing.x)));
minRows = Mathf.CeilToInt(handleChildren.Count / (float)cellCountX);
}
float minSpace = padding.vertical + (_layoutCellsize.y + spacing.y) * minRows - spacing.y;
SetLayoutInputForAxis(minSpace, minSpace, -1, 1);
}
public override void SetLayoutHorizontal()
{
SetProxyCellsAlongAxis(0);
}
public override void SetLayoutVertical()
{
SetProxyCellsAlongAxis(1);
foreach (var item in handleChildren)
{
item.UpdateLayout();
}
}
private void SetProxyCellsAlongAxis(int axis)
{
// Normally a Layout Controller should only set horizontal values when invoked for the horizontal axis
// and only vertical values when invoked for the vertical axis.
// However, in this case we set both the horizontal and vertical position when invoked for the vertical axis.
// Since we only set the horizontal position and not the size, it shouldn't affect children's layout,
// and thus shouldn't break the rule that all horizontal layout must be calculated before all vertical layout.
var proxyChildCount = handleChildren.Count;
if (axis == 0)
{
// Only set the sizes when invoked for horizontal axis, not the positions.
for (int i = 0; i < proxyChildCount; i++)
{
ItemProxy proxy = handleChildren[i];
proxy.Width = _layoutCellsize.x;
proxy.Height = _layoutCellsize.y;
}
return;
}
float width = rectTransform.rect.size.x;
float height = rectTransform.rect.size.y;
int cellCountX = 1;
int cellCountY = 1;
if (m_Constraint == Constraint.FixedColumnCount)
{
cellCountX = m_ConstraintCount;
if (proxyChildCount > cellCountX)
cellCountY = proxyChildCount / cellCountX + (proxyChildCount % cellCountX > 0 ? 1 : 0);
}
else if (m_Constraint == Constraint.FixedRowCount)
{
cellCountY = m_ConstraintCount;
if (proxyChildCount > cellCountY)
cellCountX = proxyChildCount / cellCountY + (proxyChildCount % cellCountY > 0 ? 1 : 0);
}
else
{
if (_layoutCellsize.x + spacing.x <= 0)
cellCountX = int.MaxValue;
else
cellCountX = Mathf.Max(1, Mathf.FloorToInt((width - padding.horizontal + spacing.x + 0.001f) / (cellSize.x + spacing.x)));
if (_layoutCellsize.y + spacing.y <= 0)
cellCountY = int.MaxValue;
else
cellCountY = Mathf.Max(1, Mathf.FloorToInt((height - padding.vertical + spacing.y + 0.001f) / (cellSize.y + spacing.y)));
}
int cornerX = (int)startCorner % 2;
int cornerY = (int)startCorner / 2;
int cellsPerMainAxis, actualCellCountX, actualCellCountY;
if (startAxis == Axis.Horizontal)
{
cellsPerMainAxis = cellCountX;
actualCellCountX = Mathf.Clamp(cellCountX, 1, proxyChildCount);
actualCellCountY = Mathf.Clamp(cellCountY, 1, Mathf.CeilToInt(proxyChildCount / (float)cellsPerMainAxis));
}
else
{
cellsPerMainAxis = cellCountY;
actualCellCountY = Mathf.Clamp(cellCountY, 1, proxyChildCount);
actualCellCountX = Mathf.Clamp(cellCountX, 1, Mathf.CeilToInt(proxyChildCount / (float)cellsPerMainAxis));
}
Vector2 requiredSpace = new Vector2(
actualCellCountX * _layoutCellsize.x + (actualCellCountX - 1) * spacing.x,
actualCellCountY * _layoutCellsize.y + (actualCellCountY - 1) * spacing.y
);
Vector2 startOffset = new Vector2(
GetStartOffset(0, requiredSpace.x),
GetStartOffset(1, requiredSpace.y)
);
for (int i = 0; i < proxyChildCount; i++)
{
int positionX;
int positionY;
if (startAxis == Axis.Horizontal)
{
positionX = i % cellsPerMainAxis;
positionY = i / cellsPerMainAxis;
}
else
{
positionX = i / cellsPerMainAxis;
positionY = i % cellsPerMainAxis;
}
if (cornerX == 1)
positionX = actualCellCountX - 1 - positionX;
if (cornerY == 1)
positionY = actualCellCountY - 1 - positionY;
SetProxyChildAlongAxis(handleChildren[i], 0, startOffset.x + (_layoutCellsize[0] + spacing[0]) * positionX, _layoutCellsize[0]);
SetProxyChildAlongAxis(handleChildren[i], 1, startOffset.y + (_layoutCellsize[1] + spacing[1]) * positionY, _layoutCellsize[1]);
}
}
private void SetProxyChildAlongAxis(ItemProxy proxy, int axis, float pos, float size)
{
var scaleFactor = 1.0f;
if (proxy == null)
return;
Vector2 sizeDelta = new Vector2(proxy.Width, proxy.Height);
sizeDelta[axis] = size;
proxy.Width = sizeDelta.x;
proxy.Height = sizeDelta.y;
Vector2 anchoredPosition = proxy.AnchoredPosition;
anchoredPosition[axis] = (axis == 0) ? (pos + size * proxy.Pivot[axis] * scaleFactor) : (-pos - size * (1f - proxy.Pivot[axis]) * scaleFactor);
proxy.AnchoredPosition = anchoredPosition;
}
public void UpdateProxyVisualState()
{
if (m_dataDirty)
{
foreach (var proxy in children)
{
proxy.UpdateView(true);
}
Canvas.ForceUpdateCanvases();
m_dataDirty = false;
}
if (ViewRect == null)
{
foreach (var proxy in children)
{
proxy.IsInViewRect = true;
}
return;
}
Vector3[] corners = new Vector3[4];
ViewRect.GetLocalCorners(corners);
Rect parentRect = ViewRect.rect;
parentRect.position = corners[0];
rectTransform.GetLocalCorners(corners);
Vector2 leftUpCorner = corners[1];
foreach (var proxy in children)
{
var localPos = leftUpCorner + proxy.AnchoredPosition;
localPos.x -= proxy.Width * 0.5f;
localPos.y -= proxy.Height * 0.5f;
localPos = transform.localToWorldMatrix.MultiplyPoint(localPos);
localPos = ViewRect.worldToLocalMatrix.MultiplyPoint(localPos);
Rect proxyRect = new Rect(localPos, new Vector2(proxy.Width, proxy.Height));
if (parentRect.Overlaps(proxyRect)) proxy.IsInViewRect = true;
else proxy.IsInViewRect = false;
}
}
public bool PauseUpdateView;
private void LateUpdate()
{
if (!PauseUpdateView)
{
updateFixHeightAndWidth();
UpdateProxyVisualState();
HandleProxyShow();
}
}
private void updateFixHeightAndWidth()
{
_layoutCellsize = cellSize;
}
private List<ItemProxy> NeedDelayShowItems = new List<ItemProxy>();
private bool hasNeedShowInLastFrame = false;
private float stepDuration = 0f;
private void HandleProxyShow(bool allLoad = true, float delayStep = 0.02f)
{
if (allLoad)
{
foreach (var proxy in children)
{
if (proxy.NeedHide)
proxy.UpdateView();
else if (proxy.NeedShow)
proxy.UpdateView();
}
}
else
{
NeedDelayShowItems.Clear();
foreach (var proxy in children)
{
if (proxy.NeedHide)
proxy.UpdateView();
else if (proxy.NeedShow && !proxy.firstShow)
proxy.UpdateView();
else if (proxy.NeedShow && proxy.firstShow)
{
NeedDelayShowItems.Add(proxy);
}
}
if (NeedDelayShowItems.Count == 0 && hasNeedShowInLastFrame)
{
// Debug.Log("Show Complete!", gameObject);
OnItemDelayShowPorcessComplete?.Invoke();
}
hasNeedShowInLastFrame = NeedDelayShowItems.Count > 0;
stepDuration += Time.deltaTime;
while (stepDuration >= delayStep)
{
foreach (var proxy in NeedDelayShowItems)
{
if (proxy.NeedShow)
{
proxy.UpdateView();
break;
}
}
stepDuration -= delayStep;
}
}
}
protected override void OnDestroy()
{
Clear();
}
public void Clear()
{
foreach (var proxy in children)
proxy.Dispose();
children.Clear();
}
public void SetData(object dataList)
{
Clear();
if (dataList == null)
{
ItemCount = 0;
if (_dataList != null)
_dataList.Clear();
}
else if (dataList is IEnumerable ienumrable)
{
List<object> temp = new List<object>();
foreach (var item in ienumrable)
{
temp.Add(item);
}
ItemCount = temp.Count;
_dataList = temp;
}
else
{
Debug.LogException(new Exception("ItemPresent SetData 传递的参数类型不受支持"), gameObject);
return;
}
m_dataDirty = true;
}
public void UpdateDependencyProperty(object dp)
{
_dependencyProperty = dp;
foreach (var proxy in children)
{
proxy.UpdateDP();
}
m_dataDirty = true;
}
public Dictionary<GameObject, ScripteInterface> CacheItemScripts => _cacheItemScripts;
public object DependencyProperty => _dependencyProperty;
public RectTransform RectTransform => rectTransform;
public Vector2 GetItemAnchorePos(int index)
{
var proxy = children[index];
return proxy.AnchoredPosition;
}
public RectTransform GetItemUIIfExist(int index)
{
if (children.Count <= index) return null;
var proxy = children[index];
return proxy.RuntimeItemUI;
}
public List<object> DataList
{
get => _dataList;
set => SetData(value);
}
private ScrollRect _scrollRect;
public RectTransform GetItemUIByDataIndex(int dataIndex)
{
if (_scrollRect == null)
{
_scrollRect = GetComponentInParent<ScrollRect>();
}
if (_scrollRect != null) MoveToScrollViewCenter(_scrollRect, dataIndex);
return this.GetItemUIIfExist(dataIndex);
}
}

View File

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

View File

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

View File

@ -0,0 +1,18 @@
{
"name": "ItemPresentEditor",
"rootNamespace": "",
"references": [
"GUID:3fe77f1eed9fc0847a86648f644fe815"
],
"includePlatforms": [
"Editor"
],
"excludePlatforms": [],
"allowUnsafeCode": false,
"overrideReferences": false,
"precompiledReferences": [],
"autoReferenced": true,
"defineConstraints": [],
"versionDefines": [],
"noEngineReferences": false
}

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 67e09745e7c253a4a86dab1e9001e7f1
AssemblyDefinitionImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,32 @@
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEditor.UI;
using UnityEngine;
[CustomEditor(typeof(ItemPresent))]
public class ItemPresentEditor : GridLayoutGroupEditor
{
public override void OnInspectorGUI()
{
ItemPresent behaviour = target as ItemPresent;
var itemTemplate = serializedObject.FindProperty("ItemTemplate");
var viewRect = serializedObject.FindProperty("ViewRect");
GUILayout.BeginHorizontal();
EditorGUILayout.PropertyField(itemTemplate, new GUIContent("元素"), true);
if (GUILayout.Button("同步大小", GUILayout.Width(80)))
{
behaviour.cellSize = behaviour.ItemTemplate.rect.size;
GUIUtility.keyboardControl = 0;
}
GUILayout.EndHorizontal();
EditorGUILayout.PropertyField(viewRect, true);
EditorGUILayout.Space();
serializedObject.ApplyModifiedProperties();
base.OnInspectorGUI();
}
}

View File

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

View File

@ -0,0 +1,254 @@
using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public interface IVirtualLayout
{
Dictionary<GameObject, ScripteInterface> CacheItemScripts { get; }
public List<object> DataList { get; }
public object DependencyProperty { get; }
public RectTransform RectTransform { get; }
public Vector2 GetItemAnchorePos(int index);
public RectTransform GetItemUIIfExist(int index);
public void UpdateProxyVisualState();
public void UpdateDependencyProperty(object dp);
public void SetData(object dataList);
public void MoveToScrollViewCenter(ScrollRect scrollRect, int dataIndex);
}
public class ItemProxy
{
public bool IsDestroyed;
public bool Visible = true;
public int Index;
public bool IsInViewRect;
public Vector2 Pivot => _template.pivot;
public Vector2 AnchoredPosition;
public float Width;
public float Height;
private IVirtualLayout _parent;
private RectTransform _template;
private RectTransform _runtimeInstance;
private LayoutGroup _layoutElement;
public RectTransform RuntimeItemUI => _runtimeInstance;
public bool firstShow { get; private set; } = true;
public float PreferredWidth
{
get
{
if (_layoutElement == null) return 0;
return _layoutElement.preferredWidth;
}
}
public float PreferredHeight
{
get
{
if (_layoutElement == null) return 0;
return _layoutElement.preferredHeight;
}
}
public ScripteInterface GetLuaObj()
{
if (_runtimeInstance == null) return null;
_parent.CacheItemScripts.TryGetValue(_runtimeInstance.gameObject, out ScripteInterface lfi);
return lfi;
}
private Vector2? _forcePivot;
public ItemProxy(RectTransform Template, IVirtualLayout parent, Vector2? forcePivot = null)
{
_template = Template;
_parent = parent;
_forcePivot = forcePivot;
}
public void Dispose()
{
if (_runtimeInstance != null)
{
if (Application.isPlaying)
{
GameObjectPool.Release(_runtimeInstance.gameObject);
}
else
GameObject.DestroyImmediate(_runtimeInstance.gameObject);
}
}
public bool NeedShow
{
get
{
if (IsInViewRect && _runtimeInstance == null) return true;
else
{
if (_runtimeInstance != null && IsInViewRect && _runtimeInstance.anchoredPosition != AnchoredPosition)
return true;
else
return false;
}
}
}
public bool NeedHide => !IsInViewRect && _runtimeInstance != null;
public void UpdateView(bool force = false)
{
if (IsInViewRect)
{
if (_runtimeInstance == null)
{
_runtimeInstance = GetInstance();
_layoutElement = _runtimeInstance.GetComponent<LayoutGroup>();
UpdateViewData();
}
else if (force)
{
UpdateViewData();
}
UpdateLayout();
}
else
{
ReleaseInstance();
}
}
public void UpdateLayout()
{
if (_runtimeInstance != null)
{
_runtimeInstance.gameObject.SetActive(true);
_runtimeInstance.anchorMax = Vector2.up;
_runtimeInstance.anchorMin = Vector2.up;
if (_forcePivot != null)
{
_runtimeInstance.pivot = _forcePivot.Value;
}
_runtimeInstance.anchoredPosition = AnchoredPosition;
_runtimeInstance.sizeDelta = new Vector2(Width, Height);
}
if (_layoutElement != null)
{
_layoutElement.CalculateLayoutInputHorizontal();
_layoutElement.CalculateLayoutInputVertical();
_layoutElement.SetLayoutHorizontal();
_layoutElement.SetLayoutVertical();
}
}
private void UpdateViewData()
{
if (Application.isPlaying)
{
if (!_parent.CacheItemScripts.ContainsKey(_runtimeInstance.gameObject))
{
var vItem = _runtimeInstance.gameObject.GetComponent<IVirtualItem>();
ScripteInterface newSI = new ScripteInterface(vItem);
_parent.CacheItemScripts[_runtimeInstance.gameObject] = newSI;
}
_parent.CacheItemScripts.TryGetValue(_runtimeInstance.gameObject, out ScripteInterface si);
si.SetDataList(_parent.DataList[Index], Index);
if (_parent.DependencyProperty != null)
si.SetDependencyProperty(_parent.DependencyProperty);
}
}
public void UpdateDP()
{
if (_runtimeInstance == null) return;
_parent.CacheItemScripts.TryGetValue(_runtimeInstance.gameObject, out ScripteInterface luaInterface);
if (luaInterface == null) return;
if (_parent.DependencyProperty != null)
luaInterface.SetDependencyProperty(_parent.DependencyProperty);
}
private RectTransform GetInstance()
{
var res = GameObjectPool.GetInstance(_template.gameObject, _parent.RectTransform).GetComponent<RectTransform>();
return res;
}
private void ReleaseInstance()
{
if (_runtimeInstance == null) return;
_layoutElement = null;
if (Application.isPlaying)
{
_parent.CacheItemScripts.TryGetValue(_runtimeInstance.gameObject, out ScripteInterface si);
if (si != null) si.Release();
GameObjectPool.Release(_runtimeInstance.gameObject);
_runtimeInstance = null;
}
else
{
GameObject.DestroyImmediate(_runtimeInstance.gameObject);
_runtimeInstance = null;
}
}
}
public class ScripteInterface
{
private IVirtualItem _itemInstance;
public IVirtualItem ItemInstance => _itemInstance;
public ScripteInterface(IVirtualItem lc)
{
_itemInstance = lc;
}
public void SetDataList(object dataItem, int index)
{
if (_itemInstance == null) return;
_itemInstance.Index = index;
_itemInstance.SetData(dataItem);
}
public void Release()
{
if (_itemInstance == null) return;
_itemInstance.Release();
}
public void SetDependencyProperty(object dependencyProperty)
{
if (_itemInstance == null) return;
_itemInstance.SetDependencyProperty(dependencyProperty);
}
}
public interface IVirtualItem
{
GameObject gameObject { get; }
int Index { get; set; }
void SetData(object data);
void SetDependencyProperty(object data);
void Release();
}

View File

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

View File

@ -4,9 +4,9 @@ using DG.Tweening.Plugins.Options;
using System;
using System.Collections.Generic;
using System.Linq;
using UnityEditor;
using UnityEngine;
using UnityEngine.UI;
using static GluonGui.WorkspaceWindow.Views.Checkin.Operations.CheckinViewDeleteOperation;
namespace AxibugEmuOnline.Client.UI
{
@ -126,14 +126,17 @@ namespace AxibugEmuOnline.Client.UI
for (int i = 0; i < MenuSetting.Count; i++)
{
var settingData = MenuSetting[i];
var templatePrefab = settingData.OverrideTemplate != null ? settingData.OverrideTemplate.gameObject : Template.gameObject;
MenuItem itemScript = null;
var prefabClone = UnityEditor.PrefabUtility.InstantiatePrefab(Template.gameObject) as GameObject;
var prefabClone = UnityEditor.PrefabUtility.InstantiatePrefab(templatePrefab) as GameObject;
itemScript = prefabClone.GetComponent<MenuItem>();
itemScript.gameObject.SetActive(true);
itemScript.transform.SetParent(GroupRoot.transform);
itemScript.transform.localScale = Vector3.one;
itemScript.SetData(MenuSetting[i]);
itemScript.SetData(settingData);
}
UnityEditor.EditorUtility.SetDirty(this);
@ -147,7 +150,7 @@ namespace AxibugEmuOnline.Client.UI
public Sprite Icon;
public string Name;
public string Description;
public MenuItem OverrideTemplate;
public List<MenuData> SubMenus;
}
}

View File

@ -20,6 +20,8 @@ namespace AxibugEmuOnline.Client.UI
[SerializeField]
Image ShadowIcon;
[SerializeField]
CanvasGroup InfoNode;
[SerializeField]
SubMenuItemGroup SubMenuItemGroup;
public float SelectScale = 1f;
@ -27,10 +29,9 @@ namespace AxibugEmuOnline.Client.UI
public RectTransform Rect => transform as RectTransform;
[SerializeField]
private bool m_select;
private TweenerCore<float, float, FloatOptions> progressTween;
public float m_progress;
bool m_select;
TweenerCore<float, float, FloatOptions> progressTween;
float m_progress;
private void Awake()
{
m_select = false;
@ -38,31 +39,26 @@ namespace AxibugEmuOnline.Client.UI
if (ShadowIcon != null) ShadowIcon.gameObject.SetActive(false);
var temp = Txt.color;
temp.a = 0;
Txt.color = temp;
if (Descript != null)
{
temp = Descript.color;
temp.a = 0;
Descript.color = temp;
}
InfoNode.alpha = 0;
if (ShadowIcon != null) ShadowIcon.gameObject.SetActiveEx(false);
if (SubMenuItemGroup != null) SubMenuItemGroup.SetSelect(false);
}
public void SetData(MenuData data)
{
name = data.Name;
Icon.sprite = data.Icon;
SetBaseInfo(data.Name, data.Description, data.Icon);
if (SubMenuItemGroup != null) SubMenuItemGroup.Init(data.SubMenus);
}
if (ShadowIcon != null) ShadowIcon.sprite = data.Icon;
protected void SetBaseInfo(string name, string descript, Sprite icon)
{
this.name = name;
Txt.text = data.Name;
if (Descript != null) Descript.text = data.Description;
if (Icon != null) Icon.sprite = icon;
if (ShadowIcon != null) ShadowIcon.sprite = icon;
if (Txt != null) Txt.text = name;
if (Descript != null) Descript.text = descript;
if (SubMenuItemGroup != null)
SubMenuItemGroup.Init(data.SubMenus);
}
public void SetSelectState(bool selected)
@ -79,27 +75,14 @@ namespace AxibugEmuOnline.Client.UI
progressTween = DOTween.To(() => m_progress, (x) => m_progress = x, m_select ? 1 : 0, 5)
.SetSpeedBased().OnUpdate(() =>
{
var temp = Txt.color;
temp.a = m_progress;
Txt.color = temp;
if (Descript != null)
{
temp = Descript.color;
temp.a = m_progress;
Descript.color = temp;
}
InfoNode.alpha = m_progress;
Root.localScale = Vector3.one * Mathf.Lerp(UnSelectScale, SelectScale, m_progress);
});
}
public void OnEnterItem()
{
}
public void OnExitItem()
{
public virtual void OnEnterItem() { }
}
public virtual void OnExitItem() { }
}
}

View File

@ -0,0 +1,61 @@
using AxibugEmuOnline.Client.UI;
using System;
using UnityEngine;
using UnityEngine.UI;
namespace AxibugEmuOnline.Client
{
public class RomItem : MenuItem, IVirtualItem
{
[SerializeField]
Image m_romImage;
public int Index { get; set; }
private RomLib m_romlib;
private RomFile m_romfile;
public void SetData(object data)
{
SetSelectState(true);
m_romfile = (RomFile)data;
UpdateView();
if (!m_romfile.InfoReady)
{
m_romfile.OnInfoFilled += OnRomInfoFilled;
m_romlib.BeginFetchRomInfo(m_romfile);
}
}
public void SetDependencyProperty(object data)
{
m_romlib = (RomLib)data;
}
public void Release()
{
m_romfile.OnInfoFilled -= OnRomInfoFilled;
SetSelectState(false);
}
private void OnRomInfoFilled()
{
UpdateView();
}
private void UpdateView()
{
if (!m_romfile.InfoReady)
{
SetBaseInfo(string.Empty, string.Empty, null);
}
else
{
SetBaseInfo(m_romfile.Alias, m_romfile.Descript, null);
}
}
}
}

View File

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

View File

@ -1,4 +1,5 @@
using AxibugEmuOnline.Client.UI;
using Codice.Utils;
using DG.Tweening;
using DG.Tweening.Core;
using DG.Tweening.Plugins.Options;
@ -44,7 +45,9 @@ namespace AxibugEmuOnline.Client
m_runtimeMenuUI.Clear();
foreach (MenuData menuData in menuDataList)
{
var item = Clone(transform);
var template = menuData.OverrideTemplate != null ? menuData.OverrideTemplate : SubMenuItemTemplate;
var item = Clone(template, transform);
item.SetData(menuData);
m_runtimeMenuUI.Add(item);
}
@ -164,16 +167,16 @@ namespace AxibugEmuOnline.Client
}
}
private MenuItem Clone(Transform parent)
private MenuItem Clone(MenuItem template, Transform parent)
{
#if UNITY_EDITOR
if (Application.isPlaying)
{
return GameObject.Instantiate(SubMenuItemTemplate.gameObject, parent).GetComponent<MenuItem>();
return GameObject.Instantiate(template.gameObject, parent).GetComponent<MenuItem>();
}
else
{
var clone = UnityEditor.PrefabUtility.InstantiatePrefab(SubMenuItemTemplate.gameObject, parent) as GameObject;
var clone = UnityEditor.PrefabUtility.InstantiatePrefab(template.gameObject, parent) as GameObject;
return clone.GetComponent<MenuItem>();
}
#else

View File

@ -0,0 +1,53 @@
using UnityEngine;
namespace AxibugEmuOnline.Client
{
public class ThirdMenuRoot : MonoBehaviour
{
private RectTransform m_rect;
private RectTransform m_parent;
[SerializeField]
float WidthFix = 50;
private void Awake()
{
m_rect = transform as RectTransform;
m_parent = transform.parent as RectTransform;
}
private void LateUpdate()
{
SyncRectToLaunchUI();
}
Vector3[] corner = new Vector3[4];
private void SyncRectToLaunchUI()
{
if (LaunchUI.Instance == null) return;
var launchUIRect = LaunchUI.Instance.transform as RectTransform;
m_rect.pivot = new Vector2(1, 0.5f);
m_rect.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, launchUIRect.rect.width);
m_rect.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, launchUIRect.rect.height);
m_rect.position = launchUIRect.position;
var temp = m_rect.localPosition;
var offsetX = (m_rect.pivot.x - 0.5f) * m_rect.rect.size.x;
temp.x += offsetX;
var offsetY = (m_rect.pivot.y - 0.5f) * m_rect.rect.size.y;
temp.y += offsetY;
m_rect.localPosition = temp;
m_rect.localScale = launchUIRect.localScale;
m_parent.GetWorldCorners(corner);
var parentPosition = corner[0];
parentPosition = launchUIRect.InverseTransformPoint(parentPosition);
launchUIRect.GetWorldCorners(corner);
var rootPosition = corner[0];
rootPosition = launchUIRect.InverseTransformPoint(rootPosition);
var widthGap = parentPosition.x - rootPosition.x;
m_rect.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, launchUIRect.rect.width - widthGap - WidthFix);
}
}
}

View File

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

View File

@ -642,7 +642,7 @@ PlayerSettings:
scriptingDefineSymbols:
1: DOTWEEN
4: DOTWEEN
7: DOTWEEN
7: DOTWEEN;ODIN_INSPECTOR;ODIN_INSPECTOR_3;ODIN_INSPECTOR_3_1;ODIN_INSPECTOR_EDITOR_ONLY
13: DOTWEEN
14: DOTWEEN
19: DOTWEEN