#if UNITY_EDITOR using UnityEngine; using UnityEditor; using System.Linq; using System.Collections; /** * Despite the MonoBehaviour inheritance, this is an Editor-only script. */ [ExecuteInEditMode] public class pg_SceneMeshRender : MonoBehaviour { // HideFlags.DontSaveInEditor isn't exposed for whatever reason, so do the bit math on ints // and just cast to HideFlags. // HideFlags.HideInHierarchy | HideFlags.DontSaveInEditor | HideFlags.NotEditable HideFlags SceneCameraHideFlags = (HideFlags) (1 | 4 | 8); public Mesh mesh; public Material material; void OnDestroy() { if(mesh) DestroyImmediate(mesh); if(material) DestroyImmediate(material); } void OnRenderObject() { // instead of relying on 'SceneCamera' string comparison, check if the hideflags match. // this could probably even just check for one bit match, since chances are that any // game view camera isn't going to have hideflags set. if( (Camera.current.gameObject.hideFlags & SceneCameraHideFlags) != SceneCameraHideFlags || Camera.current.name != "SceneCamera" ) return; if(material == null || mesh == null) { GameObject.DestroyImmediate(this.gameObject); // Debug.Log("NULL MESH || MATERIAL"); return; } material.SetPass(0); Graphics.DrawMeshNow(mesh, Vector3.zero, Quaternion.identity, 0); } } #endif