Files
ichni_Official/Assets/Scripts/Manager/PostProcessingManager.cs
SoulliesOfficial 9fd5f098ab 设置扩展
2026-07-19 16:44:58 -04:00

61 lines
2.0 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using Sirenix.OdinInspector;
using SLSUtilities.General;
using SLSUtilities.Rendering.PostProcessing;
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Rendering.Universal;
namespace Ichni
{
public class PostProcessingManager : Singleton<PostProcessingManager>
{
/// <summary>
/// 当前已加载的 GameScene 后处理管理器。MenuScene 等未创建该对象的场景会返回 <c>null</c>。
/// </summary>
public static PostProcessingManager Instance => instance;
public static Volume GlobalVolume => instance.globalVolume;
[ShowInInspector]
public Volume globalVolume;
protected override void Awake()
{
base.Awake();
if (globalVolume != null)
{
// Force instantiate the volume profile on awake so it doesn't happen mid-game
_ = globalVolume.profile;
}
// GameScene 的 Global Volume 创建时,重新应用已加载的玩家设置,覆盖场景切换时的默认值。
SettingsManager.instance?.ApplyPostProcessingSettings();
}
/// <summary>
/// 将全局后处理状态与 Anime Bloom 档位写入 GameScene 的运行时 Profile。
/// Volume.profile 会提供运行时实例,因此不会修改磁盘上的 SampleSceneProfile 资产。
/// </summary>
public void ApplySettings(bool enablePostProcessing, BloomQuality bloomQuality)
{
globalVolume.enabled = enablePostProcessing;
if (!enablePostProcessing || !globalVolume.profile.TryGet(out AnimeBloom animeBloom))
{
return;
}
animeBloom.active = bloomQuality != BloomQuality.Off;
if (animeBloom.active)
{
animeBloom.diffusion.value = bloomQuality == BloomQuality.Performance ? 5 : 8;
}
}
}
}