add weather and time

This commit is contained in:
XuGaoFeng
2026-05-09 09:10:52 +08:00
parent 48e0dea5e1
commit 0ca1b49fa7
639 changed files with 121558 additions and 102 deletions

View File

@@ -0,0 +1,275 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
namespace Enviro
{
[Serializable]
public class EnviroAudio
{
public List<EnviroAudioClip> ambientClips = new List<EnviroAudioClip>();
public List<EnviroAudioClip> weatherClips = new List<EnviroAudioClip>();
public List<EnviroAudioClip> thunderClips = new List<EnviroAudioClip>();
public float ambientMasterVolume = 1f;
public float weatherMasterVolume = 1f;
public float thunderMasterVolume = 1f;
}
[Serializable]
public class EnviroAudioClip
{
public enum PlayBackType
{
Always,
BasedOnSun,
BasedOnMoon
}
public bool showEditor;
public string name;
public AudioClip audioClip;
public UnityEngine.Audio.AudioMixerGroup audioMixerGroup;
public PlayBackType playBackType;
public AudioSource myAudioSource;
public bool loop = false;
public float volume = 0f;
public AnimationCurve volumeCurve = new AnimationCurve();
public float maxVolume = 1f;
}
[Serializable]
[ExecuteInEditMode]
public class EnviroAudioModule : EnviroModule
{
public Enviro.EnviroAudio Settings;
public EnviroAudioModule preset;
public float ambientVolumeModifier, weatherVolumeModifier, thunderVolumeModifier = 0f;
//Inspector
public bool showAmbientSetupControls,showWeatherSetupControls,showThunderSetupControls, showAudioControls;
public override void Enable ()
{
if(EnviroManager.instance == null)
return;
CreateAudio();
}
public override void Disable ()
{
if(EnviroManager.instance == null)
return;
Cleanup();
}
private void Setup()
{
}
private void Cleanup()
{
if(EnviroManager.instance == null)
return;
if(EnviroManager.instance.Objects.audio != null)
EnviroHelper.DestroyExtended(EnviroManager.instance.Objects.audio);
}
// Update Method
public override void UpdateModule ()
{
if(!active)
return;
UpdateAudio();
}
public void CreateAudio()
{
if(EnviroManager.instance.Objects.audio != null)
{
EnviroHelper.DestroyExtended(EnviroManager.instance.Objects.audio);
EnviroManager.instance.Objects.audio = null;
}
if(EnviroManager.instance.Objects.audio == null)
{
EnviroManager.instance.Objects.audio = new GameObject();
EnviroManager.instance.Objects.audio.hideFlags = HideFlags.DontSave;
EnviroManager.instance.Objects.audio.name = "Audio";
EnviroManager.instance.Objects.audio.transform.SetParent(EnviroManager.instance.transform);
EnviroManager.instance.Objects.audio.transform.localPosition = Vector3.zero;
}
//Ambient
for(int i = 0; i < Settings.ambientClips.Count; i++)
{
if(Settings.ambientClips[i].myAudioSource != null)
EnviroHelper.DestroyExtended(Settings.ambientClips[i].myAudioSource.gameObject);
GameObject sys;
if(Settings.ambientClips[i].audioClip != null)
{
sys = new GameObject();
sys.name = "Ambient - " +Settings.ambientClips[i].name;
sys.transform.SetParent(EnviroManager.instance.Objects.audio.transform);
Settings.ambientClips[i].myAudioSource = sys.AddComponent<AudioSource>();
Settings.ambientClips[i].myAudioSource.clip = Settings.ambientClips[i].audioClip;
Settings.ambientClips[i].myAudioSource.loop = Settings.ambientClips[i].loop;
Settings.ambientClips[i].myAudioSource.volume = Settings.ambientClips[i].volume;
Settings.ambientClips[i].myAudioSource.outputAudioMixerGroup = Settings.ambientClips[i].audioMixerGroup;
}
}
//Weather
for(int i = 0; i < Settings.weatherClips.Count; i++)
{
if(Settings.weatherClips[i].myAudioSource != null)
EnviroHelper.DestroyExtended(Settings.weatherClips[i].myAudioSource.gameObject);
GameObject sys;
if(Settings.weatherClips[i].audioClip != null)
{
sys = new GameObject();
sys.name = "Weather - " + Settings.weatherClips[i].name;
sys.transform.SetParent(EnviroManager.instance.Objects.audio.transform);
Settings.weatherClips[i].myAudioSource = sys.AddComponent<AudioSource>();
Settings.weatherClips[i].myAudioSource.clip = Settings.weatherClips[i].audioClip;
Settings.weatherClips[i].myAudioSource.loop = Settings.weatherClips[i].loop;
Settings.weatherClips[i].myAudioSource.volume = Settings.weatherClips[i].volume;
Settings.weatherClips[i].myAudioSource.outputAudioMixerGroup = Settings.weatherClips[i].audioMixerGroup;
}
}
//Tunder
for(int i = 0; i < Settings.thunderClips.Count; i++)
{
if(Settings.thunderClips[i].myAudioSource != null)
EnviroHelper.DestroyExtended(Settings.thunderClips[i].myAudioSource.gameObject);
GameObject sys;
if(Settings.thunderClips[i].audioClip != null)
{
sys = new GameObject();
sys.name = "Thunder - " + Settings.thunderClips[i].name;
sys.transform.SetParent(EnviroManager.instance.Objects.audio.transform);
Settings.thunderClips[i].myAudioSource = sys.AddComponent<AudioSource>();
Settings.thunderClips[i].myAudioSource.clip = Settings.thunderClips[i].audioClip;
Settings.thunderClips[i].myAudioSource.loop = false;
Settings.thunderClips[i].myAudioSource.playOnAwake = false;
Settings.thunderClips[i].myAudioSource.volume = Settings.thunderClips[i].volume;
Settings.thunderClips[i].myAudioSource.outputAudioMixerGroup = Settings.thunderClips[i].audioMixerGroup;
}
}
}
//Plays random thunder SFX audio.
public void PlayRandomThunderSFX()
{
int thunderSFX = UnityEngine.Random.Range(0,Settings.thunderClips.Count);
if(Settings.thunderClips.Count > 0 && Settings.thunderClips[thunderSFX] != null)
{
Settings.thunderClips[thunderSFX].myAudioSource.volume = Settings.thunderClips[thunderSFX].volume * Settings.thunderMasterVolume + thunderVolumeModifier;
Settings.thunderClips[thunderSFX].myAudioSource.PlayOneShot(Settings.thunderClips[thunderSFX].myAudioSource.clip);
}
}
public void UpdateAudio()
{
for(int i = 0; i < Settings.ambientClips.Count; i++)
{
UpdateEnviroAudioClip(Settings.ambientClips[i],Settings.ambientMasterVolume + ambientVolumeModifier);
}
for(int i = 0; i < Settings.weatherClips.Count; i++)
{
UpdateEnviroAudioClip(Settings.weatherClips[i],Settings.weatherMasterVolume + weatherVolumeModifier);
}
}
void UpdateEnviroAudioClip(EnviroAudioClip clip, float masterVolume)
{
if(clip.audioClip != null && clip.myAudioSource != null)
{
if(!Application.isPlaying)
{
clip.myAudioSource.Stop();
return;
}
clip.myAudioSource.loop = clip.loop;
switch (clip.playBackType)
{
case EnviroAudioClip.PlayBackType.Always:
clip.myAudioSource.volume = clip.volume * masterVolume;
break;
case EnviroAudioClip.PlayBackType.BasedOnSun:
clip.myAudioSource.volume = clip.volumeCurve.Evaluate(EnviroManager.instance.solarTime);
clip.myAudioSource.volume *= clip.volume * masterVolume;
break;
case EnviroAudioClip.PlayBackType.BasedOnMoon:
clip.myAudioSource.volume = clip.volumeCurve.Evaluate(EnviroManager.instance.lunarTime);
clip.myAudioSource.volume *= clip.volume * masterVolume;
break;
}
//Enable or disable playback based on volume
if(clip.myAudioSource.volume < 0.001f && clip.myAudioSource.isPlaying)
clip.myAudioSource.Stop();
if(clip.myAudioSource.volume > 0f && !clip.myAudioSource.isPlaying)
clip.myAudioSource.Play();
}
}
//Save and Load
public void LoadModuleValues ()
{
if(preset != null)
{
Settings = JsonUtility.FromJson<Enviro.EnviroAudio>(JsonUtility.ToJson(preset.Settings));
}
else
{
Debug.Log("Please assign a saved module to load from!");
}
}
public void SaveModuleValues ()
{
#if UNITY_EDITOR
EnviroAudioModule t = ScriptableObject.CreateInstance<EnviroAudioModule>();
t.name = "Audio Module";
t.Settings = JsonUtility.FromJson<Enviro.EnviroAudio>(JsonUtility.ToJson(Settings));
string assetPathAndName = UnityEditor.AssetDatabase.GenerateUniqueAssetPath(EnviroHelper.assetPath + "/New " + t.name + ".asset");
UnityEditor.AssetDatabase.CreateAsset(t, assetPathAndName);
UnityEditor.AssetDatabase.SaveAssets();
UnityEditor.AssetDatabase.Refresh();
#endif
}
public void SaveModuleValues (EnviroAudioModule module)
{
module.Settings = JsonUtility.FromJson<Enviro.EnviroAudio>(JsonUtility.ToJson(Settings));
#if UNITY_EDITOR
UnityEditor.EditorUtility.SetDirty(module);
UnityEditor.AssetDatabase.SaveAssets();
#endif
}
}
}

View File

@@ -0,0 +1,18 @@
fileFormatVersion: 2
guid: a3e0fff1aca044c40b9f5dc9d0bfaaa3
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 236601
packageName: Enviro 3 - Sky and Weather
packageVersion: 3.1.2
assetPath: Assets/Enviro 3 - Sky and Weather/Scripts/Runtime/Modules/Audio/EnviroAudioModule.cs
uploadId: 660896

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 8584d198954851d47a42ddc29a12e3ee
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,263 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: a3e0fff1aca044c40b9f5dc9d0bfaaa3, type: 3}
m_Name: Default Audio Preset
m_EditorClassIdentifier:
showModuleInspector: 1
showSaveLoad: 0
active: 1
Settings:
ambientClips:
- showEditor: 1
name: Day
audioClip: {fileID: 8300000, guid: 3e0b793299afd7c4086f6dfcd604aaba, type: 3}
audioMixerGroup: {fileID: -7356562420348432203, guid: c5196b1e1a81a964ab0079efa98e857b, type: 2}
playBackType: 1
myAudioSource: {fileID: 0}
loop: 1
volume: 1
volumeCurve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0
inSlope: -0.000000659857
outSlope: -0.000000659857
tangentMode: 34
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
- serializedVersion: 3
time: 0.496813
value: -0.00000032782555
inSlope: 0.026825864
outSlope: 0.026825864
tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.12836285
- serializedVersion: 3
time: 0.5332272
value: 0.69103265
inSlope: 2.2555194
outSlope: 2.2555194
tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.0717938
- serializedVersion: 3
time: 1
value: 1
inSlope: 0.050087996
outSlope: 0.050087996
tangentMode: 0
weightedMode: 0
inWeight: 0.15470096
outWeight: 0.33333334
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
maxVolume: 1
- showEditor: 1
name: Night
audioClip: {fileID: 8300000, guid: eef01bfe93973f4419f0b3dd1b7a6a06, type: 3}
audioMixerGroup: {fileID: -7356562420348432203, guid: c5196b1e1a81a964ab0079efa98e857b, type: 2}
playBackType: 1
myAudioSource: {fileID: 0}
loop: 1
volume: 1
volumeCurve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0.0058403015
value: 0.003780365
inSlope: 0.40376505
outSlope: 0.40376505
tangentMode: 34
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
- serializedVersion: 3
time: 0.30587992
value: 0.12492588
inSlope: 0.9373293
outSlope: 0.9373293
tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
- serializedVersion: 3
time: 0.45850945
value: 0.39840025
inSlope: -0.15356094
outSlope: -0.15356094
tangentMode: 0
weightedMode: 0
inWeight: 0.3681847
outWeight: 0.09808861
- serializedVersion: 3
time: 0.51107603
value: 0.00567906
inSlope: -0.03341259
outSlope: -0.03341259
tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.11550105
- serializedVersion: 3
time: 1.0029275
value: 0.0013360546
inSlope: -0.07205321
outSlope: -0.07205321
tangentMode: 0
weightedMode: 0
inWeight: 0.15684973
outWeight: 0.33333334
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
maxVolume: 1
weatherClips:
- showEditor: 1
name: Light Rain
audioClip: {fileID: 8300000, guid: 84e5ea3df3fc44749b4bf8e1fe360d49, type: 3}
audioMixerGroup: {fileID: 0}
playBackType: 0
myAudioSource: {fileID: 0}
loop: 1
volume: 0
volumeCurve:
serializedVersion: 2
m_Curve: []
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
maxVolume: 1
- showEditor: 1
name: Medium Rain
audioClip: {fileID: 8300000, guid: c2b83583de6cc7c4ca613942c6fe8a76, type: 3}
audioMixerGroup: {fileID: 0}
playBackType: 0
myAudioSource: {fileID: 0}
loop: 1
volume: 0
volumeCurve:
serializedVersion: 2
m_Curve: []
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
maxVolume: 1
- showEditor: 1
name: Heavy Rain
audioClip: {fileID: 8300000, guid: 6ff8b8db3a3fd6e4cbfa0995856ebaca, type: 3}
audioMixerGroup: {fileID: 0}
playBackType: 0
myAudioSource: {fileID: 0}
loop: 1
volume: 0
volumeCurve:
serializedVersion: 2
m_Curve: []
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
maxVolume: 1
thunderClips:
- showEditor: 1
name: Thunder 1
audioClip: {fileID: 8300000, guid: 6ca3bddd35a48a745b4dcecc9f65a83f, type: 3}
audioMixerGroup: {fileID: 0}
playBackType: 0
myAudioSource: {fileID: 0}
loop: 0
volume: 1
volumeCurve:
serializedVersion: 2
m_Curve: []
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
maxVolume: 1
- showEditor: 1
name: Thunder 2
audioClip: {fileID: 8300000, guid: dd76e0dd59e215946a75c7338c043951, type: 3}
audioMixerGroup: {fileID: 0}
playBackType: 0
myAudioSource: {fileID: 0}
loop: 0
volume: 1
volumeCurve:
serializedVersion: 2
m_Curve: []
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
maxVolume: 1
- showEditor: 1
name: Thunder 3
audioClip: {fileID: 8300000, guid: ee17606ad258a3543a73a326bf5bc5da, type: 3}
audioMixerGroup: {fileID: 0}
playBackType: 0
myAudioSource: {fileID: 0}
loop: 0
volume: 1
volumeCurve:
serializedVersion: 2
m_Curve: []
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
maxVolume: 1
- showEditor: 1
name: Thunder 4
audioClip: {fileID: 8300000, guid: eb8c1b0f82ffe784da2459bc295b4854, type: 3}
audioMixerGroup: {fileID: 0}
playBackType: 0
myAudioSource: {fileID: 0}
loop: 0
volume: 1
volumeCurve:
serializedVersion: 2
m_Curve: []
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
maxVolume: 1
- showEditor: 1
name: Thunder 5
audioClip: {fileID: 8300000, guid: e410de94ef87c1b4998b2d4731a717bc, type: 3}
audioMixerGroup: {fileID: 0}
playBackType: 0
myAudioSource: {fileID: 0}
loop: 0
volume: 1
volumeCurve:
serializedVersion: 2
m_Curve: []
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
maxVolume: 1
ambientMasterVolume: 1
weatherMasterVolume: 1
thunderMasterVolume: 1
preset: {fileID: 0}
ambientVolumeModifier: 0
weatherVolumeModifier: 0
thunderVolumeModifier: 0
showAmbientSetupControls: 0
showWeatherSetupControls: 0
showThunderSetupControls: 0
showAudioControls: 0

View File

@@ -0,0 +1,16 @@
fileFormatVersion: 2
guid: fac88c4f2c49e2d429d7269d163c9947
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 236601
packageName: Enviro 3 - Sky and Weather
packageVersion: 3.1.2
assetPath: Assets/Enviro 3 - Sky and Weather/Scripts/Runtime/Modules/Audio/Preset/Default
Audio Preset.asset
uploadId: 660896