| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- using UnityEditor;
- using UnityEngine;
- using UnityEngine.SceneManagement;
- namespace InTerra
- {
- public class InTerra_UpdateAndCheckInEditor : UnityEditor.AssetModificationProcessor
- {
- [InitializeOnLoadMethod]
- static void InTerra_InitializeTerrainDataLoading()
- {
- if (!InTerra_Setting.DisableAllAutoUpdates) EditorApplication.update += EditorUpdate;
- Undo.undoRedoPerformed += UndoChecks;
- SceneManager.sceneLoaded += OnSceneLoaded;
- CheckTerrain();
- }
- static void EditorUpdate()
- {
- if (!EditorApplication.isPlaying || EditorApplication.isPaused)
- {
- InTerra_Data.CheckAndUpdate();
- }
- }
- static void UndoChecks()
- {
- if (!InTerra_Data.CheckDefinedKeywords()) InTerra_Data.WriteDefinedKeywords();
- InTerra_Data.TerrainMaterialUpdate();
- InTerra_TerrainShaderGUI.restrictInit = false;
- }
- static void OnSceneLoaded(Scene scene, LoadSceneMode mode)
- {
- CheckTerrain();
- }
- static void CheckTerrain()
- {
- foreach (var terrain in Terrain.activeTerrains)
- {
- if (InTerra_Data.CheckTerrainShader(terrain.materialTemplate) && terrain.materialTemplate.IsKeywordEnabled("_LAYERS_EIGHT"))
- {
- GameObject terGO = terrain.transform.root.gameObject;
- if (!terGO.TryGetComponent<InTerra_TerrainData>(out var td))
- {
- terGO.AddComponent<InTerra_TerrainData>();
- }
- }
- }
- }
- }
- }
|