83 lines
2.1 KiB
C#
83 lines
2.1 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
using UnityEngine.Rendering;
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
|
|
namespace Rukhanka.Samples
|
|
{
|
|
[ExecuteAlways]
|
|
public class EnvironmentLoader: MonoBehaviour
|
|
{
|
|
public Material urpSkybox;
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
|
|
void OnEnable()
|
|
{
|
|
var srpName = GraphicsSettings.currentRenderPipeline.name;
|
|
var switchToURP = !srpName.Contains("HDRP");
|
|
|
|
if (switchToURP)
|
|
{
|
|
ConfigureURPScene();
|
|
|
|
if (!Application.isPlaying)
|
|
ChangeMaterialShadersToURP();
|
|
}
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
|
|
void ConfigureURPScene()
|
|
{
|
|
var dl = FindFirstObjectByType<Light>();
|
|
if (dl != null)
|
|
{
|
|
dl.intensity = 0.9f;
|
|
RenderSettings.skybox = urpSkybox;
|
|
}
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
|
|
void ChangeMaterialShadersToURP()
|
|
{
|
|
#if UNITY_EDITOR
|
|
var shaderReplacementTable = new (string, string)[]
|
|
{
|
|
("HDRP/Lit", "Shader Graphs/Lit URP"),
|
|
("Hidden/InternalErrorShader", "Shader Graphs/Lit URP")
|
|
};
|
|
|
|
var sampleMaterials = new List<string>();
|
|
sampleMaterials.AddRange(AssetDatabase.FindAssets("t:material", new[] { "Assets/Samples/Rukhanka Animation System 2" }));
|
|
|
|
foreach (var sa in sampleMaterials)
|
|
{
|
|
var matPath = AssetDatabase.GUIDToAssetPath(sa);
|
|
var mat = AssetDatabase.LoadAssetAtPath<Material>(matPath);
|
|
if (mat != null)
|
|
{
|
|
var foundIndex = Array.FindIndex(shaderReplacementTable, x => x.Item1 == mat.shader.name);
|
|
if (foundIndex < 0)
|
|
continue;
|
|
|
|
var (sourceShaderName, replacementShaderName) = shaderReplacementTable[foundIndex];
|
|
|
|
Debug.Log($"Replacing {sourceShaderName} with {replacementShaderName}");
|
|
var newShader = Shader.Find(replacementShaderName);
|
|
if (newShader == null)
|
|
Debug.Log($"Replacement shader not found!");
|
|
mat.shader = newShader;
|
|
AssetDatabase.SaveAssets();
|
|
AssetDatabase.Refresh();
|
|
}
|
|
}
|
|
#endif
|
|
}
|
|
}
|
|
}
|