Merge pull request 'master' (#69) from Alienjack/AxibugEmuOnline:master into master

Reviewed-on: #69
This commit is contained in:
sin365 2024-12-25 15:11:31 +08:00
commit 4c42b40199
27 changed files with 338 additions and 653 deletions

View File

@ -25,12 +25,13 @@ Transform:
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 9760340517325694} m_GameObject: {fileID: 9760340517325694}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: [] m_Children: []
m_Father: {fileID: 4232056521131536011} m_Father: {fileID: 4232056521131536011}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &9003897287163669553 --- !u!114 &9003897287163669553
MonoBehaviour: MonoBehaviour:
@ -56,6 +57,7 @@ AudioSource:
serializedVersion: 4 serializedVersion: 4
OutputAudioMixerGroup: {fileID: 0} OutputAudioMixerGroup: {fileID: 0}
m_audioClip: {fileID: 0} m_audioClip: {fileID: 0}
m_Resource: {fileID: 0}
m_PlayOnAwake: 1 m_PlayOnAwake: 1
m_Volume: 1 m_Volume: 1
m_Pitch: 1 m_Pitch: 1
@ -169,9 +171,9 @@ RectTransform:
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: -1, z: 1} m_LocalScale: {x: 1, y: -1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: [] m_Children: []
m_Father: {fileID: 1038087993597378172} m_Father: {fileID: 1038087993597378172}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0} m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1} m_AnchorMax: {x: 1, y: 1}
@ -240,11 +242,11 @@ RectTransform:
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: m_Children:
- {fileID: 3430872171738201552} - {fileID: 3430872171738201552}
- {fileID: 5684774662137182450} - {fileID: 5684774662137182450}
m_Father: {fileID: 4232056520494431727} m_Father: {fileID: 4232056520494431727}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1} m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1}
@ -289,12 +291,13 @@ Transform:
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4232056520112715746} m_GameObject: {fileID: 4232056520112715746}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: [] m_Children: []
m_Father: {fileID: 4232056521131536011} m_Father: {fileID: 4232056521131536011}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &4232056520112715744 --- !u!114 &4232056520112715744
MonoBehaviour: MonoBehaviour:
@ -311,6 +314,8 @@ MonoBehaviour:
NesEmu: {fileID: 4232056521131536012} NesEmu: {fileID: 4232056521131536012}
DrawCanvas: {fileID: 4232056520494431724} DrawCanvas: {fileID: 4232056520494431724}
Image: {fileID: 4232056521759880274} Image: {fileID: 4232056521759880274}
GPUTurboMat_gpu: {fileID: 2100000, guid: 07e28fcb992bc124e986f9d8ff3beb97, type: 2}
GPUTurbo: 1
--- !u!1 &4232056520494431712 --- !u!1 &4232056520494431712
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -322,7 +327,6 @@ GameObject:
- component: {fileID: 4232056520494431727} - component: {fileID: 4232056520494431727}
- component: {fileID: 4232056520494431724} - component: {fileID: 4232056520494431724}
- component: {fileID: 4232056520494431725} - component: {fileID: 4232056520494431725}
- component: {fileID: 4232056520494431726}
m_Layer: 5 m_Layer: 5
m_Name: Canvas m_Name: Canvas
m_TagString: Untagged m_TagString: Untagged
@ -340,11 +344,11 @@ RectTransform:
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0, y: 0, z: 0} m_LocalScale: {x: 0, y: 0, z: 0}
m_ConstrainProportionsScale: 0
m_Children: m_Children:
- {fileID: 4232056521759880275} - {fileID: 4232056521759880275}
- {fileID: 1038087993597378172} - {fileID: 1038087993597378172}
m_Father: {fileID: 4232056521131536011} m_Father: {fileID: 4232056521131536011}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0} m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0}
@ -368,7 +372,9 @@ Canvas:
m_OverrideSorting: 0 m_OverrideSorting: 0
m_OverridePixelPerfect: 0 m_OverridePixelPerfect: 0
m_SortingBucketNormalizedSize: 0 m_SortingBucketNormalizedSize: 0
m_VertexColorAlwaysGammaSpace: 0
m_AdditionalShaderChannelsFlag: 0 m_AdditionalShaderChannelsFlag: 0
m_UpdateRectTransformForStandalone: 0
m_SortingLayerID: 0 m_SortingLayerID: 0
m_SortingOrder: 0 m_SortingOrder: 0
m_TargetDisplay: 0 m_TargetDisplay: 0
@ -395,23 +401,6 @@ MonoBehaviour:
m_DefaultSpriteDPI: 96 m_DefaultSpriteDPI: 96
m_DynamicPixelsPerUnit: 1 m_DynamicPixelsPerUnit: 1
m_PresetInfoIsWorld: 0 m_PresetInfoIsWorld: 0
--- !u!114 &4232056520494431726
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4232056520494431712}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
m_Name:
m_EditorClassIdentifier:
m_IgnoreReversedGraphics: 1
m_BlockingObjects: 0
m_BlockingMask:
serializedVersion: 2
m_Bits: 4294967295
--- !u!1 &4232056521131536013 --- !u!1 &4232056521131536013
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -436,15 +425,16 @@ Transform:
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4232056521131536013} m_GameObject: {fileID: 4232056521131536013}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: m_Children:
- {fileID: 4232056520112715745} - {fileID: 4232056520112715745}
- {fileID: 4785916497946256520} - {fileID: 4785916497946256520}
- {fileID: 4232056520494431727} - {fileID: 4232056520494431727}
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &4232056521131536012 --- !u!114 &4232056521131536012
MonoBehaviour: MonoBehaviour:
@ -458,10 +448,8 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 39557e19783acee499ace6c68549e8f8, type: 3} m_Script: {fileID: 11500000, guid: 39557e19783acee499ace6c68549e8f8, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
InputTemplate: {fileID: 0}
VideoProvider: {fileID: 4232056520112715744} VideoProvider: {fileID: 4232056520112715744}
AudioProvider: {fileID: 9003897287163669553} AudioProvider: {fileID: 9003897287163669553}
m_bPause: 0
--- !u!1 &4232056521759880276 --- !u!1 &4232056521759880276
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -490,9 +478,9 @@ RectTransform:
m_LocalRotation: {x: 1, y: 0, z: 0, w: 0} m_LocalRotation: {x: 1, y: 0, z: 0, w: 0}
m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: [] m_Children: []
m_Father: {fileID: 4232056520494431727} m_Father: {fileID: 4232056520494431727}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 180, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 180, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0} m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1} m_AnchorMax: {x: 1, y: 1}
@ -519,7 +507,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 1344c3c82d62a2a41a3576d8abb8e3ea, type: 3} m_Script: {fileID: 11500000, guid: 1344c3c82d62a2a41a3576d8abb8e3ea, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
m_Material: {fileID: 2100000, guid: 07e28fcb992bc124e986f9d8ff3beb97, type: 2} m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1} m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1 m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
@ -562,9 +550,9 @@ RectTransform:
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: [] m_Children: []
m_Father: {fileID: 1038087993597378172} m_Father: {fileID: 1038087993597378172}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0} m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 0} m_AnchorMax: {x: 1, y: 0}

View File

@ -931,7 +931,8 @@ GameObject:
m_Component: m_Component:
- component: {fileID: 802786939} - component: {fileID: 802786939}
- component: {fileID: 802786941} - component: {fileID: 802786941}
- component: {fileID: 802786940} - component: {fileID: 802786942}
- component: {fileID: 802786943}
m_Layer: 5 m_Layer: 5
m_Name: Image2 m_Name: Image2
m_TagString: Untagged m_TagString: Untagged
@ -958,7 +959,15 @@ RectTransform:
m_AnchoredPosition: {x: 0, y: 0} m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5} m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &802786940 --- !u!222 &802786941
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 802786938}
m_CullTransparentMesh: 1
--- !u!114 &802786942
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
@ -967,7 +976,7 @@ MonoBehaviour:
m_GameObject: {fileID: 802786938} m_GameObject: {fileID: 802786938}
m_Enabled: 1 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Script: {fileID: 11500000, guid: 1344c3c82d62a2a41a3576d8abb8e3ea, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
m_Material: {fileID: 0} m_Material: {fileID: 0}
@ -978,24 +987,25 @@ MonoBehaviour:
m_OnCullStateChanged: m_OnCullStateChanged:
m_PersistentCalls: m_PersistentCalls:
m_Calls: [] m_Calls: []
m_Sprite: {fileID: 21300000, guid: e043954733c440645ba43b09301ee4a6, type: 3} m_Texture: {fileID: 2800000, guid: e043954733c440645ba43b09301ee4a6, type: 3}
m_Type: 0 m_UVRect:
m_PreserveAspect: 0 serializedVersion: 2
m_FillCenter: 1 x: 0
m_FillMethod: 4 y: 0
m_FillAmount: 1 width: 1
m_FillClockwise: 1 height: 1
m_FillOrigin: 0 --- !u!114 &802786943
m_UseSpriteMesh: 0 MonoBehaviour:
m_PixelsPerUnitMultiplier: 1
--- !u!222 &802786941
CanvasRenderer:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 802786938} m_GameObject: {fileID: 802786938}
m_CullTransparentMesh: 1 m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: a0987fcca76655248ac8defaffd1cb45, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!224 &939125854 stripped --- !u!224 &939125854 stripped
RectTransform: RectTransform:
m_CorrespondingSourceObject: {fileID: 3531919739338806919, guid: 1de15a80c8c1aa94486563740a15d91c, type: 3} m_CorrespondingSourceObject: {fileID: 3531919739338806919, guid: 1de15a80c8c1aa94486563740a15d91c, type: 3}
@ -1010,9 +1020,6 @@ GameObject:
serializedVersion: 6 serializedVersion: 6
m_Component: m_Component:
- component: {fileID: 1124446957} - component: {fileID: 1124446957}
- component: {fileID: 1124446960}
- component: {fileID: 1124446959}
- component: {fileID: 1124446958}
- component: {fileID: 1124446961} - component: {fileID: 1124446961}
m_Layer: 5 m_Layer: 5
m_Name: FilterPreview m_Name: FilterPreview
@ -1028,83 +1035,20 @@ RectTransform:
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1124446956} m_GameObject: {fileID: 1124446956}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0 m_ConstrainProportionsScale: 0
m_Children: m_Children:
- {fileID: 1471857115} - {fileID: 1471857115}
- {fileID: 802786939} - {fileID: 802786939}
m_Father: {fileID: 1335662459} m_Father: {fileID: 1599240741}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0} m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0} m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &1124446958
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1124446956}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
m_Name:
m_EditorClassIdentifier:
m_IgnoreReversedGraphics: 1
m_BlockingObjects: 0
m_BlockingMask:
serializedVersion: 2
m_Bits: 4294967295
--- !u!114 &1124446959
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1124446956}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
m_Name:
m_EditorClassIdentifier:
m_UiScaleMode: 1
m_ReferencePixelsPerUnit: 100
m_ScaleFactor: 1
m_ReferenceResolution: {x: 1920, y: 1080}
m_ScreenMatchMode: 0
m_MatchWidthOrHeight: 0
m_PhysicalUnit: 3
m_FallbackScreenDPI: 96
m_DefaultSpriteDPI: 96
m_DynamicPixelsPerUnit: 1
m_PresetInfoIsWorld: 0
--- !u!223 &1124446960
Canvas:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1124446956}
m_Enabled: 1
serializedVersion: 3
m_RenderMode: 1
m_Camera: {fileID: 1475480931}
m_PlaneDistance: 100
m_PixelPerfect: 0
m_ReceivesEvents: 1
m_OverrideSorting: 0
m_OverridePixelPerfect: 0
m_SortingBucketNormalizedSize: 0
m_VertexColorAlwaysGammaSpace: 0
m_AdditionalShaderChannelsFlag: 1
m_UpdateRectTransformForStandalone: 0
m_SortingLayerID: 0
m_SortingOrder: 1
m_TargetDisplay: 0
--- !u!225 &1124446961 --- !u!225 &1124446961
CanvasGroup: CanvasGroup:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -1153,11 +1097,9 @@ Transform:
m_ConstrainProportionsScale: 0 m_ConstrainProportionsScale: 0
m_Children: m_Children:
- {fileID: 1639312037} - {fileID: 1639312037}
- {fileID: 1475480929}
- {fileID: 74796459} - {fileID: 74796459}
- {fileID: 1427887270} - {fileID: 1427887270}
- {fileID: 1599240741} - {fileID: 1599240741}
- {fileID: 1124446957}
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1335662460 --- !u!114 &1335662460
@ -1172,7 +1114,6 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 980f937ad27ad8540afeb8b7f100997e, type: 3} m_Script: {fileID: 11500000, guid: 980f937ad27ad8540afeb8b7f100997e, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
m_filterVolume: {fileID: 1475480930}
m_filterPreview: {fileID: 1124446961} m_filterPreview: {fileID: 1124446961}
m_xmbBg: {fileID: 730698712} m_xmbBg: {fileID: 730698712}
bTest: 0 bTest: 0
@ -1884,174 +1825,6 @@ MonoBehaviour:
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
imgUI: {fileID: 1471857116} imgUI: {fileID: 1471857116}
--- !u!1 &1475480928
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1475480929}
- component: {fileID: 1475480931}
- component: {fileID: 1475480932}
- component: {fileID: 1475480930}
m_Layer: 5
m_Name: GameCamera
m_TagString: MainCamera
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1475480929
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1475480928}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0.98, y: 20.14, z: 6.23}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1335662459}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1475480930
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1475480928}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8b9a305e18de0c04dbd257a21cd47087, type: 3}
m_Name:
m_EditorClassIdentifier:
sharedProfile: {fileID: 11400000, guid: 17060e2d2f9e5c340a526f08317e5a98, type: 2}
isGlobal: 1
blendDistance: 0
weight: 1
priority: 0
--- !u!20 &1475480931
Camera:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1475480928}
m_Enabled: 1
serializedVersion: 2
m_ClearFlags: 1
m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
m_projectionMatrixMode: 1
m_GateFitMode: 2
m_FOVAxisMode: 0
m_Iso: 200
m_ShutterSpeed: 0.005
m_Aperture: 16
m_FocusDistance: 10
m_FocalLength: 50
m_BladeCount: 5
m_Curvature: {x: 2, y: 11}
m_BarrelClipping: 0.25
m_Anamorphism: 0
m_SensorSize: {x: 36, y: 24}
m_LensShift: {x: 0, y: 0}
m_NormalizedViewPortRect:
serializedVersion: 2
x: 0
y: 0
width: 1
height: 1
near clip plane: 0.3
far clip plane: 1000
field of view: 60
orthographic: 1
orthographic size: 5
m_Depth: -2
m_CullingMask:
serializedVersion: 2
m_Bits: 32
m_RenderingPath: -1
m_TargetTexture: {fileID: 0}
m_TargetDisplay: 0
m_TargetEye: 3
m_HDR: 1
m_AllowMSAA: 1
m_AllowDynamicResolution: 0
m_ForceIntoRT: 0
m_OcclusionCulling: 1
m_StereoConvergence: 10
m_StereoSeparation: 0.022
--- !u!114 &1475480932
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1475480928}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 948f4100a11a5c24981795d21301da5c, type: 3}
m_Name:
m_EditorClassIdentifier:
volumeTrigger: {fileID: 0}
volumeLayer:
serializedVersion: 2
m_Bits: 32
stopNaNPropagation: 1
finalBlitToCameraTarget: 0
antialiasingMode: 0
temporalAntialiasing:
jitterSpread: 0.75
sharpness: 0.25
stationaryBlending: 0.95
motionBlending: 0.85
subpixelMorphologicalAntialiasing:
quality: 2
fastApproximateAntialiasing:
fastMode: 0
keepAlpha: 0
fog:
enabled: 1
excludeSkybox: 1
debugLayer:
lightMeter:
width: 512
height: 256
showCurves: 1
histogram:
width: 512
height: 256
channel: 3
waveform:
exposure: 0.12
height: 256
vectorscope:
size: 256
exposure: 0.12
overlaySettings:
linearDepth: 0
motionColorIntensity: 4
motionGridSize: 64
colorBlindnessType: 0
colorBlindnessStrength: 1
m_Resources: {fileID: 11400000, guid: d82512f9c8e5d4a4d938b575d47f88d4, type: 2}
m_ShowToolkit: 0
m_ShowCustomSorter: 0
breakBeforeColorGrading: 0
m_BeforeTransparentBundles: []
m_BeforeStackBundles:
- assemblyQualifiedName: FixingPixelArtGrille, AxibugEmuOnline.Client, Version=0.0.0.0,
Culture=neutral, PublicKeyToken=null
- assemblyQualifiedName: MattiasCRT, AxibugEmuOnline.Client, Version=0.0.0.0, Culture=neutral,
PublicKeyToken=null
- assemblyQualifiedName: LCDPostEffect, AxibugEmuOnline.Client, Version=0.0.0.0,
Culture=neutral, PublicKeyToken=null
m_AfterStackBundles: []
--- !u!1 &1498586261 --- !u!1 &1498586261
GameObject: GameObject:
m_ObjectHideFlags: 3 m_ObjectHideFlags: 3
@ -2190,6 +1963,7 @@ RectTransform:
m_LocalScale: {x: 0, y: 0, z: 0} m_LocalScale: {x: 0, y: 0, z: 0}
m_ConstrainProportionsScale: 0 m_ConstrainProportionsScale: 0
m_Children: m_Children:
- {fileID: 1124446957}
- {fileID: 1983793178} - {fileID: 1983793178}
- {fileID: 939125854} - {fileID: 939125854}
- {fileID: 1318590597} - {fileID: 1318590597}
@ -2214,7 +1988,7 @@ GameObject:
- component: {fileID: 1639312035} - component: {fileID: 1639312035}
m_Layer: 0 m_Layer: 0
m_Name: UICamera m_Name: UICamera
m_TagString: Untagged m_TagString: MainCamera
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
m_StaticEditorFlags: 0 m_StaticEditorFlags: 0
@ -2263,7 +2037,7 @@ Camera:
field of view: 60 field of view: 60
orthographic: 1 orthographic: 1
orthographic size: 5 orthographic size: 5
m_Depth: -1 m_Depth: 0
m_CullingMask: m_CullingMask:
serializedVersion: 2 serializedVersion: 2
m_Bits: 32 m_Bits: 32
@ -2471,6 +2245,10 @@ PrefabInstance:
propertyPath: m_AnchorMax.y propertyPath: m_AnchorMax.y
value: 0 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 736530578155193984, guid: 1de15a80c8c1aa94486563740a15d91c, type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 935090267056593628, guid: 1de15a80c8c1aa94486563740a15d91c, type: 3} - target: {fileID: 935090267056593628, guid: 1de15a80c8c1aa94486563740a15d91c, type: 3}
propertyPath: m_AnchorMax.y propertyPath: m_AnchorMax.y
value: 0 value: 0
@ -2963,6 +2741,10 @@ PrefabInstance:
propertyPath: m_AnchorMax.y propertyPath: m_AnchorMax.y
value: 0 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 8801936766261209235, guid: 1de15a80c8c1aa94486563740a15d91c, type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: [] m_RemovedComponents: []
m_RemovedGameObjects: [] m_RemovedGameObjects: []
m_AddedGameObjects: [] m_AddedGameObjects: []

View File

@ -43,15 +43,13 @@ namespace AxibugEmuOnline.Client.ClientCore
#endif #endif
public static void Init(Initer initer, bool isTest = false, string testSrvIP = "") public static void Init(Initer initer, bool isTest = false, string testSrvIP = "")
{ {
PlayerPrefs.DeleteAll(); if (UnityEngine.Application.platform == RuntimePlatform.PSP2)
{
//PSV 等平台需要手动创建目录
PSP2Init();
}
if (UnityEngine.Application.platform == RuntimePlatform.PSP2) settings = new AppSettings();
{
//PSV 等平台需要手动创建目录
PSP2Init();
}
settings = new AppSettings();
log = new LogManager(); log = new LogManager();
LogManager.OnLog += OnNoSugarNetLog; LogManager.OnLog += OnNoSugarNetLog;
@ -66,7 +64,7 @@ namespace AxibugEmuOnline.Client.ClientCore
CacheMgr = new CacheManager(); CacheMgr = new CacheManager();
roomMgr = new AppRoom(); roomMgr = new AppRoom();
share = new AppShare(); share = new AppShare();
filter = new FilterManager(initer.m_filterVolume, initer.m_filterPreview, initer.m_xmbBg); filter = new FilterManager(initer.m_filterPreview, initer.m_xmbBg);
bTest = isTest; bTest = isTest;
mTestSrvIP = testSrvIP; mTestSrvIP = testSrvIP;
var go = new GameObject("[AppAxibugEmuOnline]"); var go = new GameObject("[AppAxibugEmuOnline]");
@ -122,7 +120,7 @@ namespace AxibugEmuOnline.Client.ClientCore
yield break; yield break;
} }
AxiHttpProxy.SendWebRequestProxy request = AxiHttpProxy.Get($"{App.httpAPI.WebSiteApi}/CheckStandInfo?platform={platform}&version={Application.version}"); AxiHttpProxy.SendWebRequestProxy request = AxiHttpProxy.Get($"{App.httpAPI.WebSiteApi}/CheckStandInfo?platform={platform}&version={Application.version}");
yield return request.SendWebRequest; yield return request.SendWebRequest;
if (!request.downloadHandler.isDone) if (!request.downloadHandler.isDone)
yield break; yield break;

View File

@ -1,28 +1,32 @@
using System; using Assets.Script.AppMain.Filter;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Reflection; using System.Reflection;
using UnityEngine; using UnityEngine;
using UnityEngine.Rendering.PostProcessing;
namespace AxibugEmuOnline.Client namespace AxibugEmuOnline.Client
{ {
public abstract class FilterEffect : PostProcessEffectSettings public abstract class FilterEffect
{ {
private List<EditableParamerter> m_editableParamList; public BoolParameter Enable = new BoolParameter(false);
public abstract string Name { get; }
public IReadOnlyCollection<EditableParamerter> EditableParam => m_editableParamList.AsReadOnly(); public IReadOnlyCollection<EditableParamerter> EditableParam => m_editableParamList.AsReadOnly();
public abstract string Name { get; } List<EditableParamerter> m_editableParamList;
Material m_material;
protected abstract string ShaderName { get; }
public FilterEffect() public FilterEffect()
{ {
GetEditableFilterParamters(); GetEditableFilterParamters();
m_material = new Material(Shader.Find(ShaderName));
} }
protected void GetEditableFilterParamters() void GetEditableFilterParamters()
{ {
var parameters = (from t in GetType().GetFields(BindingFlags.Instance | BindingFlags.Public) var parameters = (from t in GetType().GetFields(BindingFlags.Instance | BindingFlags.Public)
where t.FieldType.IsSubclassOf(typeof(ParameterOverride)) where t.FieldType.IsSubclassOf(typeof(FilterParameter))
where t.DeclaringType.IsSubclassOf(typeof(FilterEffect)) where t.DeclaringType.IsSubclassOf(typeof(FilterEffect))
orderby t.MetadataToken orderby t.MetadataToken
select t); select t);
@ -30,7 +34,7 @@ namespace AxibugEmuOnline.Client
m_editableParamList = new List<EditableParamerter>(); m_editableParamList = new List<EditableParamerter>();
foreach (var param in parameters) foreach (var param in parameters)
{ {
var paramObj = (ParameterOverride)param.GetValue(this); var paramObj = (FilterParameter)param.GetValue(this);
var rangeAtt = param.GetCustomAttribute<RangeAttribute>(); var rangeAtt = param.GetCustomAttribute<RangeAttribute>();
float min = 0; float min = 0;
float max = 10; float max = 10;
@ -44,47 +48,41 @@ namespace AxibugEmuOnline.Client
} }
} }
public void Render(Texture src, RenderTexture result)
{
m_material.SetTexture("_MainTex", src);
OnRenderer(m_material, src, result);
}
protected abstract void OnRenderer(Material renderMat, Texture src, RenderTexture result);
public class EditableParamerter public class EditableParamerter
{ {
private ParameterOverride m_paramObject; private FilterParameter m_paramObject;
private FieldInfo valueFieldInfo;
public Type ValueType { get; private set; } public Type ValueType => m_paramObject.ValueType;
public string Name { get; private set; } public string Name { get; private set; }
public object Value public object Value
{ {
get => valueFieldInfo.GetValue(m_paramObject); get => m_paramObject.Value;
set set => m_paramObject.Value = value;
{
valueFieldInfo.SetValue(m_paramObject, value);
m_paramObject.overrideState = true;
}
} }
public object MinValue { get; private set; } public object MinValue { get; private set; }
public object MaxValue { get; private set; } public object MaxValue { get; private set; }
public EditableParamerter(string name, ParameterOverride paramObject, object minValue, object maxValue) public EditableParamerter(string name, FilterParameter paramObject, object minValue, object maxValue)
{ {
m_paramObject = paramObject; m_paramObject = paramObject;
Name = name; Name = name;
var paramType = paramObject.GetType(); var paramType = paramObject.GetType();
valueFieldInfo = paramType.GetField("value", BindingFlags.Public | BindingFlags.Instance);
if (valueFieldInfo != null)
{
ValueType = valueFieldInfo.FieldType;
}
else
{
ValueType = typeof(object);
}
MinValue = minValue; MinValue = minValue;
MaxValue = maxValue; MaxValue = maxValue;
} }
public void ResetToDefault() => m_paramObject.overrideState = false; public void ResetToDefault() => m_paramObject.Value = null;
public void Apply(object overrideValue) public void Apply(object overrideValue)

View File

@ -3,14 +3,13 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using UnityEngine; using UnityEngine;
using UnityEngine.Rendering.PostProcessing;
using static AxibugEmuOnline.Client.FilterEffect; using static AxibugEmuOnline.Client.FilterEffect;
using static AxibugEmuOnline.Client.FilterManager;
namespace AxibugEmuOnline.Client namespace AxibugEmuOnline.Client
{ {
public class FilterManager public class FilterManager
{ {
private PostProcessProfile m_filterPorfile;
private List<Filter> m_filters; private List<Filter> m_filters;
private Dictionary<EnumPlatform, Filter> m_filterPlatforms = new Dictionary<EnumPlatform, Filter>(); private Dictionary<EnumPlatform, Filter> m_filterPlatforms = new Dictionary<EnumPlatform, Filter>();
private AlphaWraper m_previewFilterWraper; private AlphaWraper m_previewFilterWraper;
@ -20,18 +19,42 @@ namespace AxibugEmuOnline.Client
/// </summary> /// </summary>
public IReadOnlyList<Filter> Filters => m_filters; public IReadOnlyList<Filter> Filters => m_filters;
public FilterManager(PostProcessVolume filterVolume, CanvasGroup filterPreview, CanvasGroup mainBg) public FilterManager(CanvasGroup filterPreview, CanvasGroup mainBg)
{ {
if (filterVolume == null) m_filters = new List<Filter>
return; {
m_filterPorfile = filterVolume.profile; new Filter(new FixingPixelArtGrille()),
m_filters = m_filterPorfile.settings.Where(setting => setting is FilterEffect).Select(setting => new Filter(setting as FilterEffect)).ToList(); new Filter(new LCDPostEffect()),
new Filter(new MattiasCRT()),
};
var json = PlayerPrefs.GetString(nameof(FilterRomSetting)); var json = PlayerPrefs.GetString(nameof(FilterRomSetting));
m_filterRomSetting = JsonUtility.FromJson<FilterRomSetting>(json) ?? new FilterRomSetting(); m_filterRomSetting = JsonUtility.FromJson<FilterRomSetting>(json) ?? new FilterRomSetting();
m_previewFilterWraper = new AlphaWraper(mainBg, filterPreview, false); m_previewFilterWraper = new AlphaWraper(mainBg, filterPreview, false);
ShutDownFilterPreview(); ShutDownFilterPreview();
ShutDownFilter(); ShutDownFilter();
}
private RenderTexture result = null;
public Texture ExecuteFilterRender(Texture src)
{
if (result == null)
result = RenderTexture.GetTemporary(Screen.width, Screen.height);
bool anyFilterEnable = false;
foreach (var filter in Filters)
{
if (!filter.m_setting.Enable.GetValue()) continue;
filter.m_setting.Render(src, result);
anyFilterEnable = true;
}
if (anyFilterEnable)
return result;
else
return src;
} }
/// <summary> 关闭滤镜预览 </summary> /// <summary> 关闭滤镜预览 </summary>
@ -54,8 +77,8 @@ namespace AxibugEmuOnline.Client
{ {
foreach (var selfFiler in Filters) foreach (var selfFiler in Filters)
{ {
if (selfFiler != filter) selfFiler.m_setting.enabled.Override(false); if (selfFiler != filter) selfFiler.m_setting.Enable.Override(false);
else selfFiler.m_setting.enabled.Override(true); else selfFiler.m_setting.Enable.Override(true);
} }
} }
@ -65,8 +88,8 @@ namespace AxibugEmuOnline.Client
public void ShutDownFilter() public void ShutDownFilter()
{ {
//关闭所有后处理效果 //关闭所有后处理效果
foreach (var setting in m_filterPorfile.settings) foreach (var filter in Filters)
setting.enabled.Override(false); filter.m_setting.Enable.Override(false);
} }
/// <summary> /// <summary>
@ -94,21 +117,21 @@ namespace AxibugEmuOnline.Client
Filter filter = null; Filter filter = null;
FilterPreset preset = null; FilterPreset preset = null;
//filter = Filters.FirstOrDefault(f => f.Name == value.filterName); //filter = Filters.FirstOrDefault(f => f.Name == value.filterName);
//if (filter != null) //if (filter != null)
//{ //{
// string presetName = value.presetName; // string presetName = value.presetName;
// preset = filter.Presets.FirstOrDefault(p => p.Name == presetName); // preset = filter.Presets.FirstOrDefault(p => p.Name == presetName);
//} //}
filter = Filters.FirstOrDefault(f => f.Name == value.Item1); filter = Filters.FirstOrDefault(f => f.Name == value.Item1);
if (filter != null) if (filter != null)
{ {
string presetName = value.Item2; string presetName = value.Item2;
preset = filter.Presets.FirstOrDefault(p => p.Name == presetName); preset = filter.Presets.FirstOrDefault(p => p.Name == presetName);
} }
return new GetFilterSetting_result() return new GetFilterSetting_result()
{ {
filter = filter, filter = filter,
preset = preset preset = preset
@ -118,10 +141,10 @@ namespace AxibugEmuOnline.Client
public struct GetFilterSetting_result public struct GetFilterSetting_result
{ {
public Filter filter; public Filter filter;
public FilterPreset preset; public FilterPreset preset;
} }
public class Filter public class Filter
{ {
public string Name => m_setting.Name; public string Name => m_setting.Name;
public IReadOnlyCollection<EditableParamerter> Paramerters => m_setting.EditableParam; public IReadOnlyCollection<EditableParamerter> Paramerters => m_setting.EditableParam;
@ -243,7 +266,7 @@ namespace AxibugEmuOnline.Client
{ {
prepareCache(); prepareCache();
string value; string value;
m_paramName2ValueJson.TryGetValue(paramName, out value); m_paramName2ValueJson.TryGetValue(paramName, out value);
return value; return value;
} }
@ -253,9 +276,9 @@ namespace AxibugEmuOnline.Client
if (rawStr == null) return null; if (rawStr == null) return null;
if (valueType == typeof(float)) if (valueType == typeof(float))
{ {
float floatVal; float floatVal;
float.TryParse(rawStr, out floatVal); float.TryParse(rawStr, out floatVal);
return floatVal; return floatVal;
} }
else if (valueType.IsEnum) else if (valueType.IsEnum)
@ -329,12 +352,12 @@ namespace AxibugEmuOnline.Client
return JsonUtility.ToJson(this); return JsonUtility.ToJson(this);
} }
public ValueTuple<string,string> Get(RomFile rom) public ValueTuple<string, string> Get(RomFile rom)
{ {
prepareCache(); prepareCache();
Item item; Item item;
m_cache.TryGetValue(rom.ID, out item); m_cache.TryGetValue(rom.ID, out item);
return new ValueTuple<string, string>(item.FilterName, item.PresetName); return new ValueTuple<string, string>(item.FilterName, item.PresetName);
} }

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: f61dfd2411084ec469cdb3faacca298e

View File

@ -0,0 +1,49 @@
using System;
using System.Collections;
using UnityEngine;
namespace Assets.Script.AppMain.Filter
{
public abstract class FilterParameter
{
public abstract Type ValueType { get; }
object m_overrideValue;
protected object m_defaultValue;
public object Value
{
get => m_overrideValue ?? m_defaultValue;
set => m_overrideValue = value;
}
}
public class FilterParameter<T> : FilterParameter
{
public override Type ValueType => typeof(T);
public void Override(T value)
{
Value = value;
}
public T GetValue() => (T)Value;
public FilterParameter(T defaultValue)
{
m_defaultValue = defaultValue;
}
}
public class BoolParameter : FilterParameter<bool>
{
public BoolParameter(bool defaultValue) : base(defaultValue) { }
}
public class Vector2Parameter : FilterParameter<Vector2>
{
public Vector2Parameter(Vector2 defaultValue) : base(defaultValue) { }
}
public class FloatParameter : FilterParameter<float>
{
public FloatParameter(float defaultValue) : base(defaultValue) { }
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 53e95955f1beeb34a87d2046875fa16f

View File

@ -1,50 +1,29 @@
using AxibugEmuOnline.Client; using Assets.Script.AppMain.Filter;
using AxibugEmuOnline.Client;
using UnityEngine; using UnityEngine;
using UnityEngine.Rendering.PostProcessing;
[System.Serializable]
[PostProcess(typeof(FixingPixelArtGrilleRenderer), PostProcessEvent.BeforeStack, "Filter/FixingPixelArtGrille")]
public sealed class FixingPixelArtGrille : FilterEffect public sealed class FixingPixelArtGrille : FilterEffect
{ {
public override string Name => nameof(FixingPixelArtGrille); public override string Name => nameof(FixingPixelArtGrille);
public ParameterOverride<EnumMaskStyle> MaskStyle = new ParameterOverride<EnumMaskStyle> { value = EnumMaskStyle.ApertureGrille }; protected override string ShaderName => "PostEffect/FixingPixcelArtGrille";
public FilterParameter<EnumMaskStyle> MaskStyle = new FilterParameter<EnumMaskStyle>(EnumMaskStyle.ApertureGrille);
[Tooltip("Emulated input resolution\nOptimize for resize")] public Vector2Parameter DrawResolution = new Vector2Parameter(new Vector2(272, 240));
public Vector2Parameter DrawResolution = new Vector2Parameter
{
value = new Vector2(272, 240)
};
[Tooltip("Hardness of scanline")]
[Range(-32, 0)] [Range(-32, 0)]
public FloatParameter HardScan = new FloatParameter { value = -10 }; public FloatParameter HardScan = new FloatParameter(-10);
[Tooltip("Hardness of pixels in scanline")]
[Range(-6, 0)] [Range(-6, 0)]
public FloatParameter HardPix = new FloatParameter { value = -2 }; public FloatParameter HardPix = new FloatParameter(-2);
[Tooltip("Hardness of short vertical bloom")]
[Range(-8, 0)] [Range(-8, 0)]
public FloatParameter HardBloomScan = new FloatParameter { value = -4.0f }; public FloatParameter HardBloomScan = new FloatParameter(-4.0f);
[Tooltip("Hardness of short horizontal bloom")]
[Range(-4, 0)] [Range(-4, 0)]
public FloatParameter HardBloomPix = new FloatParameter { value = -1.5f }; public FloatParameter HardBloomPix = new FloatParameter(-1.5f);
[Tooltip("Amount of small bloom effect")]
[Range(0, 1)] [Range(0, 1)]
public FloatParameter BloomAmount = new FloatParameter { value = 1 / 16f }; public FloatParameter BloomAmount = new FloatParameter(1 / 16f);
public Vector2Parameter Warp = new Vector2Parameter(new Vector2(1f / 64f, 1f / 24f));
[Tooltip("Display warp")]
public Vector2Parameter Warp = new Vector2Parameter { value = new Vector2(1f / 64f, 1f / 24f) };
[Tooltip("Amount of shadow mask Light")]
[Range(1, 3)] [Range(1, 3)]
public FloatParameter MaskLight = new FloatParameter { value = 1.5f }; public FloatParameter MaskLight = new FloatParameter(1.5f);
[Range(0.1f, 1)] [Range(0.1f, 1)]
[Tooltip("Amount of shadow mask Dark")] public FloatParameter MaskDrak = new FloatParameter(0.5f);
public FloatParameter MaskDrak = new FloatParameter { value = 0.5f };
public enum EnumMaskStyle public enum EnumMaskStyle
{ {
@ -53,54 +32,41 @@ public sealed class FixingPixelArtGrille : FilterEffect
StretchedVGA, StretchedVGA,
VGAStyle VGAStyle
} }
}
public sealed class FixingPixelArtGrilleRenderer : PostProcessEffectRenderer<FixingPixelArtGrille>
{
private Shader shader;
private Material material;
public override void Init() protected override void OnRenderer(Material renderMat, Texture src, RenderTexture result)
{ {
shader = Shader.Find("PostEffect/FixingPixcelArtGrille"); renderMat.SetVector("_iResolution", new Vector4(result.width, result.height, 0, 0));
material = new Material(shader); renderMat.SetVector("_res", new Vector4(DrawResolution.GetValue().x, DrawResolution.GetValue().y, 0, 0));
} renderMat.SetFloat("_hardScan", HardScan.GetValue());
renderMat.SetFloat("_hardPix", HardPix.GetValue());
renderMat.SetFloat("_hardBloomScan", HardBloomScan.GetValue());
renderMat.SetFloat("_hardBloomPix", HardBloomPix.GetValue());
renderMat.SetFloat("_bloomAmount", BloomAmount.GetValue());
renderMat.SetVector("_warp", Warp.GetValue());
renderMat.SetFloat("_maskDark", MaskDrak.GetValue());
renderMat.SetFloat("_maskLight", MaskLight.GetValue());
public override void Render(PostProcessRenderContext context) renderMat.DisableKeyword("_MASKSTYLE_VGASTYLE");
{ renderMat.DisableKeyword("_MASKSTYLE_TVSTYLE");
material.SetVector("_iResolution", new Vector4(Screen.width, Screen.height, 0, 0)); renderMat.DisableKeyword("_MASKSTYLE_APERTUREGRILLE");
var res = settings.DrawResolution; renderMat.DisableKeyword("_MASKSTYLE_STRETCHEDVGA");
material.SetVector("_res", new Vector4(res.value.x, res.value.y, 0, 0));
material.SetFloat("_hardScan", settings.HardScan.value);
material.SetFloat("_hardPix", settings.HardPix.value);
material.SetFloat("_hardBloomScan", settings.HardBloomScan.value);
material.SetFloat("_hardBloomPix", settings.HardBloomPix.value);
material.SetFloat("_bloomAmount", settings.BloomAmount.value);
material.SetVector("_warp", settings.Warp.value);
material.SetFloat("_maskDark", settings.MaskDrak.value);
material.SetFloat("_maskLight", settings.MaskLight.value);
material.DisableKeyword("_MASKSTYLE_VGASTYLE"); switch (MaskStyle.GetValue())
material.DisableKeyword("_MASKSTYLE_TVSTYLE");
material.DisableKeyword("_MASKSTYLE_APERTUREGRILLE");
material.DisableKeyword("_MASKSTYLE_STRETCHEDVGA");
switch (settings.MaskStyle.value)
{ {
case FixingPixelArtGrille.EnumMaskStyle.VGAStyle: case EnumMaskStyle.VGAStyle:
material.EnableKeyword("_MASKSTYLE_VGASTYLE"); renderMat.EnableKeyword("_MASKSTYLE_VGASTYLE");
break; break;
case FixingPixelArtGrille.EnumMaskStyle.TVStyle: case EnumMaskStyle.TVStyle:
material.EnableKeyword("_MASKSTYLE_TVSTYLE"); renderMat.EnableKeyword("_MASKSTYLE_TVSTYLE");
break; break;
case FixingPixelArtGrille.EnumMaskStyle.ApertureGrille: case EnumMaskStyle.ApertureGrille:
material.EnableKeyword("_MASKSTYLE_APERTUREGRILLE"); renderMat.EnableKeyword("_MASKSTYLE_APERTUREGRILLE");
break; break;
case FixingPixelArtGrille.EnumMaskStyle.StretchedVGA: case EnumMaskStyle.StretchedVGA:
material.EnableKeyword("_MASKSTYLE_STRETCHEDVGA"); renderMat.EnableKeyword("_MASKSTYLE_STRETCHEDVGA");
break; break;
} }
Graphics.Blit(src, result, renderMat);
context.command.Blit(context.source, context.destination, material);
} }
} }

View File

@ -1,96 +0,0 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &-2985742813244632235
MonoBehaviour:
m_ObjectHideFlags: 3
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 98a055cea8a1355429d1cbb752c4e60e, type: 3}
m_Name: MattiasCRT
m_EditorClassIdentifier:
active: 1
enabled:
overrideState: 1
value: 1
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8e6292b2c06870d4495f009f912b9600, type: 3}
m_Name: GameCamera Profile
m_EditorClassIdentifier:
settings:
- {fileID: 117625959343581733}
- {fileID: -2985742813244632235}
- {fileID: 2118329037781486242}
--- !u!114 &117625959343581733
MonoBehaviour:
m_ObjectHideFlags: 3
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: e88ab71ab1a47d048ba0e45b742f6140, type: 3}
m_Name: FixingPixelArtGrille
m_EditorClassIdentifier:
active: 1
enabled:
overrideState: 1
value: 1
MaskStyle:
overrideState: 0
value: 1
DrawResolution:
overrideState: 0
value: {x: 272, y: 240}
HardScan:
overrideState: 0
value: -10
HardPix:
overrideState: 0
value: -2
HardBloomScan:
overrideState: 0
value: -4
HardBloomPix:
overrideState: 0
value: -1.5
BloomAmount:
overrideState: 0
value: 0.0625
Warp:
overrideState: 0
value: {x: 0.015625, y: 0.041666668}
MaskLight:
overrideState: 0
value: 1.5
MaskDrak:
overrideState: 0
value: 0.5
--- !u!114 &2118329037781486242
MonoBehaviour:
m_ObjectHideFlags: 3
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 2a0a5286ac74b734ba8d1e0cfdfb9c8d, type: 3}
m_Name: LCDPostEffect
m_EditorClassIdentifier:
active: 1
enabled:
overrideState: 1
value: 1

View File

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

View File

@ -1,28 +1,15 @@
using AxibugEmuOnline.Client; using AxibugEmuOnline.Client;
using UnityEngine; using UnityEngine;
using UnityEngine.Rendering.PostProcessing;
[System.Serializable]
[PostProcess(typeof(LCDPostEffectRenderer), PostProcessEvent.BeforeStack, "Filter/LCDPostEffect")]
public sealed class LCDPostEffect : FilterEffect public sealed class LCDPostEffect : FilterEffect
{ {
public override string Name => nameof(LCDPostEffect); public override string Name => nameof(LCDPostEffect);
}
public sealed class LCDPostEffectRenderer : PostProcessEffectRenderer<LCDPostEffect> protected override string ShaderName => "Filter/LCDPostEffect";
{
private Shader shader;
private Material material;
public override void Init() protected override void OnRenderer(Material renderMat, Texture src, RenderTexture result)
{ {
shader = Shader.Find("Filter/LCDPostEffect"); renderMat.SetVector("_iResolution", new Vector4(Screen.width, Screen.height, 0, 0));
material = new Material(shader); Graphics.Blit(src, result, renderMat);
}
public override void Render(PostProcessRenderContext context)
{
material.SetVector("_iResolution", new Vector4(Screen.width, Screen.height, 0, 0));
context.command.Blit(context.source, context.destination, material);
} }
} }

View File

@ -1,28 +1,15 @@
using AxibugEmuOnline.Client; using AxibugEmuOnline.Client;
using UnityEngine; using UnityEngine;
using UnityEngine.Rendering.PostProcessing;
[System.Serializable]
[PostProcess(typeof(MattiasCRTRenderer), PostProcessEvent.BeforeStack, "Filter/MattiasCRT")]
public sealed class MattiasCRT : FilterEffect public sealed class MattiasCRT : FilterEffect
{ {
public override string Name => nameof(MattiasCRT); public override string Name => nameof(MattiasCRT);
}
public sealed class MattiasCRTRenderer : PostProcessEffectRenderer<MattiasCRT> protected override string ShaderName => "Filter/MattiasCRT";
{
private Shader shader;
private Material material;
public override void Init() protected override void OnRenderer(Material renderMat, Texture src, RenderTexture result)
{ {
shader = Shader.Find("Filter/MattiasCRT"); renderMat.SetVector("_iResolution", new Vector4(result.width, result.height, 0, 0));
material = new Material(shader); Graphics.Blit(src, result, renderMat);
}
public override void Render(PostProcessRenderContext context)
{
material.SetVector("_iResolution", new Vector4(Screen.width, Screen.height, 0, 0));
context.command.Blit(context.source, context.destination, material);
} }
} }

View File

@ -0,0 +1,21 @@
using AxibugEmuOnline.Client.ClientCore;
using UnityEngine;
using UnityEngine.UI;
[RequireComponent(typeof(RawImage))]
public class UIFilterPreviewer : MonoBehaviour
{
private RawImage m_rawImg;
private Texture m_src;
private void Awake()
{
m_rawImg = GetComponent<RawImage>();
m_src = m_rawImg.texture;
}
private void Update()
{
m_rawImg.texture = App.filter.ExecuteFilterRender(m_src);
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: a0987fcca76655248ac8defaffd1cb45

View File

@ -1,12 +1,10 @@
using AxibugEmuOnline.Client.ClientCore; using AxibugEmuOnline.Client.ClientCore;
using UnityEngine; using UnityEngine;
using UnityEngine.Rendering.PostProcessing;
namespace AxibugEmuOnline.Client namespace AxibugEmuOnline.Client
{ {
public class Initer : MonoBehaviour public class Initer : MonoBehaviour
{ {
public PostProcessVolume m_filterVolume;
public CanvasGroup m_filterPreview; public CanvasGroup m_filterPreview;
public CanvasGroup m_xmbBg; public CanvasGroup m_xmbBg;
public static string dev_UUID; public static string dev_UUID;

View File

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

View File

@ -173,7 +173,7 @@ namespace AxibugEmuOnline.Client
{ {
switch (controllerIndex) switch (controllerIndex)
{ {
case 1: case 0:
switch (nesConBtnType) switch (nesConBtnType)
{ {
case EnumButtonType.LEFT: case EnumButtonType.LEFT:
@ -197,7 +197,7 @@ namespace AxibugEmuOnline.Client
} }
break; break;
case 2: case 1:
switch (nesConBtnType) switch (nesConBtnType)
{ {
case EnumButtonType.LEFT: case EnumButtonType.LEFT:

View File

@ -38,9 +38,7 @@ namespace AxibugEmuOnline.Client
/// </summary> /// </summary>
private unsafe void Update() private unsafe void Update()
{ {
if (IsPause) return; if (NesCore != null && !IsPause)
if (NesCore != null)
{ {
PushEmulatorFrame(); PushEmulatorFrame();
if (InGameUI.Instance.IsNetPlay) if (InGameUI.Instance.IsNetPlay)
@ -49,6 +47,9 @@ namespace AxibugEmuOnline.Client
var screenBuffer = NesCore.ppu.GetScreenPtr(); var screenBuffer = NesCore.ppu.GetScreenPtr();
VideoProvider.SetDrawData(screenBuffer); VideoProvider.SetDrawData(screenBuffer);
} }
VideoProvider.ApplyFilterEffect();
} }
public EnumPlatform Platform => EnumPlatform.NES; public EnumPlatform Platform => EnumPlatform.NES;

View File

@ -2,19 +2,24 @@
%TAG !u! tag:unity3d.com,2011: %TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000 --- !u!21 &2100000
Material: Material:
serializedVersion: 6 serializedVersion: 8
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInternal: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: NesEmulator_Screen m_Name: NesEmulator_Screen
m_Shader: {fileID: 4800000, guid: b351396ff606116478d7f4412abe4e2e, type: 3} m_Shader: {fileID: 4800000, guid: b351396ff606116478d7f4412abe4e2e, type: 3}
m_ShaderKeywords: m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords: []
m_InvalidKeywords: []
m_LightmapFlags: 4 m_LightmapFlags: 4
m_EnableInstancingVariants: 0 m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0 m_DoubleSidedGI: 0
m_CustomRenderQueue: -1 m_CustomRenderQueue: -1
stringTagMap: {} stringTagMap: {}
disabledShaderPasses: [] disabledShaderPasses: []
m_LockedProperties:
m_SavedProperties: m_SavedProperties:
serializedVersion: 3 serializedVersion: 3
m_TexEnvs: m_TexEnvs:
@ -58,6 +63,7 @@ Material:
m_Texture: {fileID: 0} m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1} m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0} m_Offset: {x: 0, y: 0}
m_Ints: []
m_Floats: m_Floats:
- _BumpScale: 1 - _BumpScale: 1
- _ColorMask: 15 - _ColorMask: 15
@ -85,3 +91,5 @@ Material:
m_Colors: m_Colors:
- _Color: {r: 1, g: 1, b: 1, a: 1} - _Color: {r: 1, g: 1, b: 1, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
m_BuildTextureStacks: []
m_AllowLocking: 1

View File

@ -102,10 +102,10 @@
{ {
float2 mapUV = IN.texcoord; float2 mapUV = IN.texcoord;
float start= 8.0/272.0; float start= 0.02941535;
float end = (272.0-8.0)/272.0; float end = 0.970582;
mapUV.x = lerp(start,end, mapUV.x); mapUV.x = lerp(start,end, mapUV.x);
//uv映射改为ugui BaseMeshEffect 机制实现uv映射,比shader代码更为平滑
half4 color = tex2D(_MainTex,mapUV); half4 color = tex2D(_MainTex,mapUV);

View File

@ -1,3 +1,4 @@
using AxibugEmuOnline.Client.ClientCore;
using System; using System;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using UnityEngine; using UnityEngine;
@ -14,26 +15,27 @@ namespace AxibugEmuOnline.Client
public RawImage Image; public RawImage Image;
#endregion #endregion
#region GPU_TURBO #region GPU_TURBO
//图像数据字节数 //图像数据字节数
private int TexBufferSize_gpu; private int TexBufferSize_gpu;
//图像数据指针 //图像数据指针
private IntPtr wrapTexBufferPointer_gpu; private IntPtr wrapTexBufferPointer_gpu;
//Unity 2D纹理对象,用于UI上绘制最终输出画面 //Unity 2D纹理对象,用于UI上绘制最终输出画面
private Texture2D wrapTex_gpu; private Texture2D wrapTex_gpu;
//nes调色板数据,已转换为unity纹理对象 //nes调色板数据,已转换为unity纹理对象
private Texture2D pPal_gpu; private Texture2D pPal_gpu;
[SerializeField]
private Material GPUTurboMat_gpu; private Material GPUTurboMat_gpu;
private RenderTexture rt_gpu;
#endregion #endregion
#region CPU #region CPU
//图像数据字节数 //图像数据字节数
private int TexBufferSize_cpu; private int TexBufferSize_cpu;
//图像数据指针 //图像数据指针
private GCHandle wrapTexBufferGH; private GCHandle wrapTexBufferGH;
private IntPtr wrapTexBufferPointer_cpu; private IntPtr wrapTexBufferPointer_cpu;
//Unity 2D纹理对象,用于UI上绘制最终输出画面 //Unity 2D纹理对象,用于UI上绘制最终输出画面
private Texture2D wrapTex_cpu; private Texture2D wrapTex_cpu;
#endregion #endregion
@ -42,25 +44,31 @@ namespace AxibugEmuOnline.Client
private void Awake() private void Awake()
{ {
DrawCanvas.worldCamera = Camera.main; DrawCanvas.worldCamera = Camera.main;
GPUTurboMat_gpu = Image.material;
} }
private void OnDestroy() private void OnDestroy()
{ {
if (wrapTexBufferGH.IsAllocated) if (wrapTexBufferGH.IsAllocated)
wrapTexBufferGH.Free(); wrapTexBufferGH.Free();
if (rt_gpu != null)
{
RenderTexture.ReleaseTemporary(rt_gpu);
rt_gpu = null;
}
} }
public unsafe void SetDrawData(uint* screenData) public unsafe void SetDrawData(uint* screenData)
{ {
PrepareUI(screenData); PrepareUI(screenData);
if (GPUTurbo) PrepareForGPU(screenData);//判断使用GPU还是CPU if (GPUTurbo) PrepareForGPU(screenData);//判断使用GPU还是CPU
else PrepareForCPU(screenData);//使用CPU else PrepareForCPU(screenData);//使用CPU
if (GPUTurbo) if (GPUTurbo)
{ {
wrapTex_gpu.LoadRawTextureData(wrapTexBufferPointer_gpu, TexBufferSize_gpu); wrapTex_gpu.LoadRawTextureData(wrapTexBufferPointer_gpu, TexBufferSize_gpu);
wrapTex_gpu.Apply(); wrapTex_gpu.Apply();
Graphics.Blit(wrapTex_gpu, rt_gpu, GPUTurboMat_gpu);
} }
else else
{ {
@ -69,27 +77,32 @@ namespace AxibugEmuOnline.Client
} }
} }
public void ApplyFilterEffect()
{
Image.texture = App.filter.ExecuteFilterRender(rt_gpu);
}
private unsafe void PrepareUI(uint* screenData) private unsafe void PrepareUI(uint* screenData)
{ {
if (GPUTurbo) if (GPUTurbo)
{ {
if (Image.material != GPUTurboMat_gpu) Image.material = GPUTurboMat_gpu;
if (wrapTex_gpu == null) if (wrapTex_gpu == null)
{ {
wrapTex_gpu = new Texture2D(PPU.SCREEN_WIDTH, PPU.SCREEN_HEIGHT, TextureFormat.RGBA32, false); wrapTex_gpu = new Texture2D(PPU.SCREEN_WIDTH, PPU.SCREEN_HEIGHT, TextureFormat.RGBA32, false);
wrapTex_gpu.filterMode = FilterMode.Point; wrapTex_gpu.filterMode = FilterMode.Point;
wrapTexBufferPointer_gpu = (IntPtr)screenData; wrapTexBufferPointer_gpu = (IntPtr)screenData;
rt_gpu = RenderTexture.GetTemporary(256, wrapTex_gpu.height, 0);
rt_gpu.filterMode = FilterMode.Point;
rt_gpu.anisoLevel = 0;
rt_gpu.antiAliasing = 1;
TexBufferSize_gpu = wrapTex_gpu.width * wrapTex_gpu.height * 4; TexBufferSize_gpu = wrapTex_gpu.width * wrapTex_gpu.height * 4;
} }
if (Image.texture != wrapTex_gpu) Image.texture = wrapTex_gpu; if (Image.texture != rt_gpu) Image.texture = rt_gpu;
} }
else else
{ {
if (Image.material == GPUTurboMat_gpu) Image.material = null;
if (wrapTex_cpu == null) if (wrapTex_cpu == null)
{ {
wrapTex_cpu = new Texture2D(PPU.SCREEN_WIDTH - 16, PPU.SCREEN_HEIGHT, TextureFormat.RGBA32, false); wrapTex_cpu = new Texture2D(PPU.SCREEN_WIDTH - 16, PPU.SCREEN_HEIGHT, TextureFormat.RGBA32, false);
@ -103,6 +116,7 @@ namespace AxibugEmuOnline.Client
} }
if (Image.texture != wrapTex_cpu) Image.texture = wrapTex_cpu; if (Image.texture != wrapTex_cpu) Image.texture = wrapTex_cpu;
} }
} }
private unsafe void PrepareForGPU(uint* screenData) private unsafe void PrepareForGPU(uint* screenData)
@ -141,7 +155,7 @@ namespace AxibugEmuOnline.Client
for (int line = 0; line < PPU.SCREEN_HEIGHT; line++) for (int line = 0; line < PPU.SCREEN_HEIGHT; line++)
{ {
//PS如果是CPU计算宽度减少16的不必要部分才能对齐 //PS如果是CPU计算宽度减少16的不必要部分才能对齐
width = PPU.SCREEN_WIDTH - 16; width = PPU.SCREEN_WIDTH - 16;
while (width > 0) while (width > 0)
@ -149,17 +163,17 @@ namespace AxibugEmuOnline.Client
var edx = screenData[pScn + 8]; var edx = screenData[pScn + 8];
uint index = edx & 0xFF; uint index = edx & 0xFF;
//按下标颜色查找表中真实颜色 //按下标颜色查找表中真实颜色
var colorData = palRaw[index]; var colorData = palRaw[index];
//dst中颜色排列为abgr,而colorData排列为argb //dst中颜色排列为abgr,而colorData排列为argb
uint r = (colorData & 0x00FF0000) >> 16; // 提取Red通道 uint r = (colorData & 0x00FF0000) >> 16; // 提取Red通道
uint g = (colorData & 0x0000FF00) >> 8; // 提取Green通道 uint g = (colorData & 0x0000FF00) >> 8; // 提取Green通道
uint b = (colorData & 0x000000FF); // 提取Blue通道 uint b = (colorData & 0x000000FF); // 提取Blue通道
//用rgb构建颜色对象如果非unity 可以用这个rgb 构建System.Drawing.Color 单个颜色对象) //用rgb构建颜色对象如果非unity 可以用这个rgb 构建System.Drawing.Color 单个颜色对象)
uint abgr = 0xFF000000 | (b << 16) | (g << 8) | (r << 0); uint abgr = 0xFF000000 | (b << 16) | (g << 8) | (r << 0);
//放进颜色矩阵 //放进颜色矩阵
Dst[pDst] = abgr; Dst[pDst] = abgr;
pScn += 1; pScn += 1;

View File

@ -66,7 +66,7 @@ namespace AxibugEmuOnline.Client
SetBaseInfo(m_romfile.Alias, m_romfile.Descript, m_romfile.GameTypeDes); SetBaseInfo(m_romfile.Alias, m_romfile.Descript, m_romfile.GameTypeDes);
App.CacheMgr.GetSpriteCache(m_romfile.ImageURL, (img, url) => App.CacheMgr.GetSpriteCache(m_romfile.ImageURL, (img, url) =>
{ {
if (url != m_romfile.ImageURL) return; if (!m_romfile.InfoReady || url != m_romfile.ImageURL) return;
m_romImage.sprite = img; m_romImage.sprite = img;
}); });

View File

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

View File

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

View File

@ -2,7 +2,6 @@
"dependencies": { "dependencies": {
"com.unity.2d.sprite": "1.0.0", "com.unity.2d.sprite": "1.0.0",
"com.unity.ide.visualstudio": "2.0.22", "com.unity.ide.visualstudio": "2.0.22",
"com.unity.postprocessing": "3.4.0",
"com.unity.ugui": "2.0.0", "com.unity.ugui": "2.0.0",
"com.unity.modules.accessibility": "1.0.0", "com.unity.modules.accessibility": "1.0.0",
"com.unity.modules.ai": "1.0.0", "com.unity.modules.ai": "1.0.0",

View File

@ -22,15 +22,6 @@
}, },
"url": "https://packages.unity.cn" "url": "https://packages.unity.cn"
}, },
"com.unity.postprocessing": {
"version": "3.4.0",
"depth": 0,
"source": "registry",
"dependencies": {
"com.unity.modules.physics": "1.0.0"
},
"url": "https://packages.unity.cn"
},
"com.unity.test-framework": { "com.unity.test-framework": {
"version": "1.4.5", "version": "1.4.5",
"depth": 1, "depth": 1,