UniVRM/Scripts/Format/Editor/VRMExportObjectEditor.cs
2018-07-20 17:04:51 +09:00

102 lines
2.8 KiB
C#

using System;
using UnityEditor;
using UnityEngine;
namespace VRM
{
[CustomEditor(typeof(VRMExportObject))]
public class VRMExportObjectEditor : Editor
{
SerializedProperty m_settings;
VRMExportObject m_target;
void OnEnable()
{
m_target = target as VRMExportObject;
m_settings = serializedObject.FindProperty("Settings");
}
public override void OnInspectorGUI()
{
//
// Editor
//
serializedObject.Update();
var before = m_target.Settings.Source;
EditorGUILayout.PropertyField(m_settings, true);
serializedObject.ApplyModifiedProperties();
//
//
//
var after = m_target.Settings.Source;
if (before != after)
{
m_target.Settings.InitializeFrom(after as GameObject);
}
bool canExport = m_target.Settings.Source != null;
foreach (var msg in m_target.Settings.CanExport())
{
canExport = false;
EditorGUILayout.HelpBox(msg, MessageType.Error);
}
if (canExport)
{
if (GUILayout.Button("Export"))
{
var path = EditorUtility.SaveFilePanel(
"Save vrm",
null,//Dir,
m_target.Settings.Source.name + ".vrm",
"vrm");
if (!string.IsNullOrEmpty(path))
{
var target = m_target;
EditorApplication.delayCall += () =>
{
target.Settings.Export(path);
};
}
}
}
}
class DisposableInstance : IDisposable
{
GameObject m_go;
public GameObject GameObject
{
get
{
return m_go;
}
}
public DisposableInstance(GameObject prefab)
{
m_go = GameObject.Instantiate(prefab);
}
public void Dispose()
{
if (m_go != null)
{
if (Application.isPlaying)
{
GameObject.Destroy(m_go);
}
else
{
GameObject.DestroyImmediate(m_go);
}
}
}
}
}
}