diff --git a/Assets/Darkmatter/Code/Services/Capture/Systems/CaptureService.cs b/Assets/Darkmatter/Code/Services/Capture/Systems/CaptureService.cs index a7a7d07..bff2d58 100644 --- a/Assets/Darkmatter/Code/Services/Capture/Systems/CaptureService.cs +++ b/Assets/Darkmatter/Code/Services/Capture/Systems/CaptureService.cs @@ -1,3 +1,4 @@ +using System.Collections.Generic; using System.Threading; using Cysharp.Threading.Tasks; using Darkmatter.Core.Contracts.Services.Capture; @@ -10,6 +11,19 @@ namespace Darkmatter.Services.Capture public async UniTask CapturePngAsync(GameObject captureObject, float scale, CancellationToken cancellationToken = default) { + var paperCanvas = GetRootCanvas(captureObject); + var disabledCanvases = DisableOtherRootCanvases(paperCanvas); + var cam = Camera.main; + CameraClearFlags prevFlags = default; + Color prevBg = default; + if (cam != null) + { + prevFlags = cam.clearFlags; + prevBg = cam.backgroundColor; + cam.clearFlags = CameraClearFlags.SolidColor; + cam.backgroundColor = new Color(0f, 0f, 0f, 0f); + } + await UniTask.WaitForEndOfFrame(cancellationToken); var fullScreen = ScreenCapture.CaptureScreenshotAsTexture(); @@ -48,9 +62,35 @@ namespace Darkmatter.Services.Capture finally { Object.Destroy(fullScreen); + foreach (var c in disabledCanvases) if (c != null) c.enabled = true; + if (cam != null) + { + cam.clearFlags = prevFlags; + cam.backgroundColor = prevBg; + } } } + private static Canvas GetRootCanvas(GameObject go) + { + if (go == null) return null; + var c = go.GetComponentInParent(); + return c != null ? c.rootCanvas : null; + } + + private static List DisableOtherRootCanvases(Canvas keep) + { + var disabled = new List(); + var all = Object.FindObjectsByType(FindObjectsSortMode.None); + foreach (var c in all) + { + if (c == null || !c.isRootCanvas || c == keep || !c.enabled) continue; + c.enabled = false; + disabled.Add(c); + } + return disabled; + } + private static Rect ComputeCropRect(GameObject target, int screenW, int screenH) { if (target == null || target.transform is not RectTransform rt) diff --git a/Assets/Darkmatter/Scenes/GamePlay.unity b/Assets/Darkmatter/Scenes/GamePlay.unity index 5c0ab92..6cd6087 100644 --- a/Assets/Darkmatter/Scenes/GamePlay.unity +++ b/Assets/Darkmatter/Scenes/GamePlay.unity @@ -274,6 +274,7 @@ RectTransform: - {fileID: 1310839949} - {fileID: 376589367} - {fileID: 1143672390} + - {fileID: 1340226039} m_Father: {fileID: 201822947} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} @@ -354,7 +355,6 @@ RectTransform: - {fileID: 1518670451} - {fileID: 1989194441} - {fileID: 153461769} - - {fileID: 1340226039} m_Father: {fileID: 2069155641} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} @@ -1395,6 +1395,8 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Features.GameplayFlow::Darkmatter.Features.GameplayFlow.GameplayFlowFeatureModule sceneRefs: {fileID: 396806867} + nextButtonView: {fileID: 0} + backButtonView: {fileID: 0} --- !u!1 &1129540368 GameObject: m_ObjectHideFlags: 0 @@ -2219,17 +2221,17 @@ RectTransform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1340226038} - 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_ConstrainProportionsScale: 0 m_Children: - {fileID: 1141121865} - m_Father: {fileID: 201822947} + m_Father: {fileID: 153461769} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} + m_AnchoredPosition: {x: -139.44305, y: 163.66599} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &1340226040