mirror of
https://github.com/vrm-c/UniVRM.git
synced 2026-05-11 13:04:17 -05:00
102 lines
2.8 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|