version 2.5.0
This commit is contained in:
@@ -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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user