mirror of
https://github.com/vrm-c/UniVRM.git
synced 2026-04-16 01:56:47 -05:00
* MeshUtility を UniGLTF 下に移動 * Assets/VRM10 を追加 * JsonSchemaからのコード生成 UniGLTF/Editor/Generator を追加
124 lines
3.2 KiB
C#
124 lines
3.2 KiB
C#
using System;
|
|
using System.IO;
|
|
using MeshUtility;
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
|
|
|
|
namespace UniVRM10
|
|
{
|
|
[CustomEditor(typeof(VRM10Expression))]
|
|
public class ExpressionEditor : ExpressionEditorBase
|
|
{
|
|
SerializedExpressionEditor m_serializedEditor;
|
|
|
|
VRM10Expression m_target;
|
|
protected override VRM10Expression CurrentExpression()
|
|
{
|
|
return m_target;
|
|
}
|
|
|
|
protected override GameObject GetPrefab()
|
|
{
|
|
return m_target.Prefab;
|
|
}
|
|
|
|
protected override void OnEnable()
|
|
{
|
|
m_target = (VRM10Expression)target;
|
|
|
|
base.OnEnable();
|
|
}
|
|
|
|
float m_previewSlider = 1.0f;
|
|
|
|
static Texture2D SaveResizedImage(RenderTexture rt, UnityPath path, int size)
|
|
{
|
|
var tex = new Texture2D(rt.width, rt.height, TextureFormat.RGB24, false);
|
|
RenderTexture.active = rt;
|
|
tex.ReadPixels(new Rect(0, 0, rt.width, rt.height), 0, 0);
|
|
tex.Apply();
|
|
|
|
//TextureScale.Scale(tex, size, size);
|
|
tex = TextureScale.GetResized(tex, size, size);
|
|
|
|
byte[] bytes;
|
|
switch (path.Extension.ToLower())
|
|
{
|
|
case ".png":
|
|
bytes = tex.EncodeToPNG();
|
|
break;
|
|
|
|
case ".jpg":
|
|
bytes = tex.EncodeToJPG();
|
|
break;
|
|
|
|
default:
|
|
throw new Exception();
|
|
}
|
|
|
|
if (Application.isPlaying)
|
|
{
|
|
UnityEngine.Object.Destroy(tex);
|
|
}
|
|
else
|
|
{
|
|
UnityEngine.Object.DestroyImmediate(tex);
|
|
}
|
|
File.WriteAllBytes(path.FullPath, bytes);
|
|
|
|
path.ImportAsset();
|
|
return path.LoadAsset<Texture2D>();
|
|
}
|
|
|
|
public override void OnInspectorGUI()
|
|
{
|
|
if (PreviewSceneManager == null)
|
|
{
|
|
return;
|
|
}
|
|
serializedObject.Update();
|
|
|
|
if (m_serializedEditor == null)
|
|
{
|
|
m_serializedEditor = new SerializedExpressionEditor(serializedObject, PreviewSceneManager);
|
|
}
|
|
|
|
EditorGUILayout.BeginHorizontal();
|
|
|
|
var changed = false;
|
|
EditorGUILayout.BeginVertical();
|
|
base.OnInspectorGUI();
|
|
EditorGUILayout.LabelField("Preview Weight");
|
|
var previewSlider = EditorGUILayout.Slider(m_previewSlider, 0, 1.0f);
|
|
|
|
EditorGUILayout.EndVertical();
|
|
|
|
if (m_serializedEditor.IsBinary)
|
|
{
|
|
previewSlider = Mathf.Round(previewSlider);
|
|
}
|
|
|
|
if (previewSlider != m_previewSlider)
|
|
{
|
|
m_previewSlider = previewSlider;
|
|
changed = true;
|
|
}
|
|
|
|
EditorGUILayout.EndHorizontal();
|
|
Separator();
|
|
// EditorGUILayout.Space();
|
|
|
|
if (m_serializedEditor.Draw(out VRM10Expression bakeValue))
|
|
{
|
|
changed = true;
|
|
}
|
|
|
|
if (changed && PreviewSceneManager != null)
|
|
{
|
|
PreviewSceneManager.Bake(bakeValue, m_previewSlider);
|
|
}
|
|
}
|
|
}
|
|
}
|