DayToNight.cs 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.UI;
  5. using UnityStandardAssets.ImageEffects;
  6. /* 组件-动物场景白天和夜晚切换 */
  7. public class DayToNight : MonoBehaviour
  8. {
  9. [SerializeField] Material daySkyboxMaterial;
  10. [SerializeField] Material nightSkyboxMaterial;
  11. [SerializeField] Camera[] cameras;
  12. void Awake()
  13. {
  14. if (ChallengeGameMode.IsChallengeWolf()) {
  15. EnterNight();
  16. } else {
  17. EnterDay();
  18. }
  19. // new GameObject("FPSTester").AddComponent<FPSTester>();
  20. }
  21. public void EnterDay()
  22. {
  23. RenderSettings.fogStartDistance = 25;
  24. RenderSettings.fogColor = new Color(124f/255, 177f/255, 221f/255);
  25. RenderSettings.ambientMode = UnityEngine.Rendering.AmbientMode.Flat;
  26. RenderSettings.ambientSkyColor = Color.white;
  27. RenderSettings.skybox = daySkyboxMaterial;
  28. foreach (Transform item in transform) item.gameObject.SetActive(false);
  29. transform.Find("DayElements").gameObject.SetActive(true);
  30. // SetFogCamera(false);
  31. }
  32. public void EnterNight()
  33. {
  34. //需要开一个新的场景,按以下配置来配置下场景并加入BuildSettings中,否则打包发布后代码切换以下雾霾效果会不生效。
  35. //个人推测,unity扫描到没使用到这种雾霾的场景,就把该雾霾的引擎代码在打包时剔除掉了
  36. // RenderSettings.fogStartDistance = 5;
  37. RenderSettings.fogMode = FogMode.Exponential;
  38. RenderSettings.fogDensity = 0.06f;
  39. RenderSettings.fogColor = new Color(37f/255, 52f/255, 63f/255);
  40. RenderSettings.ambientMode = UnityEngine.Rendering.AmbientMode.Flat;
  41. RenderSettings.ambientSkyColor = new Color(160f/255, 90f/255, 90f/255);
  42. RenderSettings.skybox = nightSkyboxMaterial;
  43. foreach (Transform item in transform) item.gameObject.SetActive(false);
  44. transform.Find("NightElements").gameObject.SetActive(true);
  45. transform.Find("NightElements/Cloud").gameObject.SetActive(false);
  46. // SetFogCamera(true);
  47. }
  48. public void SetFogCamera(bool setValue)
  49. {
  50. Component[] components = {
  51. cameras[0].GetComponent<VignetteAndChromaticAberration>(),
  52. cameras[0].GetComponent<ScreenSpaceAmbientObscurance>(),
  53. cameras[0].GetComponent<GlobalFog>()
  54. };
  55. foreach (var comp in components) {
  56. for (int i = 1; i < cameras.Length; i++) {
  57. Camera camera = cameras[i];
  58. CopyComponent(comp, camera.gameObject);
  59. }
  60. }
  61. foreach (var item in cameras)
  62. {
  63. item.GetComponent<VignetteAndChromaticAberration>().enabled = setValue;
  64. item.GetComponent<ScreenSpaceAmbientObscurance>().enabled = setValue;
  65. item.GetComponent<GlobalFog>().enabled = setValue;
  66. }
  67. }
  68. void CopyComponent(Component comp, GameObject dest)
  69. {
  70. System.Type type = comp.GetType();
  71. Component copy = dest.GetComponent(type);
  72. if (copy == null) {
  73. copy = dest.AddComponent(type);
  74. }
  75. System.Reflection.FieldInfo[] fields = type.GetFields();
  76. foreach (System.Reflection.FieldInfo field in fields)
  77. {
  78. field.SetValue(copy, field.GetValue(comp));
  79. }
  80. }
  81. }