InTerra_UpdateAndCheckInEditor.cs 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. using UnityEditor;
  2. using UnityEngine;
  3. using UnityEngine.SceneManagement;
  4. namespace InTerra
  5. {
  6. public class InTerra_UpdateAndCheckInEditor : UnityEditor.AssetModificationProcessor
  7. {
  8. [InitializeOnLoadMethod]
  9. static void InTerra_InitializeTerrainDataLoading()
  10. {
  11. if (!InTerra_Setting.DisableAllAutoUpdates) EditorApplication.update += EditorUpdate;
  12. Undo.undoRedoPerformed += UndoChecks;
  13. SceneManager.sceneLoaded += OnSceneLoaded;
  14. CheckTerrain();
  15. }
  16. static void EditorUpdate()
  17. {
  18. if (!EditorApplication.isPlaying || EditorApplication.isPaused)
  19. {
  20. InTerra_Data.CheckAndUpdate();
  21. }
  22. }
  23. static void UndoChecks()
  24. {
  25. if (!InTerra_Data.CheckDefinedKeywords()) InTerra_Data.WriteDefinedKeywords();
  26. InTerra_Data.TerrainMaterialUpdate();
  27. InTerra_TerrainShaderGUI.restrictInit = false;
  28. }
  29. static void OnSceneLoaded(Scene scene, LoadSceneMode mode)
  30. {
  31. CheckTerrain();
  32. }
  33. static void CheckTerrain()
  34. {
  35. foreach (var terrain in Terrain.activeTerrains)
  36. {
  37. if (InTerra_Data.CheckTerrainShader(terrain.materialTemplate) && terrain.materialTemplate.IsKeywordEnabled("_LAYERS_EIGHT"))
  38. {
  39. GameObject terGO = terrain.transform.root.gameObject;
  40. if (!terGO.TryGetComponent<InTerra_TerrainData>(out var td))
  41. {
  42. terGO.AddComponent<InTerra_TerrainData>();
  43. }
  44. }
  45. }
  46. }
  47. }
  48. }