Files
test/Assets/ModelRenderer/Scripts/Terrain/GlobalShaderVariableSetting.cs
T
2026-05-28 17:47:13 +07:00

34 lines
1.7 KiB
C#

using UnityEngine;
/// <summary>
/// 全局昼夜着色参数(由 CECSunMoon 在刷新 m_fDNFactor 后调用 Apply)。
/// Global day/night shader globals; CECSunMoon calls Apply after updating m_fDNFactor.
/// </summary>
[System.Serializable]
public class GlobalShaderVariableSetting
{
[Range(0.0f, 1.0f)]
public float nightControl;
public Color ambientDayColor = Color.white;
public Color dirLtColorDayColor = Color.white;
public Color ambientNightColor = new Color(0.113f, 0.113f, 0.113f, 1f);
public Color dirLtColorNightColor = new Color(0.123f, 0.123f, 0.123f, 1f);
static readonly int AmbientDayColorHash = Shader.PropertyToID("_AmbientDayColor");
static readonly int DirLtColorDayColorHash = Shader.PropertyToID("_DirLtColorDayColor");
static readonly int AmbientNightColorHash = Shader.PropertyToID("_AmbientNightColor");
static readonly int DirLtColorNightColorHash = Shader.PropertyToID("_DirLtColorNightColor");
static readonly int NightColorControlHash = Shader.PropertyToID("_NightColorControl");
/// <param name="nightColorControl">0=昼 1=夜,与 PC m_fDNFactor 一致 // 0=day, 1=night, same as PC m_fDNFactor</param>
public void Apply(float nightColorControl)
{
nightControl = Mathf.Clamp01(nightColorControl);
Shader.SetGlobalColor(AmbientDayColorHash, ambientDayColor);
Shader.SetGlobalColor(DirLtColorDayColorHash, dirLtColorDayColor);
Shader.SetGlobalColor(AmbientNightColorHash, ambientNightColor);
Shader.SetGlobalColor(DirLtColorNightColorHash, dirLtColorNightColor);
Shader.SetGlobalFloat(NightColorControlHash, nightControl);
}
}