diff --git a/AxibugEmuOnline.Client/Assets/Resources/NES/NesEmulator.prefab b/AxibugEmuOnline.Client/Assets/Resources/NES/NesEmulator.prefab index 81baa9f..53110e4 100644 --- a/AxibugEmuOnline.Client/Assets/Resources/NES/NesEmulator.prefab +++ b/AxibugEmuOnline.Client/Assets/Resources/NES/NesEmulator.prefab @@ -25,12 +25,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 9760340517325694} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 4232056521131536011} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &9003897287163669553 MonoBehaviour: @@ -56,6 +57,7 @@ AudioSource: serializedVersion: 4 OutputAudioMixerGroup: {fileID: 0} m_audioClip: {fileID: 0} + m_Resource: {fileID: 0} m_PlayOnAwake: 1 m_Volume: 1 m_Pitch: 1 @@ -169,9 +171,9 @@ RectTransform: m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: -1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1038087993597378172} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -240,11 +242,11 @@ RectTransform: m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: - {fileID: 3430872171738201552} - {fileID: 5684774662137182450} m_Father: {fileID: 4232056520494431727} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -289,12 +291,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 4232056520112715746} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 4232056521131536011} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &4232056520112715744 MonoBehaviour: @@ -311,6 +314,8 @@ MonoBehaviour: NesEmu: {fileID: 4232056521131536012} DrawCanvas: {fileID: 4232056520494431724} Image: {fileID: 4232056521759880274} + GPUTurboMat_gpu: {fileID: 2100000, guid: 07e28fcb992bc124e986f9d8ff3beb97, type: 2} + GPUTurbo: 1 --- !u!1 &4232056520494431712 GameObject: m_ObjectHideFlags: 0 @@ -322,7 +327,6 @@ GameObject: - component: {fileID: 4232056520494431727} - component: {fileID: 4232056520494431724} - component: {fileID: 4232056520494431725} - - component: {fileID: 4232056520494431726} m_Layer: 5 m_Name: Canvas m_TagString: Untagged @@ -340,11 +344,11 @@ RectTransform: m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 0, y: 0, z: 0} + m_ConstrainProportionsScale: 0 m_Children: - {fileID: 4232056521759880275} - {fileID: 1038087993597378172} m_Father: {fileID: 4232056521131536011} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -368,7 +372,9 @@ Canvas: m_OverrideSorting: 0 m_OverridePixelPerfect: 0 m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 m_AdditionalShaderChannelsFlag: 0 + m_UpdateRectTransformForStandalone: 0 m_SortingLayerID: 0 m_SortingOrder: 0 m_TargetDisplay: 0 @@ -395,23 +401,6 @@ MonoBehaviour: m_DefaultSpriteDPI: 96 m_DynamicPixelsPerUnit: 1 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 GameObject: m_ObjectHideFlags: 0 @@ -436,15 +425,16 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 4232056521131536013} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: - {fileID: 4232056520112715745} - {fileID: 4785916497946256520} - {fileID: 4232056520494431727} m_Father: {fileID: 0} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &4232056521131536012 MonoBehaviour: @@ -458,10 +448,8 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 39557e19783acee499ace6c68549e8f8, type: 3} m_Name: m_EditorClassIdentifier: - InputTemplate: {fileID: 0} VideoProvider: {fileID: 4232056520112715744} AudioProvider: {fileID: 9003897287163669553} - m_bPause: 0 --- !u!1 &4232056521759880276 GameObject: m_ObjectHideFlags: 0 @@ -490,9 +478,9 @@ RectTransform: m_LocalRotation: {x: 1, y: 0, z: 0, w: 0} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 4232056520494431727} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 180, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -519,7 +507,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 1344c3c82d62a2a41a3576d8abb8e3ea, type: 3} m_Name: 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_RaycastTarget: 1 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_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1038087993597378172} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 0} diff --git a/AxibugEmuOnline.Client/Assets/Scene/AxibugEmuOnline.Client.unity b/AxibugEmuOnline.Client/Assets/Scene/AxibugEmuOnline.Client.unity index 4a40cf8..ae4dfb2 100644 --- a/AxibugEmuOnline.Client/Assets/Scene/AxibugEmuOnline.Client.unity +++ b/AxibugEmuOnline.Client/Assets/Scene/AxibugEmuOnline.Client.unity @@ -931,7 +931,8 @@ GameObject: m_Component: - component: {fileID: 802786939} - component: {fileID: 802786941} - - component: {fileID: 802786940} + - component: {fileID: 802786942} + - component: {fileID: 802786943} m_Layer: 5 m_Name: Image2 m_TagString: Untagged @@ -958,7 +959,15 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} 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: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -967,7 +976,7 @@ MonoBehaviour: m_GameObject: {fileID: 802786938} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Script: {fileID: 11500000, guid: 1344c3c82d62a2a41a3576d8abb8e3ea, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} @@ -978,24 +987,25 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 21300000, guid: e043954733c440645ba43b09301ee4a6, 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!222 &802786941 -CanvasRenderer: + m_Texture: {fileID: 2800000, guid: e043954733c440645ba43b09301ee4a6, type: 3} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!114 &802786943 +MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} 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 RectTransform: m_CorrespondingSourceObject: {fileID: 3531919739338806919, guid: 1de15a80c8c1aa94486563740a15d91c, type: 3} @@ -1010,9 +1020,6 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 1124446957} - - component: {fileID: 1124446960} - - component: {fileID: 1124446959} - - component: {fileID: 1124446958} - component: {fileID: 1124446961} m_Layer: 5 m_Name: FilterPreview @@ -1028,83 +1035,20 @@ RectTransform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} 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_LocalScale: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - {fileID: 1471857115} - {fileID: 802786939} - m_Father: {fileID: 1335662459} + m_Father: {fileID: 1599240741} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 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_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0, y: 0} ---- !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 + m_Pivot: {x: 0.5, y: 0.5} --- !u!225 &1124446961 CanvasGroup: m_ObjectHideFlags: 0 @@ -1153,11 +1097,9 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: - {fileID: 1639312037} - - {fileID: 1475480929} - {fileID: 74796459} - {fileID: 1427887270} - {fileID: 1599240741} - - {fileID: 1124446957} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1335662460 @@ -1172,7 +1114,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 980f937ad27ad8540afeb8b7f100997e, type: 3} m_Name: m_EditorClassIdentifier: - m_filterVolume: {fileID: 1475480930} m_filterPreview: {fileID: 1124446961} m_xmbBg: {fileID: 730698712} bTest: 0 @@ -1884,174 +1825,6 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: 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 GameObject: m_ObjectHideFlags: 3 @@ -2190,6 +1963,7 @@ RectTransform: m_LocalScale: {x: 0, y: 0, z: 0} m_ConstrainProportionsScale: 0 m_Children: + - {fileID: 1124446957} - {fileID: 1983793178} - {fileID: 939125854} - {fileID: 1318590597} @@ -2214,7 +1988,7 @@ GameObject: - component: {fileID: 1639312035} m_Layer: 0 m_Name: UICamera - m_TagString: Untagged + m_TagString: MainCamera m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 @@ -2263,7 +2037,7 @@ Camera: field of view: 60 orthographic: 1 orthographic size: 5 - m_Depth: -1 + m_Depth: 0 m_CullingMask: serializedVersion: 2 m_Bits: 32 @@ -2471,6 +2245,10 @@ PrefabInstance: propertyPath: m_AnchorMax.y value: 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} propertyPath: m_AnchorMax.y value: 0 @@ -2963,6 +2741,10 @@ PrefabInstance: propertyPath: m_AnchorMax.y value: 0 objectReference: {fileID: 0} + - target: {fileID: 8801936766261209235, guid: 1de15a80c8c1aa94486563740a15d91c, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} m_RemovedComponents: [] m_RemovedGameObjects: [] m_AddedGameObjects: [] diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/App.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/App.cs index f7abd1f..2d308de 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/App.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/App.cs @@ -43,15 +43,13 @@ namespace AxibugEmuOnline.Client.ClientCore #endif 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) - { - //PSV 等平台需要手动创建目录 - PSP2Init(); - } - - settings = new AppSettings(); + settings = new AppSettings(); log = new LogManager(); LogManager.OnLog += OnNoSugarNetLog; @@ -66,7 +64,7 @@ namespace AxibugEmuOnline.Client.ClientCore CacheMgr = new CacheManager(); roomMgr = new AppRoom(); 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; mTestSrvIP = testSrvIP; var go = new GameObject("[AppAxibugEmuOnline]"); @@ -122,7 +120,7 @@ namespace AxibugEmuOnline.Client.ClientCore 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; if (!request.downloadHandler.isDone) yield break; diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Filter/FilterEffect.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Filter/FilterEffect.cs index 5d97e11..9ec1ef0 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Filter/FilterEffect.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Filter/FilterEffect.cs @@ -1,28 +1,32 @@ -using System; +using Assets.Script.AppMain.Filter; +using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using UnityEngine; -using UnityEngine.Rendering.PostProcessing; namespace AxibugEmuOnline.Client { - public abstract class FilterEffect : PostProcessEffectSettings + public abstract class FilterEffect { - private List m_editableParamList; - + public BoolParameter Enable = new BoolParameter(false); + public abstract string Name { get; } public IReadOnlyCollection EditableParam => m_editableParamList.AsReadOnly(); - public abstract string Name { get; } + List m_editableParamList; + Material m_material; + + protected abstract string ShaderName { get; } public FilterEffect() { GetEditableFilterParamters(); + m_material = new Material(Shader.Find(ShaderName)); } - protected void GetEditableFilterParamters() + void GetEditableFilterParamters() { 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)) orderby t.MetadataToken select t); @@ -30,7 +34,7 @@ namespace AxibugEmuOnline.Client m_editableParamList = new List(); foreach (var param in parameters) { - var paramObj = (ParameterOverride)param.GetValue(this); + var paramObj = (FilterParameter)param.GetValue(this); var rangeAtt = param.GetCustomAttribute(); float min = 0; 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 { - private ParameterOverride m_paramObject; - private FieldInfo valueFieldInfo; + private FilterParameter m_paramObject; - public Type ValueType { get; private set; } + public Type ValueType => m_paramObject.ValueType; public string Name { get; private set; } public object Value { - get => valueFieldInfo.GetValue(m_paramObject); - set - { - valueFieldInfo.SetValue(m_paramObject, value); - m_paramObject.overrideState = true; - } + get => m_paramObject.Value; + set => m_paramObject.Value = value; } + public object MinValue { 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; Name = name; var paramType = paramObject.GetType(); - valueFieldInfo = paramType.GetField("value", BindingFlags.Public | BindingFlags.Instance); - if (valueFieldInfo != null) - { - ValueType = valueFieldInfo.FieldType; - } - else - { - ValueType = typeof(object); - } - MinValue = minValue; MaxValue = maxValue; } - public void ResetToDefault() => m_paramObject.overrideState = false; + public void ResetToDefault() => m_paramObject.Value = null; public void Apply(object overrideValue) diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/FilterManager.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Filter/FilterManager.cs similarity index 82% rename from AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/FilterManager.cs rename to AxibugEmuOnline.Client/Assets/Script/AppMain/Filter/FilterManager.cs index d38e10b..03a6b8a 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/FilterManager.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Filter/FilterManager.cs @@ -3,14 +3,13 @@ using System; using System.Collections.Generic; using System.Linq; using UnityEngine; -using UnityEngine.Rendering.PostProcessing; using static AxibugEmuOnline.Client.FilterEffect; +using static AxibugEmuOnline.Client.FilterManager; namespace AxibugEmuOnline.Client { public class FilterManager { - private PostProcessProfile m_filterPorfile; private List m_filters; private Dictionary m_filterPlatforms = new Dictionary(); private AlphaWraper m_previewFilterWraper; @@ -20,18 +19,42 @@ namespace AxibugEmuOnline.Client /// public IReadOnlyList Filters => m_filters; - public FilterManager(PostProcessVolume filterVolume, CanvasGroup filterPreview, CanvasGroup mainBg) + public FilterManager(CanvasGroup filterPreview, CanvasGroup mainBg) { - if (filterVolume == null) - return; - m_filterPorfile = filterVolume.profile; - m_filters = m_filterPorfile.settings.Where(setting => setting is FilterEffect).Select(setting => new Filter(setting as FilterEffect)).ToList(); + m_filters = new List + { + new Filter(new FixingPixelArtGrille()), + new Filter(new LCDPostEffect()), + new Filter(new MattiasCRT()), + }; var json = PlayerPrefs.GetString(nameof(FilterRomSetting)); m_filterRomSetting = JsonUtility.FromJson(json) ?? new FilterRomSetting(); m_previewFilterWraper = new AlphaWraper(mainBg, filterPreview, false); ShutDownFilterPreview(); 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; } /// 关闭滤镜预览 @@ -54,8 +77,8 @@ namespace AxibugEmuOnline.Client { foreach (var selfFiler in Filters) { - if (selfFiler != filter) selfFiler.m_setting.enabled.Override(false); - else selfFiler.m_setting.enabled.Override(true); + if (selfFiler != filter) selfFiler.m_setting.Enable.Override(false); + else selfFiler.m_setting.Enable.Override(true); } } @@ -65,8 +88,8 @@ namespace AxibugEmuOnline.Client public void ShutDownFilter() { //关闭所有后处理效果 - foreach (var setting in m_filterPorfile.settings) - setting.enabled.Override(false); + foreach (var filter in Filters) + filter.m_setting.Enable.Override(false); } /// @@ -94,21 +117,21 @@ namespace AxibugEmuOnline.Client Filter filter = null; FilterPreset preset = null; - //filter = Filters.FirstOrDefault(f => f.Name == value.filterName); - //if (filter != null) - //{ - // string presetName = value.presetName; - // preset = filter.Presets.FirstOrDefault(p => p.Name == presetName); - //} + //filter = Filters.FirstOrDefault(f => f.Name == value.filterName); + //if (filter != null) + //{ + // string presetName = value.presetName; + // preset = filter.Presets.FirstOrDefault(p => p.Name == presetName); + //} - filter = Filters.FirstOrDefault(f => f.Name == value.Item1); - if (filter != null) - { - string presetName = value.Item2; - preset = filter.Presets.FirstOrDefault(p => p.Name == presetName); - } + filter = Filters.FirstOrDefault(f => f.Name == value.Item1); + if (filter != null) + { + string presetName = value.Item2; + preset = filter.Presets.FirstOrDefault(p => p.Name == presetName); + } - return new GetFilterSetting_result() + return new GetFilterSetting_result() { filter = filter, preset = preset @@ -118,10 +141,10 @@ namespace AxibugEmuOnline.Client public struct GetFilterSetting_result { public Filter filter; - public FilterPreset preset; - } + public FilterPreset preset; + } - public class Filter + public class Filter { public string Name => m_setting.Name; public IReadOnlyCollection Paramerters => m_setting.EditableParam; @@ -243,7 +266,7 @@ namespace AxibugEmuOnline.Client { prepareCache(); string value; - m_paramName2ValueJson.TryGetValue(paramName, out value); + m_paramName2ValueJson.TryGetValue(paramName, out value); return value; } @@ -253,9 +276,9 @@ namespace AxibugEmuOnline.Client if (rawStr == null) return null; if (valueType == typeof(float)) - { + { float floatVal; - float.TryParse(rawStr, out floatVal); + float.TryParse(rawStr, out floatVal); return floatVal; } else if (valueType.IsEnum) @@ -329,12 +352,12 @@ namespace AxibugEmuOnline.Client return JsonUtility.ToJson(this); } - public ValueTuple Get(RomFile rom) + public ValueTuple Get(RomFile rom) { prepareCache(); Item item; - m_cache.TryGetValue(rom.ID, out item); + m_cache.TryGetValue(rom.ID, out item); return new ValueTuple(item.FilterName, item.PresetName); } diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Filter/FilterManager.cs.meta b/AxibugEmuOnline.Client/Assets/Script/AppMain/Filter/FilterManager.cs.meta new file mode 100644 index 0000000..dd404c5 --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Filter/FilterManager.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: f61dfd2411084ec469cdb3faacca298e \ No newline at end of file diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Filter/FilterParamerter.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Filter/FilterParamerter.cs new file mode 100644 index 0000000..bd0f51d --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Filter/FilterParamerter.cs @@ -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 : 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 + { + public BoolParameter(bool defaultValue) : base(defaultValue) { } + } + + public class Vector2Parameter : FilterParameter + { + public Vector2Parameter(Vector2 defaultValue) : base(defaultValue) { } + } + + public class FloatParameter : FilterParameter + { + public FloatParameter(float defaultValue) : base(defaultValue) { } + } +} \ No newline at end of file diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Filter/FilterParamerter.cs.meta b/AxibugEmuOnline.Client/Assets/Script/AppMain/Filter/FilterParamerter.cs.meta new file mode 100644 index 0000000..9d5761a --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Filter/FilterParamerter.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 53e95955f1beeb34a87d2046875fa16f \ No newline at end of file diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Filter/FixingPixelArtGrille/FixingPixelArtGrille.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Filter/FixingPixelArtGrille/FixingPixelArtGrille.cs index 5fb1d04..999267e 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Filter/FixingPixelArtGrille/FixingPixelArtGrille.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Filter/FixingPixelArtGrille/FixingPixelArtGrille.cs @@ -1,50 +1,29 @@ -using AxibugEmuOnline.Client; +using Assets.Script.AppMain.Filter; +using AxibugEmuOnline.Client; using UnityEngine; -using UnityEngine.Rendering.PostProcessing; -[System.Serializable] -[PostProcess(typeof(FixingPixelArtGrilleRenderer), PostProcessEvent.BeforeStack, "Filter/FixingPixelArtGrille")] public sealed class FixingPixelArtGrille : FilterEffect { public override string Name => nameof(FixingPixelArtGrille); - public ParameterOverride MaskStyle = new ParameterOverride { value = EnumMaskStyle.ApertureGrille }; - - [Tooltip("Emulated input resolution\nOptimize for resize")] - public Vector2Parameter DrawResolution = new Vector2Parameter - { - value = new Vector2(272, 240) - }; - - [Tooltip("Hardness of scanline")] + protected override string ShaderName => "PostEffect/FixingPixcelArtGrille"; + public FilterParameter MaskStyle = new FilterParameter(EnumMaskStyle.ApertureGrille); + public Vector2Parameter DrawResolution = new Vector2Parameter(new Vector2(272, 240)); [Range(-32, 0)] - public FloatParameter HardScan = new FloatParameter { value = -10 }; - - [Tooltip("Hardness of pixels in scanline")] + public FloatParameter HardScan = new FloatParameter(-10); [Range(-6, 0)] - public FloatParameter HardPix = new FloatParameter { value = -2 }; - - [Tooltip("Hardness of short vertical bloom")] + public FloatParameter HardPix = new FloatParameter(-2); [Range(-8, 0)] - public FloatParameter HardBloomScan = new FloatParameter { value = -4.0f }; - - [Tooltip("Hardness of short horizontal bloom")] + public FloatParameter HardBloomScan = new FloatParameter(-4.0f); [Range(-4, 0)] - public FloatParameter HardBloomPix = new FloatParameter { value = -1.5f }; - - [Tooltip("Amount of small bloom effect")] + public FloatParameter HardBloomPix = new FloatParameter(-1.5f); [Range(0, 1)] - public FloatParameter BloomAmount = new FloatParameter { value = 1 / 16f }; - - [Tooltip("Display warp")] - public Vector2Parameter Warp = new Vector2Parameter { value = new Vector2(1f / 64f, 1f / 24f) }; - - [Tooltip("Amount of shadow mask Light")] + public FloatParameter BloomAmount = new FloatParameter(1 / 16f); + public Vector2Parameter Warp = new Vector2Parameter(new Vector2(1f / 64f, 1f / 24f)); [Range(1, 3)] - public FloatParameter MaskLight = new FloatParameter { value = 1.5f }; + public FloatParameter MaskLight = new FloatParameter(1.5f); [Range(0.1f, 1)] - [Tooltip("Amount of shadow mask Dark")] - public FloatParameter MaskDrak = new FloatParameter { value = 0.5f }; + public FloatParameter MaskDrak = new FloatParameter(0.5f); public enum EnumMaskStyle { @@ -53,54 +32,41 @@ public sealed class FixingPixelArtGrille : FilterEffect StretchedVGA, VGAStyle } -} -public sealed class FixingPixelArtGrilleRenderer : PostProcessEffectRenderer -{ - 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"); - material = new Material(shader); - } + renderMat.SetVector("_iResolution", new Vector4(result.width, result.height, 0, 0)); + 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) - { - material.SetVector("_iResolution", new Vector4(Screen.width, Screen.height, 0, 0)); - var res = settings.DrawResolution; - 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); + renderMat.DisableKeyword("_MASKSTYLE_VGASTYLE"); + renderMat.DisableKeyword("_MASKSTYLE_TVSTYLE"); + renderMat.DisableKeyword("_MASKSTYLE_APERTUREGRILLE"); + renderMat.DisableKeyword("_MASKSTYLE_STRETCHEDVGA"); - material.DisableKeyword("_MASKSTYLE_VGASTYLE"); - material.DisableKeyword("_MASKSTYLE_TVSTYLE"); - material.DisableKeyword("_MASKSTYLE_APERTUREGRILLE"); - material.DisableKeyword("_MASKSTYLE_STRETCHEDVGA"); - - switch (settings.MaskStyle.value) + switch (MaskStyle.GetValue()) { - case FixingPixelArtGrille.EnumMaskStyle.VGAStyle: - material.EnableKeyword("_MASKSTYLE_VGASTYLE"); + case EnumMaskStyle.VGAStyle: + renderMat.EnableKeyword("_MASKSTYLE_VGASTYLE"); break; - case FixingPixelArtGrille.EnumMaskStyle.TVStyle: - material.EnableKeyword("_MASKSTYLE_TVSTYLE"); + case EnumMaskStyle.TVStyle: + renderMat.EnableKeyword("_MASKSTYLE_TVSTYLE"); break; - case FixingPixelArtGrille.EnumMaskStyle.ApertureGrille: - material.EnableKeyword("_MASKSTYLE_APERTUREGRILLE"); + case EnumMaskStyle.ApertureGrille: + renderMat.EnableKeyword("_MASKSTYLE_APERTUREGRILLE"); break; - case FixingPixelArtGrille.EnumMaskStyle.StretchedVGA: - material.EnableKeyword("_MASKSTYLE_STRETCHEDVGA"); + case EnumMaskStyle.StretchedVGA: + renderMat.EnableKeyword("_MASKSTYLE_STRETCHEDVGA"); break; } - - context.command.Blit(context.source, context.destination, material); + Graphics.Blit(src, result, renderMat); } } \ No newline at end of file diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Filter/GameCamera Profile.asset b/AxibugEmuOnline.Client/Assets/Script/AppMain/Filter/GameCamera Profile.asset deleted file mode 100644 index fb1eeac..0000000 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Filter/GameCamera Profile.asset +++ /dev/null @@ -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 diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Filter/GameCamera Profile.asset.meta b/AxibugEmuOnline.Client/Assets/Script/AppMain/Filter/GameCamera Profile.asset.meta deleted file mode 100644 index 5376e6d..0000000 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Filter/GameCamera Profile.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 17060e2d2f9e5c340a526f08317e5a98 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 11400000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Filter/LCDPostEffect/LCDPostEffect.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Filter/LCDPostEffect/LCDPostEffect.cs index db3d4f5..f8ccca3 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Filter/LCDPostEffect/LCDPostEffect.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Filter/LCDPostEffect/LCDPostEffect.cs @@ -1,28 +1,15 @@ using AxibugEmuOnline.Client; using UnityEngine; -using UnityEngine.Rendering.PostProcessing; -[System.Serializable] -[PostProcess(typeof(LCDPostEffectRenderer), PostProcessEvent.BeforeStack, "Filter/LCDPostEffect")] public sealed class LCDPostEffect : FilterEffect { public override string Name => nameof(LCDPostEffect); + + protected override string ShaderName => "Filter/LCDPostEffect"; + + protected override void OnRenderer(Material renderMat, Texture src, RenderTexture result) + { + renderMat.SetVector("_iResolution", new Vector4(Screen.width, Screen.height, 0, 0)); + Graphics.Blit(src, result, renderMat); + } } - -public sealed class LCDPostEffectRenderer : PostProcessEffectRenderer -{ - private Shader shader; - private Material material; - - public override void Init() - { - shader = Shader.Find("Filter/LCDPostEffect"); - material = new Material(shader); - } - - 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); - } -} \ No newline at end of file diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Filter/MattiasCRT/MattiasCRT.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Filter/MattiasCRT/MattiasCRT.cs index b398e58..6e6c79d 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Filter/MattiasCRT/MattiasCRT.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Filter/MattiasCRT/MattiasCRT.cs @@ -1,28 +1,15 @@ -using AxibugEmuOnline.Client; +using AxibugEmuOnline.Client; using UnityEngine; -using UnityEngine.Rendering.PostProcessing; -[System.Serializable] -[PostProcess(typeof(MattiasCRTRenderer), PostProcessEvent.BeforeStack, "Filter/MattiasCRT")] public sealed class MattiasCRT : FilterEffect { public override string Name => nameof(MattiasCRT); -} -public sealed class MattiasCRTRenderer : PostProcessEffectRenderer -{ - private Shader shader; - private Material material; + protected override string ShaderName => "Filter/MattiasCRT"; - public override void Init() + protected override void OnRenderer(Material renderMat, Texture src, RenderTexture result) { - shader = Shader.Find("Filter/MattiasCRT"); - material = new Material(shader); - } - - 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); + renderMat.SetVector("_iResolution", new Vector4(result.width, result.height, 0, 0)); + Graphics.Blit(src, result, renderMat); } } \ No newline at end of file diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Filter/UIFilterPreviewer.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Filter/UIFilterPreviewer.cs new file mode 100644 index 0000000..8ba8837 --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Filter/UIFilterPreviewer.cs @@ -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(); + m_src = m_rawImg.texture; + } + + private void Update() + { + m_rawImg.texture = App.filter.ExecuteFilterRender(m_src); + } +} diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Filter/UIFilterPreviewer.cs.meta b/AxibugEmuOnline.Client/Assets/Script/AppMain/Filter/UIFilterPreviewer.cs.meta new file mode 100644 index 0000000..8e6b7bd --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Filter/UIFilterPreviewer.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: a0987fcca76655248ac8defaffd1cb45 \ No newline at end of file diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Initer.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Initer.cs index 56c3eaa..0a1eafc 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Initer.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Initer.cs @@ -1,12 +1,10 @@ using AxibugEmuOnline.Client.ClientCore; using UnityEngine; -using UnityEngine.Rendering.PostProcessing; namespace AxibugEmuOnline.Client { public class Initer : MonoBehaviour { - public PostProcessVolume m_filterVolume; public CanvasGroup m_filterPreview; public CanvasGroup m_xmbBg; public static string dev_UUID; diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/FilterManager.cs.meta b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/FilterManager.cs.meta deleted file mode 100644 index d7ab243..0000000 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/FilterManager.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 5354e2e13dbff91438a04b9de2351645 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/NesEmulator/NesControllerMapper.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/NesEmulator/NesControllerMapper.cs index f60b903..3fb6985 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/NesEmulator/NesControllerMapper.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/NesEmulator/NesControllerMapper.cs @@ -173,7 +173,7 @@ namespace AxibugEmuOnline.Client { switch (controllerIndex) { - case 1: + case 0: switch (nesConBtnType) { case EnumButtonType.LEFT: @@ -197,7 +197,7 @@ namespace AxibugEmuOnline.Client } break; - case 2: + case 1: switch (nesConBtnType) { case EnumButtonType.LEFT: diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/NesEmulator/NesEmulator.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/NesEmulator/NesEmulator.cs index 085be65..402e380 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/NesEmulator/NesEmulator.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/NesEmulator/NesEmulator.cs @@ -16,7 +16,7 @@ namespace AxibugEmuOnline.Client { public VideoProvider VideoProvider; public AudioProvider AudioProvider; - + //模拟器核心实例化对象 public NES NesCore { get; private set; } @@ -38,9 +38,7 @@ namespace AxibugEmuOnline.Client /// private unsafe void Update() { - if (IsPause) return; - - if (NesCore != null) + if (NesCore != null && !IsPause) { PushEmulatorFrame(); if (InGameUI.Instance.IsNetPlay) @@ -49,6 +47,9 @@ namespace AxibugEmuOnline.Client var screenBuffer = NesCore.ppu.GetScreenPtr(); VideoProvider.SetDrawData(screenBuffer); } + + + VideoProvider.ApplyFilterEffect(); } public EnumPlatform Platform => EnumPlatform.NES; @@ -140,7 +141,7 @@ namespace AxibugEmuOnline.Client NesCore = null; } - + #if UNITY_EDITOR private ControllerState m_lastState; #endif diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/NesEmulator/NesEmulator_Screen.mat b/AxibugEmuOnline.Client/Assets/Script/AppMain/NesEmulator/NesEmulator_Screen.mat index 1eb2c7a..d581fae 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/NesEmulator/NesEmulator_Screen.mat +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/NesEmulator/NesEmulator_Screen.mat @@ -2,19 +2,24 @@ %TAG !u! tag:unity3d.com,2011: --- !u!21 &2100000 Material: - serializedVersion: 6 + serializedVersion: 8 m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_Name: NesEmulator_Screen 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_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 m_CustomRenderQueue: -1 stringTagMap: {} disabledShaderPasses: [] + m_LockedProperties: m_SavedProperties: serializedVersion: 3 m_TexEnvs: @@ -58,6 +63,7 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + m_Ints: [] m_Floats: - _BumpScale: 1 - _ColorMask: 15 @@ -85,3 +91,5 @@ Material: m_Colors: - _Color: {r: 1, g: 1, b: 1, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/NesEmulator/NesEmulator_Screen.shader b/AxibugEmuOnline.Client/Assets/Script/AppMain/NesEmulator/NesEmulator_Screen.shader index aa024f6..6fcb64d 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/NesEmulator/NesEmulator_Screen.shader +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/NesEmulator/NesEmulator_Screen.shader @@ -102,10 +102,10 @@ { float2 mapUV = IN.texcoord; - float start= 8.0/272.0; - float end = (272.0-8.0)/272.0; - + float start= 0.02941535; + float end = 0.970582; mapUV.x = lerp(start,end, mapUV.x); + //uv映射改为ugui BaseMeshEffect 机制实现uv映射,比shader代码更为平滑 half4 color = tex2D(_MainTex,mapUV); diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/NesEmulator/VideoProvider.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/NesEmulator/VideoProvider.cs index 4450f03..680a3d1 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/NesEmulator/VideoProvider.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/NesEmulator/VideoProvider.cs @@ -1,3 +1,4 @@ +using AxibugEmuOnline.Client.ClientCore; using System; using System.Runtime.InteropServices; using UnityEngine; @@ -14,26 +15,27 @@ namespace AxibugEmuOnline.Client public RawImage Image; #endregion - #region GPU_TURBO - //ͼֽ + //图像数据字节数 private int TexBufferSize_gpu; - //ͼָ + //图像数据指针 private IntPtr wrapTexBufferPointer_gpu; - //Unity 2D,UIϻ + //Unity 2D纹理对象,用于UI上绘制最终输出画面 private Texture2D wrapTex_gpu; - //nesɫ,תΪunity + //nes调色板数据,已转换为unity纹理对象 private Texture2D pPal_gpu; + [SerializeField] private Material GPUTurboMat_gpu; + private RenderTexture rt_gpu; #endregion #region CPU - //ͼֽ + //图像数据字节数 private int TexBufferSize_cpu; - //ͼָ + //图像数据指针 private GCHandle wrapTexBufferGH; private IntPtr wrapTexBufferPointer_cpu; - //Unity 2D,UIϻ + //Unity 2D纹理对象,用于UI上绘制最终输出画面 private Texture2D wrapTex_cpu; #endregion @@ -42,25 +44,31 @@ namespace AxibugEmuOnline.Client private void Awake() { DrawCanvas.worldCamera = Camera.main; - GPUTurboMat_gpu = Image.material; } private void OnDestroy() { if (wrapTexBufferGH.IsAllocated) wrapTexBufferGH.Free(); + + if (rt_gpu != null) + { + RenderTexture.ReleaseTemporary(rt_gpu); + rt_gpu = null; + } } public unsafe void SetDrawData(uint* screenData) { PrepareUI(screenData); - if (GPUTurbo) PrepareForGPU(screenData);//жʹGPUCPU - else PrepareForCPU(screenData);//ʹCPU + if (GPUTurbo) PrepareForGPU(screenData);//判断使用GPU还是CPU + else PrepareForCPU(screenData);//使用CPU if (GPUTurbo) { wrapTex_gpu.LoadRawTextureData(wrapTexBufferPointer_gpu, TexBufferSize_gpu); wrapTex_gpu.Apply(); + Graphics.Blit(wrapTex_gpu, rt_gpu, GPUTurboMat_gpu); } else { @@ -69,27 +77,32 @@ namespace AxibugEmuOnline.Client } } + public void ApplyFilterEffect() + { + Image.texture = App.filter.ExecuteFilterRender(rt_gpu); + } + private unsafe void PrepareUI(uint* screenData) { if (GPUTurbo) { - if (Image.material != GPUTurboMat_gpu) Image.material = GPUTurboMat_gpu; - if (wrapTex_gpu == null) { wrapTex_gpu = new Texture2D(PPU.SCREEN_WIDTH, PPU.SCREEN_HEIGHT, TextureFormat.RGBA32, false); wrapTex_gpu.filterMode = FilterMode.Point; 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; } - if (Image.texture != wrapTex_gpu) Image.texture = wrapTex_gpu; + if (Image.texture != rt_gpu) Image.texture = rt_gpu; } else { - if (Image.material == GPUTurboMat_gpu) Image.material = null; - if (wrapTex_cpu == null) { 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; } + } private unsafe void PrepareForGPU(uint* screenData) @@ -141,7 +155,7 @@ namespace AxibugEmuOnline.Client for (int line = 0; line < PPU.SCREEN_HEIGHT; line++) { - //PSCPU㣬ȼ16IJҪ֣ܶ + //PS:如果是CPU计算,宽度减少16的不必要部分,才能对齐 width = PPU.SCREEN_WIDTH - 16; while (width > 0) @@ -149,17 +163,17 @@ namespace AxibugEmuOnline.Client var edx = screenData[pScn + 8]; uint index = edx & 0xFF; - //±ɫұʵɫ + //按下标颜色查找表中真实颜色 var colorData = palRaw[index]; - //dstɫΪabgr,colorDataΪargb - uint r = (colorData & 0x00FF0000) >> 16; // ȡRedͨ - uint g = (colorData & 0x0000FF00) >> 8; // ȡGreenͨ - uint b = (colorData & 0x000000FF); // ȡBlueͨ + //dst中颜色排列为abgr,而colorData排列为argb + uint r = (colorData & 0x00FF0000) >> 16; // 提取Red通道 + uint g = (colorData & 0x0000FF00) >> 8; // 提取Green通道 + 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); - //Žɫ + //放进颜色矩阵 Dst[pDst] = abgr; pScn += 1; diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/GamesUI/RomItem.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/GamesUI/RomItem.cs index dba3f0f..df91364 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/GamesUI/RomItem.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/GamesUI/RomItem.cs @@ -66,7 +66,7 @@ namespace AxibugEmuOnline.Client SetBaseInfo(m_romfile.Alias, m_romfile.Descript, m_romfile.GameTypeDes); 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; }); diff --git a/AxibugEmuOnline.Client/Assets/Settings.meta b/AxibugEmuOnline.Client/Assets/Settings.meta deleted file mode 100644 index 725e849..0000000 --- a/AxibugEmuOnline.Client/Assets/Settings.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 7c3fabe6430be6943b1fc06a25a275a8 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/AxibugEmuOnline.Client/Assets/Settings/Build Profiles.meta b/AxibugEmuOnline.Client/Assets/Settings/Build Profiles.meta deleted file mode 100644 index c98514c..0000000 --- a/AxibugEmuOnline.Client/Assets/Settings/Build Profiles.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 13795c31ef56b3648a06122c6b1864f3 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/AxibugEmuOnline.Client/Packages/manifest.json b/AxibugEmuOnline.Client/Packages/manifest.json index 847db9d..a91a4da 100644 --- a/AxibugEmuOnline.Client/Packages/manifest.json +++ b/AxibugEmuOnline.Client/Packages/manifest.json @@ -2,7 +2,6 @@ "dependencies": { "com.unity.2d.sprite": "1.0.0", "com.unity.ide.visualstudio": "2.0.22", - "com.unity.postprocessing": "3.4.0", "com.unity.ugui": "2.0.0", "com.unity.modules.accessibility": "1.0.0", "com.unity.modules.ai": "1.0.0", diff --git a/AxibugEmuOnline.Client/Packages/packages-lock.json b/AxibugEmuOnline.Client/Packages/packages-lock.json index 0bd47a4..cfb1599 100644 --- a/AxibugEmuOnline.Client/Packages/packages-lock.json +++ b/AxibugEmuOnline.Client/Packages/packages-lock.json @@ -22,15 +22,6 @@ }, "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": { "version": "1.4.5", "depth": 1,