107 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			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;
 | |
| 		}
 | |
| 	}
 | |
| } |