64 lines
1.9 KiB
C#
64 lines
1.9 KiB
C#
using UnityEngine;
|
|
using UnityEditor;
|
|
using UniHumanoid;
|
|
|
|
public class HumanPoseClipEditor : EditorWindow
|
|
{
|
|
private Animator sourceAnimator;
|
|
private string savePath = "Assets/NewPose.pose";
|
|
|
|
[MenuItem("Tools/Human Pose Clip Creator")]
|
|
static void ShowWindow()
|
|
{
|
|
var window = GetWindow<HumanPoseClipEditor>("포즈 생성기");
|
|
window.minSize = new Vector2(300, 100);
|
|
}
|
|
|
|
void OnGUI()
|
|
{
|
|
EditorGUILayout.Space(10);
|
|
EditorGUILayout.LabelField("휴머노이드 포즈 생성", EditorStyles.boldLabel);
|
|
EditorGUILayout.Space(10);
|
|
|
|
sourceAnimator = EditorGUILayout.ObjectField("소스 애니메이터",
|
|
sourceAnimator, typeof(Animator), true) as Animator;
|
|
|
|
savePath = EditorGUILayout.TextField("저장 경로", savePath);
|
|
|
|
EditorGUILayout.Space(10);
|
|
|
|
GUI.enabled = sourceAnimator != null;
|
|
if (GUILayout.Button("현재 포즈로 에셋 생성"))
|
|
{
|
|
CreatePoseClip();
|
|
}
|
|
GUI.enabled = true;
|
|
}
|
|
|
|
void CreatePoseClip()
|
|
{
|
|
if (!sourceAnimator.isHuman)
|
|
{
|
|
EditorUtility.DisplayDialog("오류",
|
|
"선택된 애니메이터가 휴머노이드가 아닙니다.", "확인");
|
|
return;
|
|
}
|
|
|
|
var clip = ScriptableObject.CreateInstance<HumanPoseClip>();
|
|
var handler = new HumanPoseHandler(sourceAnimator.avatar, sourceAnimator.transform);
|
|
var pose = new HumanPose();
|
|
|
|
handler.GetHumanPose(ref pose);
|
|
clip.ApplyPose(ref pose);
|
|
|
|
// 에셋 저장
|
|
AssetDatabase.CreateAsset(clip, savePath + ".asset");
|
|
AssetDatabase.SaveAssets();
|
|
|
|
EditorUtility.DisplayDialog("완료",
|
|
"포즈 클립이 생성되었습니다.", "확인");
|
|
|
|
// 생성된 에셋 선택
|
|
Selection.activeObject = clip;
|
|
}
|
|
} |