using System; using uc; using UnityEditor; using UnityEngine; [CustomEditor(typeof(FMCRControl))] [CanEditMultipleObjects] public class MeshFilterPreview : Editor { private PreviewRenderUtility _previewRenderUtility; SerializedProperty composerSettings; SerializedProperty transposerSettings; private void OnEnable() { composerSettings = serializedObject.FindProperty("composerSettings"); transposerSettings = serializedObject.FindProperty("transposerSettings"); } private Editor _editor; public override void OnInspectorGUI() { serializedObject.Update(); DrawDefaultInspector(); serializedObject.ApplyModifiedProperties(); FMCRControl fmcr = target as FMCRControl; if (fmcr == null) return; CreateCachedEditor(composerSettings.objectReferenceValue, null, ref _editor); if (_editor != null) { EditorGUILayout.Separator(); EditorGUILayout.BeginVertical("Box"); EditorGUILayout.LabelField(composerSettings.displayName, EditorStyles.boldLabel); _editor.OnInspectorGUI(); EditorGUILayout.EndVertical(); } CreateCachedEditor(transposerSettings.objectReferenceValue, null, ref _editor); if (_editor != null) { EditorGUILayout.Separator(); EditorGUILayout.BeginVertical("Box"); EditorGUILayout.LabelField(transposerSettings.displayName, EditorStyles.boldLabel); _editor.OnInspectorGUI(); EditorGUILayout.EndVertical(); } } private void ValidateData() { if (_previewRenderUtility == null) _previewRenderUtility = new PreviewRenderUtility(true); } public override bool HasPreviewGUI() { FMCRControl fmcrControl = target as FMCRControl; ValidateData(); return fmcrControl.FMCR != null; } public override bool RequiresConstantRepaint() { if (Application.isPlaying == true) return false; else return true; } public override void OnPreviewGUI(Rect r, GUIStyle background) { FMCRControl fmcrControl = target as FMCRControl; if (fmcrControl == null || fmcrControl.FMCR == null || fmcrControl.FMCR.FMCRCamera == null) return; if (Event.current.type == EventType.Repaint) { _previewRenderUtility.BeginPreview(fmcrControl.FMCR.FMCRCamera.pixelRect, background); _previewRenderUtility.camera.transform.position = fmcrControl.vCamPosition; _previewRenderUtility.camera.transform.rotation = fmcrControl.vCamRotation; _previewRenderUtility.camera.fieldOfView = fmcrControl.fieldOfView; _previewRenderUtility.camera.nearClipPlane = fmcrControl.nearClipPlane; _previewRenderUtility.camera.farClipPlane = fmcrControl.farClipPlane; _previewRenderUtility.camera.aspect = fmcrControl.FMCR.FMCRCamera.aspect; _previewRenderUtility.camera.Render(); Texture resultRender = _previewRenderUtility.EndPreview(); Camera cam = _previewRenderUtility.camera; Rect rr = cam.pixelRect.FitIntoRect(r); GUI.DrawTexture(rr, resultRender); fmcrControl.DrawComposerGUI(cam, rr); } if (Event.current.type == EventType.Layout) { //Debug.Log("Layout"); } } void OnDestroy() { if (_previewRenderUtility != null) _previewRenderUtility.Cleanup(); } [DrawGizmo(GizmoType.Selected | GizmoType.NonSelected)] static void DrawGizmo_FMCRControl(FMCRControl scr, GizmoType gizmoType) { Vector3 position = scr.transform.position; Matrix4x4 m = Gizmos.matrix; Gizmos.matrix = Matrix4x4.TRS(scr.vCamPosition, scr.vCamRotation, Vector3.one); Color hex_color; if (ColorUtility.TryParseHtmlString("#633F5B", out hex_color)) { Gizmos.color = hex_color; Gizmos.DrawFrustum(new Vector3(0, 0, scr.nearClipPlane), scr.fieldOfView, scr.farClipPlane, scr.nearClipPlane, scr.CurrentAspect); } Gizmos.matrix = m; } [DrawGizmo(GizmoType.Pickable)] static void DrawGizmo_FreeMotionCameraRig(FreeMotionCameraRig scr, GizmoType gizmoType) { } }