ict.lixian.three/Assets/Plugins/RenderHeads/AVProMovieCapture/Editor/Scripts/CaptureFromCameraEditor.cs

163 lines
5.3 KiB
C#

#if UNITY_EDITOR
#if !UNITY_2018_3_OR_NEWER
#define SUPPORT_SCENE_VIEW_GIZMOS_CAPTURE
#endif
using UnityEngine;
using UnityEditor;
//-----------------------------------------------------------------------------
// Copyright 2012-2022 RenderHeads Ltd. All rights reserved.
//-----------------------------------------------------------------------------
namespace RenderHeads.Media.AVProMovieCapture.Editor
{
[CanEditMultipleObjects]
[CustomEditor(typeof(CaptureFromCamera))]
public class CaptureFromCameraEditor : CaptureBaseEditor
{
//private CaptureFromCamera _capture;
private SerializedProperty _propCameraSelector;
private SerializedProperty _propLastCamera;
private SerializedProperty _propContribCameras;
private SerializedProperty _propUseContribCameras;
#if SUPPORT_SCENE_VIEW_GIZMOS_CAPTURE
private SerializedProperty _propIncludeSceneViewGizmos;
#endif
private SerializedProperty _propRenderResolution;
private SerializedProperty _propRenderSize;
private SerializedProperty _propAntiAliasing;
private static readonly GUIContent _guiItemCamera = new GUIContent("Camera", "The top level camera you want to capture");
private static readonly GUIContent _guiItemContribCamera = new GUIContent("Contributing Cameras", "Cameras in render order from first to last that contribute to the rendering of the main camera above");
protected override void OnEnable()
{
base.OnEnable();
//_capture = (this.target) as CaptureFromCamera;
_propCameraSelector = serializedObject.AssertFindProperty("_cameraSelector");
_propLastCamera = serializedObject.AssertFindProperty("_lastCamera");
_propContribCameras = serializedObject.AssertFindProperty("_contribCameras");
_propContribCameras.isExpanded = true;
_propUseContribCameras = serializedObject.AssertFindProperty("_useContributingCameras");
#if SUPPORT_SCENE_VIEW_GIZMOS_CAPTURE
_propIncludeSceneViewGizmos = serializedObject.AssertFindProperty("_includeSceneViewGizmos");
#endif
_propRenderResolution = serializedObject.AssertFindProperty("_renderResolution");
_propRenderSize = serializedObject.AssertFindProperty("_renderSize");
_propAntiAliasing = serializedObject.AssertFindProperty("_renderAntiAliasing");
}
protected void GUI_Camera()
{
Camera prevLastCamera = null, lastCamera = null;
EditorGUILayout.PropertyField(_propCameraSelector);
if (null == _propCameraSelector.objectReferenceValue)
{
prevLastCamera = (Camera)_propLastCamera.objectReferenceValue;
EditorGUILayout.PropertyField(_propLastCamera, _guiItemCamera);
lastCamera = (Camera)_propLastCamera.objectReferenceValue;
}
// If the user has changed the camera, reset the contributing cameras
if (lastCamera != prevLastCamera)
{
_propContribCameras.arraySize = 0;
if (lastCamera == null)
{
_propUseContribCameras.boolValue = false;
}
}
_propUseContribCameras.boolValue = EditorGUILayout.ToggleLeft("Use Contributing Cameras", _propUseContribCameras.boolValue);
if (lastCamera != null)
{
if (_propUseContribCameras.boolValue)
{
if (GUILayout.Button("Find Contributing Cameras", EditorStyles.miniButtonRight, GUILayout.ExpandWidth(false)))
{
bool hasContribCameras = false;
if (Utils.HasContributingCameras(lastCamera))
{
Camera[] cameras = Utils.FindContributingCameras(lastCamera);
if (cameras != null && cameras.Length > 0)
{
hasContribCameras = true;
_propContribCameras.arraySize = cameras.Length;
for (int slotIndex = 0; slotIndex < cameras.Length; slotIndex++)
{
_propContribCameras.GetArrayElementAtIndex(slotIndex).objectReferenceValue = cameras[slotIndex];
}
}
}
if (!hasContribCameras)
{
_propContribCameras.arraySize = 0;
_propUseContribCameras.boolValue = false;
}
}
EditorGUILayout.PropertyField(_propContribCameras, _guiItemContribCamera, true);
EditorGUILayout.Space();
}
}
EditorUtils.EnumAsDropdown("Resolution", _propRenderResolution, CaptureBaseEditor.ResolutionStrings);
if (_propRenderResolution.enumValueIndex == (int)CaptureBase.Resolution.Custom)
{
EditorGUILayout.PropertyField(_propRenderSize, new GUIContent("Size"));
_propRenderSize.vector2Value = new Vector2(Mathf.Clamp((int)_propRenderSize.vector2Value.x, 1, NativePlugin.MaxRenderWidth), Mathf.Clamp((int)_propRenderSize.vector2Value.y, 1, NativePlugin.MaxRenderHeight));
}
{
string currentAA = "None";
if (QualitySettings.antiAliasing > 1)
{
currentAA = QualitySettings.antiAliasing.ToString() + "x";
}
EditorUtils.IntAsDropdown("Anti-aliasing", _propAntiAliasing, new string[] { "Current (" + currentAA + ")", "None", "2x", "4x", "8x" }, new int[] { -1, 1, 2, 4, 8 });
}
#if SUPPORT_SCENE_VIEW_GIZMOS_CAPTURE
EditorGUILayout.PropertyField(_propIncludeSceneViewGizmos);
#endif
}
protected override void GUI_User()
{
if (_baseCapture != null && !_baseCapture.IsCapturing())
{
serializedObject.Update();
bool boolTrue = true;
EditorUtils.DrawSection("Capture From Camera", ref boolTrue, GUI_Camera);
if (serializedObject.ApplyModifiedProperties())
{
EditorUtility.SetDirty(target);
}
}
}
/*
public override void OnInspectorGUI()
{
GUI_Header();
GUI_BaseOptions();
}*/
}
}
#endif