version 2.5.0

This commit is contained in:
Sean Lu
2025-01-10 17:17:03 +08:00
parent ddc3c4c6d8
commit 2372c9429a
1086 changed files with 290974 additions and 77367 deletions

View File

@@ -0,0 +1,748 @@
// Copyright HTC Corporation All Rights Reserved.
using System.Collections.Generic;
using System.IO;
using UnityEditor;
using UnityEngine;
using VIVE.OpenXR.Toolkits.Spectator.Helper;
namespace VIVE.OpenXR.Toolkits.Spectator
{
/// <summary>
/// Name: SpectatorCameraManager.Editor.cs
/// Role: General script use in Unity Editor only
/// Responsibility: Display the SpectatorCameraManager.cs in Unity Inspector
/// </summary>
public partial class SpectatorCameraManager
{
[SerializeField] private Material spectatorCameraViewMaterial;
/// <summary>
/// Material that show the spectator camera view
/// </summary>
private Material SpectatorCameraViewMaterial
{
// get; private set;
get => spectatorCameraViewMaterial;
set
{
spectatorCameraViewMaterial = value;
if (SpectatorCameraBased && value)
{
SpectatorCameraBased.SpectatorCameraViewMaterial = value;
}
}
}
#if UNITY_EDITOR
[field: SerializeField] private bool IsShowHmdPart { get; set; }
[field: SerializeField] private bool IsShowTrackerPart { get; set; }
[field: SerializeField] private bool IsRequireLoadJsonFile { get; set; }
[CustomEditor(typeof(SpectatorCameraManager))]
public class SpectatorCameraManagerEditor : UnityEditor.Editor
{
private static readonly Color HighlightRegionBackgroundColor = new Color(.2f, .2f, .2f, .1f);
private SerializedProperty IsShowHmdPart { get; set; }
private SerializedProperty IsShowTrackerPart { get; set; }
private SerializedProperty IsRequireLoadJsonFile { get; set; }
private List<string> JsonFileList { get; set; }
private Vector2 JsonFileScrollViewVector { get; set; }
private SerializedProperty IsSmoothCameraMovement { get; set; }
private SerializedProperty SmoothCameraMovementSpeed { get; set; }
private SerializedProperty PanoramaResolution { get; set; }
private SerializedProperty PanoramaOutputFormat { get; set; }
private SerializedProperty PanoramaOutputType { get; set; }
private SerializedProperty SpectatorCameraPrefab { get; set; }
private void OnEnable()
{
IsShowHmdPart = serializedObject.FindProperty(EditorHelper.PropertyName("IsShowHmdPart"));
IsShowTrackerPart = serializedObject.FindProperty(EditorHelper.PropertyName("IsShowTrackerPart"));
IsRequireLoadJsonFile =
serializedObject.FindProperty(EditorHelper.PropertyName("IsRequireLoadJsonFile"));
JsonFileList = new List<string>();
JsonFileScrollViewVector = Vector2.zero;
IsSmoothCameraMovement =
serializedObject.FindProperty(EditorHelper.PropertyName("IsSmoothCameraMovement"));
SmoothCameraMovementSpeed =
serializedObject.FindProperty(EditorHelper.PropertyName("SmoothCameraMovementSpeed"));
PanoramaResolution = serializedObject.FindProperty(EditorHelper.PropertyName("PanoramaResolution"));
PanoramaOutputFormat = serializedObject.FindProperty(EditorHelper.PropertyName("PanoramaOutputFormat"));
PanoramaOutputType = serializedObject.FindProperty(EditorHelper.PropertyName("PanoramaOutputType"));
SpectatorCameraPrefab =
serializedObject.FindProperty(EditorHelper.PropertyName("SpectatorCameraPrefab"));
}
public override void OnInspectorGUI()
{
// Just return if not "SpectatorCameraManager" class
if (!(target is SpectatorCameraManager))
{
return;
}
serializedObject.Update();
DrawGUI();
serializedObject.ApplyModifiedProperties();
}
private void DrawGUI()
{
#region GUIStyle
var labelStyle = new GUIStyle()
{
richText = true,
alignment = TextAnchor.MiddleCenter,
normal = new GUIStyleState
{
textColor = EditorGUIUtility.isProSkin ? Color.green : Color.black
}
};
var resetButtonStyle = new GUIStyle(GUI.skin.button)
{
fontStyle = FontStyle.Bold,
normal = new GUIStyleState
{
textColor = EditorGUIUtility.isProSkin ? Color.yellow : Color.red
},
hover = new GUIStyleState
{
textColor = Color.red
},
active = new GUIStyleState
{
textColor = Color.cyan
},
};
var boldButtonStyle = new GUIStyle(GUI.skin.button)
{
fontStyle = FontStyle.Bold
};
#endregion
var script = (SpectatorCameraManager)target;
// Button for reset value
if (GUILayout.Button("Reset to default value", resetButtonStyle))
{
Undo.RecordObject(target, "Reset SpectatorCameraManager to default value");
EditorUtility.SetDirty(target);
script.ResetSetting();
}
// Button for export setting
if (GUILayout.Button("Export Spectator Camera HMD Setting", boldButtonStyle))
{
script.ExportSetting2JsonFile(SpectatorCameraHelper.AttributeFileLocation.ResourceFolder);
AssetDatabase.Refresh();
}
#region Load Setting From JSON File
GUILayout.BeginHorizontal();
EditorGUI.BeginDisabledGroup(IsRequireLoadJsonFile.boolValue);
if (GUILayout.Button("Load Setting From JSON File in Resources Folder", boldButtonStyle) ||
IsRequireLoadJsonFile.boolValue)
{
IsRequireLoadJsonFile.boolValue = true;
var searchPattern =
$"{SpectatorCameraHelper.ATTRIBUTE_FILE_PREFIX_NAME}*.{SpectatorCameraHelper.ATTRIBUTE_FILE_EXTENSION}";
if (JsonFileList == null)
{
JsonFileList = new List<string>();
}
JsonFileList.Clear();
var dir = new DirectoryInfo(Path.Combine(Application.dataPath, "Resources"));
var files = dir.GetFiles(searchPattern);
foreach (var item in files)
{
JsonFileList.Add(item.Name);
}
if (JsonFileList.Count == 0)
{
Debug.Log(
"Can't find any JSON file related to the spectator camera setting in the Resources folder.");
IsRequireLoadJsonFile.boolValue = false;
}
}
EditorGUI.EndDisabledGroup();
if (IsRequireLoadJsonFile.boolValue)
{
if (GUILayout.Button("Cancel"))
{
IsRequireLoadJsonFile.boolValue = false;
}
}
GUILayout.EndHorizontal();
if (IsRequireLoadJsonFile.boolValue)
{
Rect r = EditorGUILayout.BeginVertical();
JsonFileScrollViewVector = EditorGUILayout.BeginScrollView(JsonFileScrollViewVector,
GUILayout.Width(r.width),
GUILayout.Height(80));
for (int i = 0; i < JsonFileList.Count; i++)
{
if (GUILayout.Button(JsonFileList[i]))
{
var path = Path.Combine(
System.IO.Path.Combine(Application.dataPath, "Resources"),
JsonFileList[i]);
Undo.RecordObject(target, $"Load {JsonFileList[i]} setting to {target.name} SpectatorCameraManager");
EditorUtility.SetDirty(target);
script.LoadSettingFromJsonFile(path);
}
}
EditorGUILayout.EndScrollView();
EditorGUILayout.EndVertical();
}
#endregion
EditorGUILayout.LabelField("\n");
// Spectator camera prefab
EditorGUILayout.PropertyField(SpectatorCameraPrefab, new GUIContent("Spectator Camera Prefab"));
if (SpectatorCameraPrefab.objectReferenceValue != null &&
PrefabUtility.GetPrefabAssetType(SpectatorCameraPrefab.objectReferenceValue) ==
PrefabAssetType.NotAPrefab)
{
// The assign object is scene object
Debug.Log("Please assign the object as prefab only.");
SpectatorCameraPrefab.objectReferenceValue = null;
}
EditorGUILayout.LabelField("\n");
EditorGUILayout.LabelField("<b>[ General Setting ]</b>", labelStyle);
// Setting of spectator camera reference source
// EditorGUILayout.PropertyField(CameraSourceRef, new GUIContent("Camera Source"));
EditorGUI.BeginChangeCheck();
var currentCameraSourceRef = (SpectatorCameraHelper.CameraSourceRef)
EditorGUILayout.EnumPopup("Camera Source", script.CameraSourceRef);
if (EditorGUI.EndChangeCheck())
{
Undo.RecordObject(target, "Modified SpectatorCameraManager CameraSourceRef");
EditorUtility.SetDirty(target);
script.CameraSourceRef = currentCameraSourceRef;
}
#region Tracker Region
if (script.CameraSourceRef == SpectatorCameraHelper.CameraSourceRef.Tracker)
{
EditorGUI.BeginChangeCheck();
var currentFollowSpectatorCameraTracker = EditorGUILayout.ObjectField(
"Tracker",
script.FollowSpectatorCameraTracker,
typeof(SpectatorCameraTracker),
true) as SpectatorCameraTracker;
if (EditorGUI.EndChangeCheck())
{
Undo.RecordObject(target, "Modified SpectatorCameraManager FollowSpectatorCameraTracker");
EditorUtility.SetDirty(target);
script.FollowSpectatorCameraTracker = currentFollowSpectatorCameraTracker;
}
if (script.FollowSpectatorCameraTracker == null)
{
// The assign object is null
EditorGUILayout.HelpBox("Please assign the SpectatorCameraTracker", MessageType.Info, false);
}
else if (PrefabUtility.GetPrefabAssetType(script.FollowSpectatorCameraTracker) !=
PrefabAssetType.NotAPrefab)
{
// Don't allow assign object is prefab
Debug.Log("Please assign the scene object.");
script.FollowSpectatorCameraTracker = null;
}
else
{
// The assign object is scene object => ok
EditorGUILayout.LabelField("\n");
IsShowTrackerPart.boolValue =
EditorGUILayout.Foldout(IsShowTrackerPart.boolValue, "Tracker Setting");
if (IsShowTrackerPart.boolValue)
{
// If show the tracker setting
Rect r = EditorGUILayout.BeginVertical();
SpectatorCameraTracker trackerObject = script.FollowSpectatorCameraTracker;
if (trackerObject != null)
{
EditorGUILayout.HelpBox(
$"You are now editing the tracker setting in \"{trackerObject.gameObject.name}\" GameObject",
MessageType.Info,
true);
EditorGUI.BeginChangeCheck();
var currentTrackerObjectLayerMask =
LayerMaskHelper.LayerMaskDrawer.LayerMaskField("Camera Layer Mask",
trackerObject.LayerMask);
if (EditorGUI.EndChangeCheck())
{
Undo.RecordObject(trackerObject, $"Modified {trackerObject.name} LayerMask");
EditorUtility.SetDirty(trackerObject);
trackerObject.LayerMask = currentTrackerObjectLayerMask;
}
EditorGUI.BeginChangeCheck();
var currentTrackerObjectIsSmoothCameraMovement=
EditorGUILayout.Toggle("Enable Smoothing Camera Movement",
trackerObject.IsSmoothCameraMovement);
if (EditorGUI.EndChangeCheck())
{
Undo.RecordObject(trackerObject, $"Modified {trackerObject.name} IsSmoothCameraMovement");
EditorUtility.SetDirty(trackerObject);
trackerObject.IsSmoothCameraMovement = currentTrackerObjectIsSmoothCameraMovement;
}
if (trackerObject.IsSmoothCameraMovement)
{
EditorGUILayout.LabelField("\n");
EditorGUILayout.LabelField("<b>[ Smooth Camera Movement Speed Setting ]</b>",
labelStyle);
EditorGUI.BeginChangeCheck();
var currentTrackerObjectSmoothCameraMovementSpeed =
EditorGUILayout.IntSlider(
new GUIContent("Speed of Smoothing Camera Movement"),
trackerObject.SmoothCameraMovementSpeed,
SpectatorCameraHelper.SMOOTH_CAMERA_MOVEMENT_MIN,
SpectatorCameraHelper.SMOOTH_CAMERA_MOVEMENT_MAX);
if (EditorGUI.EndChangeCheck())
{
Undo.RecordObject(trackerObject, $"Modified {trackerObject.name} SmoothCameraMovementSpeed");
EditorUtility.SetDirty(trackerObject);
trackerObject.SmoothCameraMovementSpeed = currentTrackerObjectSmoothCameraMovementSpeed;
}
EditorGUILayout.LabelField("\n");
}
EditorGUI.BeginChangeCheck();
// Spectator camera frustum show/hide
var currentTrackerObjectIsFrustumShowed =
EditorGUILayout.Toggle("Enable Camera FOV Frustum", trackerObject.IsFrustumShowed);
if (EditorGUI.EndChangeCheck())
{
Undo.RecordObject(trackerObject, $"Modified {trackerObject.name} IsFrustumShowed");
EditorUtility.SetDirty(trackerObject);
trackerObject.IsFrustumShowed = currentTrackerObjectIsFrustumShowed;
}
EditorGUILayout.LabelField("\n");
#region VerticalFov
EditorGUILayout.LabelField("<b>[ Vertical FOV Setting ]</b>", labelStyle);
EditorGUI.BeginChangeCheck();
var currentTrackerObjectVerticalFov = EditorGUILayout.Slider(
"Vertical FOV",
trackerObject.VerticalFov,
SpectatorCameraHelper.VERTICAL_FOV_MIN,
SpectatorCameraHelper.VERTICAL_FOV_MAX);
if (EditorGUI.EndChangeCheck())
{
Undo.RecordObject(trackerObject, $"Modified {trackerObject.name} VerticalFov");
EditorUtility.SetDirty(trackerObject);
trackerObject.VerticalFov = currentTrackerObjectVerticalFov;
}
#endregion
EditorGUILayout.LabelField("\n");
#region Setting related to panorama capturing of spectator camera
// Panorama resolution
EditorGUILayout.LabelField("<b>[ Panorama Setting ]</b>", labelStyle);
EditorGUI.BeginChangeCheck();
// Panorama output resolution
var currentTrackerObjectPanoramaResolution =
(SpectatorCameraHelper.SpectatorCameraPanoramaResolution)
EditorGUILayout.EnumPopup("Resolution", trackerObject.PanoramaResolution);
if (EditorGUI.EndChangeCheck())
{
Undo.RecordObject(trackerObject, $"Modified {trackerObject.name} PanoramaResolution");
EditorUtility.SetDirty(trackerObject);
trackerObject.PanoramaResolution = currentTrackerObjectPanoramaResolution;
}
EditorGUI.BeginChangeCheck();
// Panorama output format
var currentTrackerObjectPanoramaOutputFormat = (TextureProcessHelper.PictureOutputFormat)
EditorGUILayout.EnumPopup("Output Format", trackerObject.PanoramaOutputFormat);
if (EditorGUI.EndChangeCheck())
{
Undo.RecordObject(trackerObject, $"Modified {trackerObject.name} PanoramaOutputFormat");
EditorUtility.SetDirty(trackerObject);
trackerObject.PanoramaOutputFormat = currentTrackerObjectPanoramaOutputFormat;
}
EditorGUI.BeginChangeCheck();
// Panorama output type
var currentTrackerObjectPanoramaOutputType = (TextureProcessHelper.PanoramaType)
EditorGUILayout.EnumPopup("Output Type", trackerObject.PanoramaOutputType);
if (EditorGUI.EndChangeCheck())
{
Undo.RecordObject(trackerObject, $"Modified {trackerObject.name} PanoramaOutputType");
EditorUtility.SetDirty(trackerObject);
trackerObject.PanoramaOutputType = currentTrackerObjectPanoramaOutputType;
}
#endregion
EditorGUILayout.LabelField("\n");
#region Setting related to frustum
if (trackerObject.IsFrustumShowed)
{
EditorGUILayout.LabelField("<b>[ Frustum Setting ]</b>",
labelStyle);
#region Count of frustum and frustum center line
EditorGUI.BeginChangeCheck();
var currentTrackerObjectFrustumLineCount = (SpectatorCameraHelper.FrustumLineCount)
EditorGUILayout.EnumPopup("Frustum Line Total", trackerObject.FrustumLineCount);
if (EditorGUI.EndChangeCheck())
{
Undo.RecordObject(trackerObject, $"Modified {trackerObject.name} FrustumLineCount");
EditorUtility.SetDirty(trackerObject);
trackerObject.FrustumLineCount = currentTrackerObjectFrustumLineCount;
}
EditorGUI.BeginChangeCheck();
var currentTrackerObjectFrustumCenterLineCount =
(SpectatorCameraHelper.FrustumCenterLineCount)
EditorGUILayout.EnumPopup("Frustum Center Line Total",
trackerObject.FrustumCenterLineCount);
if (EditorGUI.EndChangeCheck())
{
Undo.RecordObject(trackerObject, $"Modified {trackerObject.name} FrustumCenterLineCount");
EditorUtility.SetDirty(trackerObject);
trackerObject.FrustumCenterLineCount = currentTrackerObjectFrustumCenterLineCount;
}
#endregion
EditorGUILayout.LabelField("\n");
#region Width of frustum and frustum center line
EditorGUI.BeginChangeCheck();
var currentTrackerObjectFrustumLineWidth =
EditorGUILayout.Slider(
"Frustum Line Width",
trackerObject.FrustumLineWidth,
SpectatorCameraHelper.FRUSTUM_LINE_WIDTH_MIN,
SpectatorCameraHelper.FRUSTUM_LINE_WIDTH_MAX);
if (EditorGUI.EndChangeCheck())
{
Undo.RecordObject(trackerObject, $"Modified {trackerObject.name} FrustumLineWidth");
EditorUtility.SetDirty(trackerObject);
trackerObject.FrustumLineWidth = currentTrackerObjectFrustumLineWidth;
}
EditorGUI.BeginChangeCheck();
var currentTrackerObjectFrustumCenterLineWidth =
EditorGUILayout.Slider(
"Frustum Center Line Width",
trackerObject.FrustumCenterLineWidth,
SpectatorCameraHelper.FRUSTUM_CENTER_LINE_WIDTH_MIN,
SpectatorCameraHelper.FRUSTUM_CENTER_LINE_WIDTH_MAX);
if (EditorGUI.EndChangeCheck())
{
Undo.RecordObject(trackerObject, $"Modified {trackerObject.name} FrustumCenterLineWidth");
EditorUtility.SetDirty(trackerObject);
trackerObject.FrustumCenterLineWidth = currentTrackerObjectFrustumCenterLineWidth;
}
#endregion
EditorGUILayout.LabelField("\n");
#region Material of frustum and frustum center line
EditorGUI.BeginChangeCheck();
var currentTrackerObjectFrustumLineColor = EditorGUILayout.ColorField(
"Frustum Line Color", trackerObject.FrustumLineColor);
if (EditorGUI.EndChangeCheck())
{
Undo.RecordObject(trackerObject, $"Modified {trackerObject.name} FrustumLineColor");
EditorUtility.SetDirty(trackerObject);
trackerObject.FrustumLineColor = currentTrackerObjectFrustumLineColor;
}
EditorGUI.BeginChangeCheck();
var currentTrackerObjectFrustumCenterLineColor = EditorGUILayout.ColorField(
"Frustum Center Line Color",
trackerObject.FrustumCenterLineColor);
if (EditorGUI.EndChangeCheck())
{
Undo.RecordObject(trackerObject, $"Modified {trackerObject.name} FrustumCenterLineColor");
EditorUtility.SetDirty(trackerObject);
trackerObject.FrustumCenterLineColor = currentTrackerObjectFrustumCenterLineColor;
}
#endregion
}
#endregion
EditorGUILayout.EndVertical();
r = new Rect(r.x, r.y, r.width, r.height);
EditorGUI.DrawRect(r, HighlightRegionBackgroundColor);
EditorGUILayout.LabelField("\n");
}
}
}
}
#endregion
#region HMD Region
IsShowHmdPart.boolValue = EditorGUILayout.Foldout(IsShowHmdPart.boolValue, "HMD Setting");
if (IsShowHmdPart.boolValue)
{
Rect r = EditorGUILayout.BeginVertical();
EditorGUI.BeginChangeCheck();
// Setting of spectator camera layer mask
var currentLayerMask =
LayerMaskHelper.LayerMaskDrawer.LayerMaskField("Camera Layer Mask", script.LayerMask);
if (EditorGUI.EndChangeCheck())
{
Undo.RecordObject(target, "Modified SpectatorCameraManager LayerMask");
EditorUtility.SetDirty(target);
script.LayerMask = currentLayerMask;
}
// Setting of smooth spectator camera movement
EditorGUILayout.PropertyField(IsSmoothCameraMovement,
new GUIContent("Enable Smoothing Camera Movement"));
if (IsSmoothCameraMovement.boolValue)
{
EditorGUILayout.LabelField("\n");
EditorGUILayout.LabelField("<b>[ Smooth Camera Movement Speed Setting ]</b>", labelStyle);
// Setting of smooth spectator camera movement speed
EditorGUILayout.IntSlider(
SmoothCameraMovementSpeed,
SpectatorCameraHelper.SMOOTH_CAMERA_MOVEMENT_MIN,
SpectatorCameraHelper.SMOOTH_CAMERA_MOVEMENT_MAX,
"Speed of Smoothing Camera Movement");
EditorGUILayout.LabelField("\n");
}
EditorGUI.BeginChangeCheck();
// Spectator camera frustum show/hide
var currentIsFrustumShowed =
EditorGUILayout.Toggle("Enable Camera FOV Frustum", script.IsFrustumShowed);
if (EditorGUI.EndChangeCheck())
{
Undo.RecordObject(target, "Modified SpectatorCameraManager IsFrustumShowed");
EditorUtility.SetDirty(target);
script.IsFrustumShowed = currentIsFrustumShowed;
}
EditorGUILayout.LabelField("\n");
#region VerticalFov
EditorGUILayout.LabelField("<b>[ Vertical FOV Setting ]</b>", labelStyle);
EditorGUI.BeginChangeCheck();
// FOV
var currentVerticalFov = EditorGUILayout.Slider(
"Vertical FOV",
script.VerticalFov,
SpectatorCameraHelper.VERTICAL_FOV_MIN,
SpectatorCameraHelper.VERTICAL_FOV_MAX);
if (EditorGUI.EndChangeCheck())
{
Undo.RecordObject(target, "Modified SpectatorCameraManager VerticalFov");
EditorUtility.SetDirty(target);
script.VerticalFov = currentVerticalFov;
}
#endregion
EditorGUILayout.LabelField("\n");
#region Setting related to panorama capturing of spectator camera
// Panorama resolution
EditorGUILayout.LabelField("<b>[ Panorama Setting ]</b>", labelStyle);
EditorGUILayout.PropertyField(PanoramaResolution, new GUIContent("Resolution"));
// Panorama output format
EditorGUILayout.PropertyField(PanoramaOutputFormat, new GUIContent("Output Format"));
// Panorama output type
EditorGUILayout.PropertyField(PanoramaOutputType, new GUIContent("Output Type"));
#endregion
#region Setting related to frustum
if (script.IsFrustumShowed)
{
EditorGUILayout.LabelField("\n");
EditorGUILayout.LabelField("<b>[ Frustum Setting ]</b>", labelStyle);
EditorGUI.BeginChangeCheck();
// Count of frustum line
var currentFrustumLineCount = (SpectatorCameraHelper.FrustumLineCount)
EditorGUILayout.EnumPopup("Frustum Line Total", script.FrustumLineCount);
if (EditorGUI.EndChangeCheck())
{
Undo.RecordObject(target, "Modified SpectatorCameraManager FrustumLineCount");
EditorUtility.SetDirty(target);
script.FrustumLineCount = currentFrustumLineCount;
}
EditorGUI.BeginChangeCheck();
// Count of frustum center line
var currentFrustumCenterLineCount = (SpectatorCameraHelper.FrustumCenterLineCount)
EditorGUILayout.EnumPopup("Frustum Center Line Total", script.FrustumCenterLineCount);
if (EditorGUI.EndChangeCheck())
{
Undo.RecordObject(target, "Modified SpectatorCameraManager FrustumCenterLineCount");
EditorUtility.SetDirty(target);
script.FrustumCenterLineCount = currentFrustumCenterLineCount;
}
EditorGUILayout.LabelField("\n");
EditorGUI.BeginChangeCheck();
// Width of frustum line
var currentFrustumLineWidth =
EditorGUILayout.Slider(
"Frustum Line Width",
script.FrustumLineWidth,
SpectatorCameraHelper.FRUSTUM_LINE_WIDTH_MIN,
SpectatorCameraHelper.FRUSTUM_LINE_WIDTH_MAX);
if (EditorGUI.EndChangeCheck())
{
Undo.RecordObject(target, "Modified SpectatorCameraManager FrustumLineWidth");
EditorUtility.SetDirty(target);
script.FrustumLineWidth = currentFrustumLineWidth;
}
EditorGUI.BeginChangeCheck();
// Width of frustum center line
var currentFrustumCenterLineWidth =
EditorGUILayout.Slider(
"Frustum Center Line Width",
script.FrustumCenterLineWidth,
SpectatorCameraHelper.FRUSTUM_CENTER_LINE_WIDTH_MIN,
SpectatorCameraHelper.FRUSTUM_CENTER_LINE_WIDTH_MAX);
if (EditorGUI.EndChangeCheck())
{
Undo.RecordObject(target, "Modified SpectatorCameraManager FrustumCenterLineWidth");
EditorUtility.SetDirty(target);
script.FrustumCenterLineWidth = currentFrustumCenterLineWidth;
}
EditorGUILayout.LabelField("\n");
EditorGUI.BeginChangeCheck();
// Color of frustum line
var currentFrustumLineColor = EditorGUILayout.ColorField(
"Frustum Line Color", script.FrustumLineColor);
if (EditorGUI.EndChangeCheck())
{
Undo.RecordObject(target, "Modified SpectatorCameraManager FrustumLineColor");
EditorUtility.SetDirty(target);
script.FrustumLineColor = currentFrustumLineColor;
}
EditorGUI.BeginChangeCheck();
// Color of frustum center line
var currentFrustumCenterLineColor = EditorGUILayout.ColorField(
"Frustum Center Line Color",
script.FrustumCenterLineColor);
if (EditorGUI.EndChangeCheck())
{
Undo.RecordObject(target, "Modified SpectatorCameraManager FrustumCenterLineColor");
EditorUtility.SetDirty(target);
script.FrustumCenterLineColor = currentFrustumCenterLineColor;
}
}
#endregion
EditorGUILayout.EndVertical();
r = new Rect(r.x, r.y, r.width, r.height);
EditorGUI.DrawRect(r, HighlightRegionBackgroundColor);
}
#endregion
EditorGUILayout.LabelField("\n");
#region Test 360 Output
EditorGUILayout.LabelField("<b>[ Debug Setting ]</b>", labelStyle);
EditorGUI.BeginChangeCheck();
var currentSpectatorCameraViewMaterial = EditorGUILayout.ObjectField(
"Spectator Camera View Material",
script.SpectatorCameraViewMaterial,
typeof(Material),
false) as Material;
if (EditorGUI.EndChangeCheck())
{
Undo.RecordObject(target, "Modified SpectatorCameraManager SpectatorCameraViewMaterial");
EditorUtility.SetDirty(target);
script.SpectatorCameraViewMaterial = currentSpectatorCameraViewMaterial;
}
EditorGUILayout.HelpBox("Test - Output 360 photo", MessageType.Info, true);
if (GUILayout.Button("Test - Output 360 photo"))
{
script.CaptureSpectatorCamera360Photo();
}
#endregion
}
}
#endif
}
}