holopy3/Assets/UniGLTF/UniHumanoid/Scenes/RuntimeBvhLoader.cs

85 lines
1.9 KiB
C#
Raw Normal View History

2021-01-28 12:07:52 +00:00
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.UI;
using UniHumanoid;
using System.IO;
using System;
#if UNITY_EDITOR
using UnityEditor;
#endif
namespace UniHumanoid
{
public class RuntimeBvhLoader : MonoBehaviour
{
[SerializeField]
Button m_openButton;
[SerializeField]
HumanPoseTransfer m_dst;
UnityAction m_onClick;
private void Awake()
{
m_onClick = new UnityEngine.Events.UnityAction(OnClick);
}
private void OnEnable()
{
m_openButton.onClick.AddListener(m_onClick);
}
private void OnDisable()
{
m_openButton.onClick.RemoveListener(m_onClick);
}
static string m_lastDir;
public void OnClick()
{
#if UNITY_EDITOR
var path = EditorUtility.OpenFilePanel("open bvh", m_lastDir, "bvh");
if (String.IsNullOrEmpty(path))
{
return;
}
m_lastDir = Path.GetDirectoryName(path);
#else
string path=null;
throw new NotImplementedException();
#endif
#pragma warning disable 4014
Open(path);
#pragma warning restore 4014
}
BvhImporterContext m_context;
void Open(string path)
{
Debug.LogFormat("Open: {0}", path);
if (m_context != null)
{
m_context.Destroy(true);
m_context = null;
}
m_context = new BvhImporterContext();
m_context.Parse(path);
m_context.Load();
var src = m_context.Root.AddComponent<HumanPoseTransfer>();
if (m_dst != null)
{
m_dst.SourceType = HumanPoseTransfer.HumanPoseTransferSourceType.HumanPoseTransfer;
m_dst.Source = src;
}
}
}
}