using System; using UnityEngine; [ExecuteInEditMode] public class TestSceneViewShaderHelper : MonoBehaviour { #if UNITY_EDITOR private int _isSceneViewID = Shader.PropertyToID("_IsSceneView"); public void OnEnable() { Camera.onPreRender += SetIfSceneViewCamera; } public void OnDisable() { Camera.onPreRender -= SetIfSceneViewCamera; } public void SetIfSceneViewCamera(Camera cam) { // Scene View camera is named "SceneCamera" if (cam.gameObject.name == "SceneCamera") { Shader.EnableKeyword("SCENE_VIEW"); Shader.SetGlobalFloat(_isSceneViewID, 1f); } // Inspector preview for materials, models, and prefabs is named "Preview Scene Camera" // else if (cam.gameObject.name == "Preview Scene Camera") // { // Shader.EnableKeyword("SCENE_VIEW"); // Shader.SetGlobalFloat(_isSceneViewID, 2f); // } // Otherwise this is a game view or other user camera else { Shader.DisableKeyword("SCENE_VIEW"); Shader.SetGlobalFloat(_isSceneViewID, 0f); } // You can double check the camera names if something breaks in the future // Debug.Log(cam); } #endif }