using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityStandardAssets.ImageEffects; /* 组件-动物场景白天和夜晚切换 */ public class DayToNight : MonoBehaviour { [SerializeField] Material daySkyboxMaterial; [SerializeField] Material nightSkyboxMaterial; [SerializeField] Camera[] cameras; void Awake() { if (ChallengeGameMode.IsChallengeWolf()) { EnterNight(); } else { EnterDay(); } // new GameObject("FPSTester").AddComponent(); } public void EnterDay() { RenderSettings.fogStartDistance = 25; RenderSettings.fogColor = new Color(124f/255, 177f/255, 221f/255); RenderSettings.ambientMode = UnityEngine.Rendering.AmbientMode.Flat; RenderSettings.ambientSkyColor = Color.white; RenderSettings.skybox = daySkyboxMaterial; foreach (Transform item in transform) item.gameObject.SetActive(false); transform.Find("DayElements").gameObject.SetActive(true); // SetFogCamera(false); } public void EnterNight() { //需要开一个新的场景,按以下配置来配置下场景并加入BuildSettings中,否则打包发布后代码切换以下雾霾效果会不生效。 //个人推测,unity扫描到没使用到这种雾霾的场景,就把该雾霾的引擎代码在打包时剔除掉了 // RenderSettings.fogStartDistance = 5; RenderSettings.fogMode = FogMode.Exponential; RenderSettings.fogDensity = 0.06f; RenderSettings.fogColor = new Color(37f/255, 52f/255, 63f/255); RenderSettings.ambientMode = UnityEngine.Rendering.AmbientMode.Flat; RenderSettings.ambientSkyColor = new Color(160f/255, 90f/255, 90f/255); RenderSettings.skybox = nightSkyboxMaterial; foreach (Transform item in transform) item.gameObject.SetActive(false); transform.Find("NightElements").gameObject.SetActive(true); transform.Find("NightElements/Cloud").gameObject.SetActive(false); // SetFogCamera(true); } public void SetFogCamera(bool setValue) { Component[] components = { cameras[0].GetComponent(), cameras[0].GetComponent(), cameras[0].GetComponent() }; foreach (var comp in components) { for (int i = 1; i < cameras.Length; i++) { Camera camera = cameras[i]; CopyComponent(comp, camera.gameObject); } } foreach (var item in cameras) { item.GetComponent().enabled = setValue; item.GetComponent().enabled = setValue; item.GetComponent().enabled = setValue; } } void CopyComponent(Component comp, GameObject dest) { System.Type type = comp.GetType(); Component copy = dest.GetComponent(type); if (copy == null) { copy = dest.AddComponent(type); } System.Reflection.FieldInfo[] fields = type.GetFields(); foreach (System.Reflection.FieldInfo field in fields) { field.SetValue(copy, field.GetValue(comp)); } } }