com.alicizax.unity.framework/Runtime/ABase/Helper/UnityRendererHelper.cs

64 lines
2.4 KiB
C#
Raw Normal View History

2026-03-23 19:27:38 +08:00
using System;
2025-10-11 15:18:09 +08:00
using UnityEngine;
2026-03-23 19:27:38 +08:00
using UnityEngine.SceneManagement;
2025-10-11 15:18:09 +08:00
namespace AlicizaX
{
/// <summary>
/// Unity 渲染帮助类
/// </summary>
public static class UnityRendererHelper
{
/// <summary>
/// 判断渲染组件是否在相机范围内
/// </summary>
/// <param name="renderer">渲染组件</param>
/// <param name="camera">相机对象</param>
/// <returns></returns>
public static bool IsVisibleFrom(Renderer renderer, Camera camera)
{
Plane[] planes = GeometryUtility.CalculateFrustumPlanes(camera);
return GeometryUtility.TestPlanesAABB(planes, renderer.bounds);
}
/// <summary>
/// 判断渲染组件是否在相机范围内
/// </summary>
/// <param name="renderer">渲染对象</param>
/// <param name="camera">相机对象</param>
/// <returns></returns>
public static bool IsVisibleFrom(MeshRenderer renderer, Camera camera)
{
Plane[] planes = GeometryUtility.CalculateFrustumPlanes(camera);
return GeometryUtility.TestPlanesAABB(planes, renderer.bounds);
}
2026-03-23 19:27:38 +08:00
/// <summary>
/// 获取相机快照
/// </summary>
/// <param name="main">相机</param>
/// <param name="scale">缩放比</param>
public static Texture2D GetCaptureScreenshot(Camera main, float scale = 0.5f)
{
Rect rect = new Rect(0, 0, Screen.width * scale, Screen.height * scale);
string name = DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss");
RenderTexture renderTexture = RenderTexture.GetTemporary((int)rect.width, (int)rect.height, 0);
renderTexture.name = SceneManager.GetActiveScene().name + "_" + renderTexture.width + "_" + renderTexture.height + "_" + name;
main.targetTexture = renderTexture;
main.Render();
RenderTexture.active = renderTexture;
Texture2D screenShot = new Texture2D((int)rect.width, (int)rect.height, TextureFormat.RGB24, false)
{
name = renderTexture.name
};
screenShot.ReadPixels(rect, 0, 0);
screenShot.Apply();
main.targetTexture = null;
RenderTexture.active = null;
RenderTexture.ReleaseTemporary(renderTexture);
return screenShot;
}
2025-10-11 15:18:09 +08:00
}
}