Minor fix

This commit is contained in:
Savya Bikram Shah
2026-05-29 16:24:50 +05:45
parent b39d2a798c
commit 6872158d2d
2 changed files with 46 additions and 4 deletions

View File

@@ -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)