// Drive state from OnEnable and OnDisable? OnEnable on RegisterLodDataInput seems to get called on script reload void OnEnable() { // We don't run in "prefab scenes", i.e. when editing a prefab. Bail out if prefab scene is detected. #if UNITY_EDITOR if (PrefabStageUtility.GetCurrentPrefabStage() != null) { return; } #endif if (!_primaryLight && _searchForPrimaryLightOnStartup) { _primaryLight = RenderSettings.sun; } if (!VerifyRequirements()) { enabled = false; return; } #if UNITY_EDITOR if (EditorApplication.isPlaying && !Validate(this, ValidatedHelper.DebugLog)) { enabled = false; return; } #endif _isFirstUpdate = true; Instance = this; Scale = Mathf.Clamp(Scale, _minScale, _maxScale); _lodTransform = new LodTransform(); _lodTransform.InitLODData(_lodCount); // Resolution is 4 tiles across. var baseMeshDensity = _lodDataResolution * 0.25f / _geometryDownSampleFactor; // 0.4f is the "best" value when base mesh density is 8. Scaling down from there produces results similar to // hand crafted values which looked good when the ocean is flat. _lodAlphaBlackPointFade = 0.4f / (baseMeshDensity / 8f); // We could calculate this in the shader, but we can save two subtractions this way. _lodAlphaBlackPointWhitePointFade = 1f - _lodAlphaBlackPointFade - _lodAlphaBlackPointFade; Root = OceanBuilder.GenerateMesh(this, _oceanChunkRenderers, _lodDataResolution, _geometryDownSampleFactor, _lodCount); CreateDestroySubSystems(); _commandbufferBuilder = new BuildCommandBuffer(); InitViewpoint(); if (_attachDebugGUI && GetComponent <OceanDebugGUI>() == null) { gameObject.AddComponent <OceanDebugGUI>().hideFlags = HideFlags.DontSave; } #if UNITY_EDITOR EditorApplication.update -= EditorUpdate; EditorApplication.update += EditorUpdate; #endif foreach (var lodData in _lodDatas) { lodData.OnEnable(); } _canSkipCulling = false; }