유니티 셋팅
This commit is contained in:
87
Assets/MeshBaker/Editor/propertyDrawers/MB_PaginatedList.cs
Normal file
87
Assets/MeshBaker/Editor/propertyDrawers/MB_PaginatedList.cs
Normal file
@@ -0,0 +1,87 @@
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
namespace DigitalOpus.MB.MBEditor
|
||||
{
|
||||
public class MB_PaginatedList
|
||||
{
|
||||
public static void GenerateObjectsToBeCombinedList(SerializedProperty objsToMesh, ref int currentPage, ref int objectsPerPage)
|
||||
{
|
||||
SerializedProperty arraySizeProp = objsToMesh.FindPropertyRelative("Array.size");
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
EditorGUILayout.LabelField("Size", GUILayout.Width(EditorGUIUtility.labelWidth));
|
||||
int newSize = EditorGUILayout.DelayedIntField(arraySizeProp.intValue);
|
||||
arraySizeProp.intValue = Mathf.Max(1, newSize);
|
||||
if (newSize <= 0 &&
|
||||
arraySizeProp.intValue == 1)
|
||||
{
|
||||
// This is necessary because the first element in the list gets preserved.
|
||||
// If the user sets the number of elements to 0 or less then we should
|
||||
// make the displayed first element == null
|
||||
SerializedProperty element = objsToMesh.GetArrayElementAtIndex(0);
|
||||
element.objectReferenceValue = null;
|
||||
}
|
||||
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
EditorGUILayout.LabelField("Objects per Page", GUILayout.Width(EditorGUIUtility.labelWidth));
|
||||
EditorGUI.BeginChangeCheck();
|
||||
int newObjectsPerPage = EditorGUILayout.DelayedIntField(objectsPerPage);
|
||||
if (EditorGUI.EndChangeCheck())
|
||||
{
|
||||
objectsPerPage = Mathf.Clamp(newObjectsPerPage, 10, 500);
|
||||
currentPage = 1;
|
||||
}
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
int totalObjects = objsToMesh.arraySize;
|
||||
int totalPages = totalObjects / objectsPerPage;
|
||||
if (totalObjects % objectsPerPage != 0)
|
||||
{
|
||||
totalPages++;
|
||||
}
|
||||
|
||||
if (totalPages == 0)
|
||||
{
|
||||
currentPage = 1;
|
||||
}
|
||||
else if (currentPage > totalPages)
|
||||
{
|
||||
currentPage = totalPages;
|
||||
}
|
||||
else if (currentPage < 1)
|
||||
{
|
||||
currentPage = 1;
|
||||
}
|
||||
|
||||
int startIndex = (currentPage - 1) * objectsPerPage;
|
||||
int endIndex = Mathf.Min(startIndex + objectsPerPage, totalObjects);
|
||||
for (int i = startIndex; i < endIndex; i++)
|
||||
{
|
||||
SerializedProperty objProp = objsToMesh.GetArrayElementAtIndex(i);
|
||||
EditorGUILayout.PropertyField(objProp, new GUIContent("Object " + (i + 1)));
|
||||
}
|
||||
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
GUI.enabled = currentPage > 1;
|
||||
if (GUILayout.Button("Previous"))
|
||||
{
|
||||
currentPage--;
|
||||
}
|
||||
bool prevGUIEnabled = GUI.enabled;
|
||||
GUI.enabled = true;
|
||||
GUIStyle centeredLabelStyle = new GUIStyle(EditorStyles.label);
|
||||
centeredLabelStyle.alignment = TextAnchor.MiddleCenter;
|
||||
EditorGUILayout.LabelField("Page " + currentPage + " of " + totalPages, centeredLabelStyle);
|
||||
GUI.enabled = prevGUIEnabled;
|
||||
GUI.enabled = currentPage < totalPages;
|
||||
if (GUILayout.Button("Next"))
|
||||
{
|
||||
currentPage++;
|
||||
}
|
||||
GUI.enabled = true;
|
||||
EditorGUILayout.EndHorizontal();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user