Minor fix
This commit is contained in:
@@ -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<byte[]> 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<Canvas>();
|
||||
return c != null ? c.rootCanvas : null;
|
||||
}
|
||||
|
||||
private static List<Canvas> DisableOtherRootCanvases(Canvas keep)
|
||||
{
|
||||
var disabled = new List<Canvas>();
|
||||
var all = Object.FindObjectsByType<Canvas>(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)
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user