void OnEnable() { if (m_Material == null) { #if UNITY_EDITOR var hdrp = HDRenderPipeline.defaultAsset; m_Material = hdrp != null?hdrp.GetDefaultDecalMaterial() : null; #else m_Material = null; #endif } if (m_Handle != null) { DecalSystem.instance.RemoveDecal(m_Handle); m_Handle = null; } Matrix4x4 sizeOffset = Matrix4x4.Translate(decalOffset) * Matrix4x4.Scale(decalSize); m_Handle = DecalSystem.instance.AddDecal(position, rotation, Vector3.one, sizeOffset, m_DrawDistance, m_FadeScale, uvScaleBias, m_AffectsTransparency, m_Material, gameObject.layer, m_FadeFactor); m_OldMaterial = m_Material; #if UNITY_EDITOR m_Layer = gameObject.layer; // Handle scene visibility UnityEditor.SceneVisibilityManager.visibilityChanged += UpdateDecalVisibility; #endif }
internal void OnValidate() { if (m_Handle != null) // don't do anything if OnEnable hasn't been called yet when scene is loading. { Matrix4x4 sizeOffset = Matrix4x4.Translate(decalOffset) * Matrix4x4.Scale(decalSize); // handle material changes, because decals are stored as sets sorted by material, if material changes decal needs to be removed and re-added to that it goes into correct set if (m_OldMaterial != m_Material) { DecalSystem.instance.RemoveDecal(m_Handle); m_Handle = DecalSystem.instance.AddDecal(position, rotation, Vector3.one, sizeOffset, m_DrawDistance, m_FadeScale, uvScaleBias, m_AffectsTransparency, m_Material, gameObject.layer, m_FadeFactor); m_OldMaterial = m_Material; if (!DecalSystem.IsHDRenderPipelineDecal(m_Material.shader)) // non HDRP/decal shaders such as shader graph decal do not affect transparency { m_AffectsTransparency = false; } // notify the editor that material has changed so it can update the shader foldout if (OnMaterialChange != null) { OnMaterialChange(); } } else // no material change, just update whatever else changed { DecalSystem.instance.UpdateCachedData(position, rotation, sizeOffset, m_DrawDistance, m_FadeScale, uvScaleBias, m_AffectsTransparency, m_Handle, gameObject.layer, m_FadeFactor); } } }
void OnDisable() { if (m_Handle != null) { DecalSystem.instance.RemoveDecal(m_Handle); m_Handle = null; } }
void OnDisable() { if (m_Handle != null) { DecalSystem.instance.RemoveDecal(m_Handle); m_Handle = null; } #if UNITY_EDITOR UnityEditor.SceneVisibilityManager.visibilityChanged -= UpdateDecalVisibility; #endif }
void UpdateDecalVisibility() { // Fade out the decal when it is hidden by the scene visibility if (UnityEditor.SceneVisibilityManager.instance.IsHidden(gameObject) && m_Handle != null) { DecalSystem.instance.RemoveDecal(m_Handle); m_Handle = null; } else if (m_Handle == null) { Matrix4x4 sizeOffset = Matrix4x4.Translate(decalOffset) * Matrix4x4.Scale(decalSize); m_Handle = DecalSystem.instance.AddDecal(position, rotation, Vector3.one, sizeOffset, m_DrawDistance, m_FadeScale, uvScaleBias, m_AffectsTransparency, m_Material, gameObject.layer, m_FadeFactor); } }
void OnEnable() { InitMaterial(); if (m_Handle != null) { DecalSystem.instance.RemoveDecal(m_Handle); m_Handle = null; } Matrix4x4 sizeOffset = Matrix4x4.Translate(decalOffset) * Matrix4x4.Scale(decalSize); m_Handle = DecalSystem.instance.AddDecal(position, rotation, Vector3.one, sizeOffset, m_DrawDistance, m_FadeScale, uvScaleBias, m_AffectsTransparency, m_Material, gameObject.layer, gameObject.sceneCullingMask, m_FadeFactor); m_OldMaterial = m_Material; #if UNITY_EDITOR m_Layer = gameObject.layer; // Handle scene visibility UnityEditor.SceneVisibilityManager.visibilityChanged += UpdateDecalVisibility; #endif }
void OnEnable() { if (m_Material == null) { #if UNITY_EDITOR var hdrp = HDRenderPipeline.defaultAsset; m_Material = hdrp != null?hdrp.GetDefaultDecalMaterial() : null; #else m_Material = null; #endif } if (m_Handle != null) { DecalSystem.instance.RemoveDecal(m_Handle); m_Handle = null; } Matrix4x4 sizeOffset = Matrix4x4.Translate(decalOffset) * Matrix4x4.Scale(decalSize); m_Handle = DecalSystem.instance.AddDecal(position, rotation, Vector3.one, sizeOffset, m_DrawDistance, m_FadeScale, uvScaleBias, m_AffectsTransparency, m_Material, gameObject.layer, m_FadeFactor); }