NewN_UAVPlane/Assets/3rdParty/AVProVideo/Scripts/Editor/UpdateStereoMaterialEditor.cs

107 lines
3.0 KiB
C#

using UnityEngine;
using UnityEditor;
//-----------------------------------------------------------------------------
// Copyright 2015-2018 RenderHeads Ltd. All rights reserverd.
//-----------------------------------------------------------------------------
namespace RenderHeads.Media.AVProVideo.Editor
{
/// <summary>
/// Editor for UpdateStereoMaterial component
/// </summary>
[CanEditMultipleObjects]
[CustomEditor(typeof(UpdateStereoMaterial))]
public class UpdateStereoMaterialEditor : UnityEditor.Editor
{
private SerializedProperty _propCamera;
private SerializedProperty _propRenderer;
private SerializedProperty _propGraphic;
private SerializedProperty _propMaterial;
private SerializedProperty _propForceEyeMode;
void OnEnable()
{
_propCamera = serializedObject.FindProperty("_camera");
_propRenderer = serializedObject.FindProperty("_renderer");
_propGraphic = serializedObject.FindProperty("_uGuiComponent");
_propForceEyeMode = serializedObject.FindProperty("_forceEyeMode");
_propMaterial = serializedObject.FindProperty("_material");
}
public override void OnInspectorGUI()
{
serializedObject.Update();
if (_propCamera == null)
{
return;
}
EditorGUILayout.PropertyField(_propCamera);
if (_propCamera.objectReferenceValue == null)
{
if (Camera.main == null)
{
ShowNoticeBox(MessageType.Error, "No 'main' camera found in scene and no camera assigned.");
}
else
{
ShowNoticeBox(MessageType.Warning, "No camera assigned. Using 'main' camera: " + Camera.main.name);
}
}
if (DetectMultipleMainCameras())
{
ShowNoticeBox(MessageType.Warning, "Multiple 'main' cameras found in scene. Make sure the correct camera is assigned.");
}
EditorGUILayout.PropertyField(_propRenderer);
EditorGUILayout.PropertyField(_propGraphic);
EditorGUILayout.PropertyField(_propMaterial);
EditorGUILayout.PropertyField(_propForceEyeMode);
if (_propRenderer.objectReferenceValue == null && _propGraphic.objectReferenceValue == null && _propMaterial.objectReferenceValue == null)
{
ShowNoticeBox(MessageType.Error, "At least one of the renderers (MeshRenderer, uGUI Graphic or Material) need to be assigned.");
}
serializedObject.ApplyModifiedProperties();
}
private static void ShowNoticeBox(MessageType messageType, string message)
{
switch (messageType)
{
case MessageType.Error:
GUI.color = Color.red;
message = "Error: " + message;
break;
case MessageType.Warning:
GUI.color = Color.yellow;
message = "Warning: " + message;
break;
}
GUILayout.TextArea(message);
GUI.color = Color.white;
}
private static bool DetectMultipleMainCameras()
{
bool result = false;
if (Camera.main != null)
{
Camera[] cameras = Camera.allCameras;
foreach (Camera cam in cameras)
{
if (cam != Camera.main && cam.CompareTag("MainCamera"))
{
result = true;
break;
}
}
}
return result;
}
}
}