add new code controller color night
This commit is contained in:
@@ -1,27 +1,33 @@
|
||||
using UnityEngine;
|
||||
|
||||
[ExecuteAlways]
|
||||
public class GlobalShaderVariableSetting : MonoBehaviour
|
||||
/// <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, 1)]
|
||||
public float nightColorControl;
|
||||
public Color ambientDayColor;
|
||||
public Color dirLtColorDayColor;
|
||||
public Color ambientNightColor;
|
||||
public Color dirLtColorNightColor;
|
||||
int AmbientDayColorHash = Shader.PropertyToID("_AmbientDayColor");
|
||||
int DirLtColorDayColorHash = Shader.PropertyToID("_DirLtColorDayColor");
|
||||
int AmbientNightColorHash = Shader.PropertyToID("_AmbientNightColor");
|
||||
int DirLtColorNightColorHash = Shader.PropertyToID("_DirLtColorNightColor");
|
||||
int NightColorControlHash = Shader.PropertyToID("_NightColorControl");
|
||||
[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);
|
||||
|
||||
// Update is called once per frame
|
||||
void Update()
|
||||
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, nightColorControl);
|
||||
Shader.SetGlobalFloat(NightColorControlHash, nightControl);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:118edff57ce13d46edc50acb1387bca1d79d66795958be304ef1e9d017cff634
|
||||
size 309966
|
||||
oid sha256:c325d0a7bc280929b09c64b5ed3ba47eb1b4d50a46850a97cdd7b752527e808a
|
||||
size 312713
|
||||
|
||||
@@ -311,7 +311,7 @@ namespace PerfectWorld.Scripts
|
||||
Mathf.Abs(meshBounds.size.z * scale.z));
|
||||
var currentBounds = new Bounds(worldCenter, worldSize);
|
||||
|
||||
Debug.Log($"[Cuong] [CECMatter] renderer={renderer.name} meshLocalCenter={meshBounds.center} meshLocalSize={meshBounds.size} worldCenter={worldCenter} worldSize={worldSize} worldMaxY={currentBounds.max.y}");
|
||||
BMLogger.Log($"[Cuong] [CECMatter] renderer={renderer.name} meshLocalCenter={meshBounds.center} meshLocalSize={meshBounds.size} worldCenter={worldCenter} worldSize={worldSize} worldMaxY={currentBounds.max.y}");
|
||||
|
||||
if (!hasAny)
|
||||
{
|
||||
|
||||
@@ -17,6 +17,8 @@ namespace BrewMonster.Scripts
|
||||
public float m_fDNFactor; // day or night factor
|
||||
public float m_fDNFactorDest; // day or night factor dest
|
||||
|
||||
[SerializeField] GlobalShaderVariableSetting _globalShaderVariables;
|
||||
|
||||
protected override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
@@ -28,8 +30,65 @@ namespace BrewMonster.Scripts
|
||||
public void Update()
|
||||
{
|
||||
m_vTimeOfTheDay += Time.deltaTime / 3600.0 / 24.0 * TIME_SCALE;
|
||||
while( m_vTimeOfTheDay > 1.0 )
|
||||
while (m_vTimeOfTheDay > 1.0)
|
||||
m_vTimeOfTheDay -= 1.0;
|
||||
RefreshDayNightFactorsFromPhase();
|
||||
}
|
||||
|
||||
public float GetTimeOfTheDay() => (float)m_vTimeOfTheDay;
|
||||
public float GetDNFactor() => m_fDNFactor;
|
||||
public float GetDNFactorDest() => m_fDNFactorDest;
|
||||
|
||||
/// <summary>
|
||||
/// 设置一天中的时刻(与 PC 版 CECSunMoon::SetTimeOfTheDay 对齐) // Set time-of-day phase [0,1), aligned with PC CECSunMoon::SetTimeOfTheDay
|
||||
/// </summary>
|
||||
public bool SetTimeOfTheDay(float vTime)
|
||||
{
|
||||
while (vTime < 0f)
|
||||
vTime += 1f;
|
||||
while (vTime > 1f)
|
||||
vTime -= 1f;
|
||||
m_vTimeOfTheDay = vTime;
|
||||
RefreshDayNightFactorsFromPhase();
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// PC EC_SunMoon::UpdateWithTime 中昼夜因子段(供 minimap 与场景一致) // DN factor block from PC EC_SunMoon::UpdateWithTime
|
||||
/// </summary>
|
||||
void RefreshDayNightFactorsFromPhase()
|
||||
{
|
||||
float v = (float)m_vTimeOfTheDay;
|
||||
|
||||
// update day night factor — same branches as PC EC_SunMoon.cpp UpdateWithTime (lines 894–918)
|
||||
if (v < NIGHT_DAY_START)
|
||||
{
|
||||
m_fDNFactor = 1.0f;
|
||||
m_fDNFactorDest = 1.0f;
|
||||
}
|
||||
else if (v < NIGHT_DAY_END)
|
||||
{
|
||||
m_fDNFactor = 1.0f - (v - NIGHT_DAY_START) / (NIGHT_DAY_END - NIGHT_DAY_START);
|
||||
m_fDNFactorDest = 0.0f;
|
||||
}
|
||||
else if (m_vTimeOfTheDay < DAY_NIGHT_START)
|
||||
{
|
||||
// PC 使用 m_vTimeOfTheDay 与 DAY_NIGHT_START 比较 // PC compares m_vTimeOfTheDay to DAY_NIGHT_START (see EC_SunMoon.cpp)
|
||||
m_fDNFactor = 0.0f;
|
||||
m_fDNFactorDest = 0.0f;
|
||||
}
|
||||
else if (v < DAY_NIGHT_END)
|
||||
{
|
||||
m_fDNFactor = (v - DAY_NIGHT_START) / (DAY_NIGHT_END - DAY_NIGHT_START);
|
||||
m_fDNFactorDest = 1.0f;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_fDNFactor = 1.0f;
|
||||
m_fDNFactorDest = 1.0f;
|
||||
}
|
||||
|
||||
_globalShaderVariables?.Apply(m_fDNFactor);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0bc8e618be49c2a43ba51b29d88b0d89
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,55 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &8484668850765921357
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 175233104343345793}
|
||||
- component: {fileID: 8122841735406317771}
|
||||
m_Layer: 0
|
||||
m_Name: prefab_GlobalShaderVariableSetting
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &175233104343345793
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8484668850765921357}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &8122841735406317771
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8484668850765921357}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 427757edde4d4aa4c8f1f0f45d926e40, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_vTimeOfTheDay: 0
|
||||
m_fDNFactor: 0
|
||||
m_fDNFactorDest: 0
|
||||
_globalShaderVariables:
|
||||
nightControl: 1
|
||||
ambientDayColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
dirLtColorDayColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
ambientNightColor: {r: 0.052064802, g: 0.17590977, b: 0.2830189, a: 1}
|
||||
dirLtColorNightColor: {r: 0.050980397, g: 0.1764706, b: 0.28235295, a: 1}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8306e3d623c54e346bad9ae88a7725b7
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user