122 lines
4.3 KiB
C#

using UnityEngine;
using UnityEditor;
using System.Collections.Generic;
using System.IO;
// ver 1.1
// © 2018-9-25 gatosyocora
namespace VRCDeveloperTool
{
public class HandPoseSetting : EditorWindow
{
private static string EditorPath = "Assets/VRCDeveloperTool/Editor/HandPoseAdder/";
private static string handPoseName = "";
private static AnimationClip handPoseAnimClip = null;
[MenuItem("VRCDeveloperTool/HandPose Adder Setting")]
private static void Create()
{
loadSettingData();
GetWindow<HandPoseSetting>("HandPose Adder Setting");
}
private void OnGUI()
{
EditorGUILayout.PrefixLabel("Custom Hand Pose");
handPoseName = EditorGUILayout.TextField("Hand Pose Name", handPoseName);
handPoseAnimClip = EditorGUILayout.ObjectField(
"Hand Pose AnimationClip",
handPoseAnimClip,
typeof(AnimationClip),
true
) as AnimationClip;
EditorGUI.BeginDisabledGroup(handPoseName == "" || handPoseAnimClip == null);
EditorGUILayout.BeginHorizontal();
if (GUILayout.Button("Apply Setting"))
{
createSettingData(handPoseName, handPoseAnimClip);
}
EditorGUILayout.EndHorizontal();
EditorGUI.EndDisabledGroup();
EditorGUI.BeginDisabledGroup(!File.Exists(EditorPath + "SettingData.asset") || !File.Exists(EditorPath + "CustomHandPoseAdder.cs"));
EditorGUILayout.BeginHorizontal();
if (GUILayout.Button("Load Setting"))
{
loadSettingData();
}
if (GUILayout.Button("Clear Setting"))
{
handPoseName = "";
handPoseAnimClip = null;
ClearSettingData();
}
EditorGUILayout.EndHorizontal();
EditorGUI.EndDisabledGroup();
}
// 設定データを保存
private static void createSettingData(string name, AnimationClip animClip)
{
HandPoseSettingData.CreateSettingData(name, animClip);
CreateCustomHandPoseAdderScript();
}
// 設定データを読み込み
private static void loadSettingData()
{
HandPoseSettingData settingData = HandPoseSettingData.LoadSettingData();
if (settingData == null) return;
handPoseName = settingData.handPoseName;
handPoseAnimClip = settingData.handPoseAnimClip;
}
// 追加した手の形のAnimationファイルをコピーするためのスクリプトを作成
public static void CreateCustomHandPoseAdderScript()
{
string scriptAssetPath = EditorPath + "CustomHandPoseAdder.cs";
StreamWriter sw = new StreamWriter(scriptAssetPath, false);
sw.WriteLine("using UnityEngine;");
sw.WriteLine("using UnityEditor;");
sw.WriteLine("using VRCDeveloperTool;");
sw.WriteLine("");
sw.WriteLine("// Generated by HandPoseSetting.cs ver 1.1");
sw.WriteLine("// © 2018-9-25 gatosyocora");
sw.WriteLine("");
sw.WriteLine("public class CustomHandPoseAdder : EditorWindow {");
sw.WriteLine(" [MenuItem(\"CONTEXT/Motion/Add Hand pose '" + handPoseName + "'\", false, 8)]");
sw.WriteLine(" private static void AddFPAnimationKeys(MenuCommand command) {");
sw.WriteLine(" string animClipPath = \"" + AssetDatabase.GetAssetPath(handPoseAnimClip) + "\";");
sw.WriteLine(" HandPoseAdder.AddHandPoseAnimationKeys(command, animClipPath);");
sw.WriteLine(" }");
sw.WriteLine("}");
sw.Flush();
sw.Close();
AssetDatabase.ImportAsset(scriptAssetPath);
}
// 設定データを管理するファイルとCustomスクリプトを削除
private static void ClearSettingData()
{
if (File.Exists(EditorPath + "SettingData.asset")) AssetDatabase.DeleteAsset(EditorPath + "SettingData.asset");
if (File.Exists(EditorPath + "CustomHandPoseAdder.cs")) AssetDatabase.DeleteAsset(EditorPath + "CustomHandPoseAdder.cs");
}
}
}