Streamingle_URP/Assets/External/VRM10/Editor/Components/FirstPerson/RendererFirstPersonFlagsDrawer.cs

60 lines
2.2 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEditor;
using UnityEngine;
namespace UniVRM10
{
[CustomPropertyDrawer(typeof(RendererFirstPersonFlags))]
public class RendererFirstPersonFlagsDrawer : PropertyDrawer
{
static Rect LeftSide(Rect position, float width)
{
return new Rect(position.x, position.y, position.width - width, position.height);
}
static Rect RightSide(Rect position, float width)
{
return new Rect(position.x + (position.width - width), position.y, width, position.height);
}
const float WIDTH = 140.0f;
public override void OnGUI(Rect position,
SerializedProperty property, GUIContent label)
{
var rendererProp = property.FindPropertyRelative("Renderer");
var flagProp = property.FindPropertyRelative("FirstPersonFlag");
var root = (property.serializedObject.targetObject as VRM10Object).Prefab;
if (root != null)
{
var renderers = root.GetComponentsInChildren<Renderer>();
var paths = renderers.Select(x => x.transform.RelativePathFrom(root.transform)).ToArray();
var selected = Array.IndexOf(paths, rendererProp.stringValue);
var newSelect = EditorGUI.Popup(LeftSide(position, WIDTH), selected, renderers.Select(x => x.name).ToArray());
if (newSelect != selected && newSelect != -1)
{
rendererProp.stringValue = paths[newSelect];
}
EditorGUI.PropertyField(RightSide(position, WIDTH), flagProp, new GUIContent(""), true);
}
else
{
EditorGUI.PropertyField(LeftSide(position, WIDTH), rendererProp, new GUIContent(""), true);
EditorGUI.PropertyField(RightSide(position, WIDTH), flagProp, new GUIContent(""), true);
}
}
/*
public override float GetPropertyHeight(SerializedProperty property,
GUIContent label)
{
return 60.0f;
}
*/
}
}