Files
KopMap/Assets/NatureManufacture Assets/WorldStreamer/Scritps/Editor/SceneCollectionManagerEditor.cs
2025-09-02 18:55:19 +08:00

112 lines
5.0 KiB
C#

using UnityEngine;
using UnityEditor;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEditor.SceneManagement;
namespace WorldStreamer2
{
[CustomEditor(typeof(SceneCollectionManager))]
class SceneCollectionManagerEditor : Editor
{
SerializedProperty activeProp;
SerializedProperty priorityProp;
SerializedProperty maxParallelSceneLoadingProp;
SerializedProperty loadingRangegProp;
SerializedProperty useLoadingRangeMinProp;
SerializedProperty deloadingRangeProp;
SerializedProperty loadingRangeMinProp;
SerializedProperty useUnloadRangeConnectProp;
SerializedProperty unloadRangeConnectProp;
void OnEnable()
{
// Fetch the objects from the GameObject script to display in the inspector
activeProp = serializedObject.FindProperty("active");
priorityProp = serializedObject.FindProperty("priority");
maxParallelSceneLoadingProp = serializedObject.FindProperty("maxParallelSceneLoading");
loadingRangegProp = serializedObject.FindProperty("loadingRange");
useLoadingRangeMinProp = serializedObject.FindProperty("useLoadingRangeMin");
deloadingRangeProp = serializedObject.FindProperty("deloadingRange");
loadingRangeMinProp = serializedObject.FindProperty("loadingRangeMin");
useUnloadRangeConnectProp = serializedObject.FindProperty("useUnloadRangeConnect");
unloadRangeConnectProp = serializedObject.FindProperty("unloadRangeConnect");
}
public override void OnInspectorGUI()
{
SceneCollectionManager myTarget = (SceneCollectionManager)target;
// DrawDefaultInspector();
EditorGUILayout.Space();
GUILayout.Label("Main", EditorStyles.boldLabel);
EditorGUI.BeginChangeCheck();
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
EditorGUILayout.PropertyField(activeProp, new GUIContent("Active"));
EditorGUILayout.PropertyField(priorityProp, new GUIContent("Priority", "Priority for streaming of scenes."));
EditorGUILayout.PropertyField(maxParallelSceneLoadingProp, new GUIContent("Max Parallel Scene Loading", "Amount of max grid elements that you want to start loading in one frame."));
EditorGUILayout.EndVertical();
EditorGUILayout.Space();
GUILayout.Label("Ranges", EditorStyles.boldLabel);
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
EditorGUILayout.PropertyField(loadingRangegProp, new GUIContent("Loading Range", "Distance in grid elements that you want hold loaded."));
EditorGUILayout.PropertyField(useLoadingRangeMinProp, new GUIContent("Use Loading Range Min", "Area that you want to cutout from loading range."));
if (useLoadingRangeMinProp.boolValue)
{
EditorGUI.indentLevel++;
EditorGUILayout.PropertyField(loadingRangeMinProp, new GUIContent("Loading Range Min", "Area that you want to cutout from loading range."));
EditorGUILayout.PropertyField(useUnloadRangeConnectProp, new GUIContent("Sync with other layer", "Enables ccene collection elements to unload when scene loaded."));
if (useUnloadRangeConnectProp.boolValue)
{
//EditorGUILayout.HelpBox("Sync with other layer may generate small lag when turned on.", MessageType.Warning, true);
EditorGUILayout.PropertyField(unloadRangeConnectProp, new GUIContent("Sync Layer", "Area that you want to cutout from loading range."));
}
EditorGUI.indentLevel--;
}
EditorGUILayout.PropertyField(deloadingRangeProp, new GUIContent("Deloading Range", "Distance in grid elements after which you want to unload assets."));
serializedObject.ApplyModifiedProperties();
EditorGUILayout.EndVertical();
if (EditorGUI.EndChangeCheck())
{
Undo.RegisterCompleteObjectUndo(myTarget, "UI change streamer collection");
Undo.FlushUndoRecordObjects();
if (!Application.isPlaying)
EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene());
}
bool warningCheckingEmpty = false;
if ((myTarget.loadingRange.x > 0 || myTarget.deloadingRange.x > 0) && !myTarget.xSplitIs)
warningCheckingEmpty = true;
if ((myTarget.loadingRange.y > 0 || myTarget.deloadingRange.y > 0) && !myTarget.ySplitIs)
warningCheckingEmpty = true;
if ((myTarget.loadingRange.z > 0 || myTarget.deloadingRange.z > 0) && !myTarget.zSplitIs)
warningCheckingEmpty = true;
if (warningCheckingEmpty)
EditorGUILayout.HelpBox("Loading Range for streaming is setup for axis that has tile size of 0", MessageType.Warning, true);
}
}
}