Files
YachtDice/Assets/Plugins/AllIn13DShader/Demo/Scripts/PostProcessConfigurator.cs
T
2026-02-23 22:24:46 +07:00

116 lines
3.1 KiB
C#

#if UNITY_EDITOR
using UnityEditor;
using UnityEditor.SceneManagement;
#endif
using System.IO;
using UnityEngine;
#if ALLIN13DSHADER_BIRP && UNITY_POST_PROCESSING_STACK_V2
using UnityEngine.Rendering.PostProcessing;
#elif ALLIN13DSHADER_URP
using UnityEngine.Rendering;
using UnityEngine.Rendering.Universal;
#endif
namespace AllIn13DShader
{
[ExecuteInEditMode]
public class PostProcessConfigurator : MonoBehaviour
{
private Camera cam;
#if ALLIN13DSHADER_BIRP && UNITY_POST_PROCESSING_STACK_V2
public PostProcessProfile postProcessProfileBIRP;
#elif ALLIN13DSHADER_URP
public VolumeProfile postProcessProfileURP;
#endif
private void Awake()
{
cam = GetComponent<Camera>();
if(cam == null)
{
Debug.LogError("Camera not found in this object!", gameObject);
return;
}
#if UNITY_EDITOR
if (!Application.isPlaying)
{
GameObjectUtility.RemoveMonoBehavioursWithMissingScript(gameObject);
#if ALLIN13DSHADER_BIRP && UNITY_POST_PROCESSING_STACK_V2
ConfigurePostprocessBIRP();
#elif ALLIN13DSHADER_URP
ConfigurePostprocessURP();
#endif
}
#endif
}
#if UNITY_EDITOR
#if ALLIN13DSHADER_BIRP && UNITY_POST_PROCESSING_STACK_V2
private void ConfigurePostprocessBIRP()
{
PostProcessLayer postProcessLayer;
if (!cam.gameObject.TryGetComponent<PostProcessLayer>(out postProcessLayer))
{
postProcessLayer = cam.gameObject.AddComponent<PostProcessLayer>();
}
PostProcessVolume volume;
if(!cam.gameObject.TryGetComponent<PostProcessVolume>(out volume))
{
volume = cam.gameObject.AddComponent<PostProcessVolume>();
}
postProcessLayer.volumeTrigger = cam.transform;
if(postProcessProfileBIRP == null)
{
string rootFolder = SessionState.GetString("AllIn13DShader_RootPluginFolder", "Assets/AllIn13DShader");
string profilePath = Path.Combine(rootFolder, "Demo/PostProcessingProfile/3DShaderPP.asset");
postProcessProfileBIRP = AssetDatabase.LoadAssetAtPath<PostProcessProfile>(profilePath);
}
postProcessLayer.volumeLayer = ~0;
volume.profile = postProcessProfileBIRP;
volume.isGlobal = true;
EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene());
}
#endif
#if ALLIN13DSHADER_URP
private void ConfigurePostprocessURP()
{
Volume volume;
if (!cam.gameObject.TryGetComponent<Volume>(out volume))
{
volume = cam.gameObject.AddComponent<Volume>();
}
if(postProcessProfileURP == null)
{
string rootFolder = SessionState.GetString("AllIn13DShader_RootPluginFolder", "Assets/AllIn13DShader");
string profilePath = Path.Combine(rootFolder, "Demo/PostProcessingProfile/3DShaderPP_URP.asset");
postProcessProfileURP = AssetDatabase.LoadAssetAtPath<VolumeProfile>(profilePath);
}
volume.sharedProfile = (VolumeProfile)postProcessProfileURP;
EditorUtility.SetDirty(volume);
UniversalAdditionalCameraData cameraData;
if(!cam.gameObject.TryGetComponent<UniversalAdditionalCameraData>(out cameraData))
{
cameraData = cam.gameObject.AddComponent<UniversalAdditionalCameraData>();
}
cameraData.renderPostProcessing = true;
EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene());
}
#endif
#endif
}
}