mirror of
https://github.com/vrm-c/UniVRM.git
synced 2026-08-12 12:45:49 -05:00
Convert CRLF to LF
This commit is contained in:
@@ -1,373 +1,373 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using UniHumanoid;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
|
||||
namespace VRM
|
||||
{
|
||||
public class ViewerUI : MonoBehaviour
|
||||
{
|
||||
#region UI
|
||||
[SerializeField]
|
||||
Text m_version;
|
||||
|
||||
[SerializeField]
|
||||
Button m_open;
|
||||
|
||||
[SerializeField]
|
||||
Toggle m_enableLipSync;
|
||||
|
||||
[SerializeField]
|
||||
Toggle m_enableAutoBlink;
|
||||
#endregion
|
||||
|
||||
[SerializeField]
|
||||
HumanPoseTransfer m_src;
|
||||
|
||||
[SerializeField]
|
||||
GameObject m_target;
|
||||
|
||||
[SerializeField]
|
||||
GameObject Root;
|
||||
|
||||
[Serializable]
|
||||
struct TextFields
|
||||
{
|
||||
[SerializeField, Header("Info")]
|
||||
Text m_textModelTitle;
|
||||
[SerializeField]
|
||||
Text m_textModelVersion;
|
||||
[SerializeField]
|
||||
Text m_textModelAuthor;
|
||||
[SerializeField]
|
||||
Text m_textModelContact;
|
||||
[SerializeField]
|
||||
Text m_textModelReference;
|
||||
[SerializeField]
|
||||
RawImage m_thumbnail;
|
||||
|
||||
[SerializeField, Header("CharacterPermission")]
|
||||
Text m_textPermissionAllowed;
|
||||
[SerializeField]
|
||||
Text m_textPermissionViolent;
|
||||
[SerializeField]
|
||||
Text m_textPermissionSexual;
|
||||
[SerializeField]
|
||||
Text m_textPermissionCommercial;
|
||||
[SerializeField]
|
||||
Text m_textPermissionOther;
|
||||
|
||||
[SerializeField, Header("DistributionLicense")]
|
||||
Text m_textDistributionLicense;
|
||||
[SerializeField]
|
||||
Text m_textDistributionOther;
|
||||
|
||||
public void Start()
|
||||
{
|
||||
m_textModelTitle.text = "";
|
||||
m_textModelVersion.text = "";
|
||||
m_textModelAuthor.text = "";
|
||||
m_textModelContact.text = "";
|
||||
m_textModelReference.text = "";
|
||||
|
||||
m_textPermissionAllowed.text = "";
|
||||
m_textPermissionViolent.text = "";
|
||||
m_textPermissionSexual.text = "";
|
||||
m_textPermissionCommercial.text = "";
|
||||
m_textPermissionOther.text = "";
|
||||
|
||||
m_textDistributionLicense.text = "";
|
||||
m_textDistributionOther.text = "";
|
||||
}
|
||||
|
||||
public void UpdateMeta(VRMImporterContext context)
|
||||
{
|
||||
var meta = context.ReadMeta(true);
|
||||
|
||||
m_textModelTitle.text = meta.Title;
|
||||
m_textModelVersion.text = meta.Version;
|
||||
m_textModelAuthor.text = meta.Author;
|
||||
m_textModelContact.text = meta.ContactInformation;
|
||||
m_textModelReference.text = meta.Reference;
|
||||
|
||||
m_textPermissionAllowed.text = meta.AllowedUser.ToString();
|
||||
m_textPermissionViolent.text = meta.ViolentUssage.ToString();
|
||||
m_textPermissionSexual.text = meta.SexualUssage.ToString();
|
||||
m_textPermissionCommercial.text = meta.CommercialUssage.ToString();
|
||||
m_textPermissionOther.text = meta.OtherPermissionUrl;
|
||||
|
||||
m_textDistributionLicense.text = meta.LicenseType.ToString();
|
||||
m_textDistributionOther.text = meta.OtherLicenseUrl;
|
||||
|
||||
m_thumbnail.texture = meta.Thumbnail;
|
||||
}
|
||||
}
|
||||
[SerializeField]
|
||||
TextFields m_texts;
|
||||
|
||||
[Serializable]
|
||||
struct UIFields
|
||||
{
|
||||
[SerializeField]
|
||||
Toggle ToggleMotionTPose;
|
||||
|
||||
[SerializeField]
|
||||
Toggle ToggleMotionBVH;
|
||||
|
||||
[SerializeField]
|
||||
ToggleGroup ToggleMotion;
|
||||
|
||||
Toggle m_activeToggleMotion;
|
||||
|
||||
public void UpdateTogle(Action onBvh, Action onTPose)
|
||||
{
|
||||
var value = ToggleMotion.ActiveToggles().FirstOrDefault();
|
||||
if (value == m_activeToggleMotion)
|
||||
return;
|
||||
|
||||
m_activeToggleMotion = value;
|
||||
if (value == ToggleMotionTPose)
|
||||
{
|
||||
onTPose();
|
||||
}
|
||||
else if (value == ToggleMotionBVH)
|
||||
{
|
||||
onBvh();
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Log("motion: no toggle");
|
||||
}
|
||||
}
|
||||
}
|
||||
[SerializeField]
|
||||
UIFields m_ui;
|
||||
|
||||
[SerializeField]
|
||||
HumanPoseClip m_pose;
|
||||
|
||||
private void Reset()
|
||||
{
|
||||
var buttons = GameObject.FindObjectsOfType<Button>();
|
||||
m_open = buttons.First(x => x.name == "Open");
|
||||
|
||||
var toggles = GameObject.FindObjectsOfType<Toggle>();
|
||||
m_enableLipSync = toggles.First(x => x.name == "EnableLipSync");
|
||||
m_enableAutoBlink = toggles.First(x => x.name == "EnableAutoBlink");
|
||||
|
||||
var texts = GameObject.FindObjectsOfType<Text>();
|
||||
m_version = texts.First(x => x.name == "Version");
|
||||
|
||||
m_src = GameObject.FindObjectOfType<HumanPoseTransfer>();
|
||||
|
||||
m_target = GameObject.FindObjectOfType<TargetMover>().gameObject;
|
||||
}
|
||||
|
||||
HumanPoseTransfer m_loaded;
|
||||
|
||||
AIUEO m_lipSync;
|
||||
bool m_enableLipSyncValue;
|
||||
bool EnableLipSyncValue
|
||||
{
|
||||
set
|
||||
{
|
||||
if (m_enableLipSyncValue == value) return;
|
||||
m_enableLipSyncValue = value;
|
||||
if (m_lipSync != null)
|
||||
{
|
||||
m_lipSync.enabled = m_enableLipSyncValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Blinker m_blink;
|
||||
bool m_enableBlinkValue;
|
||||
bool EnableBlinkValue
|
||||
{
|
||||
set
|
||||
{
|
||||
if (m_blink == value) return;
|
||||
m_enableBlinkValue = value;
|
||||
if (m_blink != null)
|
||||
{
|
||||
m_blink.enabled = m_enableBlinkValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void Start()
|
||||
{
|
||||
m_version.text = string.Format("VRMViewer {0}.{1}",
|
||||
VRMVersion.MAJOR, VRMVersion.MINOR);
|
||||
m_open.onClick.AddListener(OnOpenClicked);
|
||||
|
||||
// load initial bvh
|
||||
LoadMotion(Application.streamingAssetsPath + "/test.txt");
|
||||
|
||||
string[] cmds = System.Environment.GetCommandLineArgs();
|
||||
if (cmds.Length > 1)
|
||||
{
|
||||
LoadModel(cmds[1]);
|
||||
}
|
||||
|
||||
m_texts.Start();
|
||||
}
|
||||
|
||||
private void LoadMotion(string path)
|
||||
{
|
||||
var context = new UniHumanoid.BvhImporterContext();
|
||||
context.Parse(path);
|
||||
context.Load();
|
||||
SetMotion(context.Root.GetComponent<HumanPoseTransfer>());
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
EnableLipSyncValue = m_enableLipSync.isOn;
|
||||
EnableBlinkValue = m_enableAutoBlink.isOn;
|
||||
|
||||
if (Input.GetKeyDown(KeyCode.Tab))
|
||||
{
|
||||
if (Root != null) Root.SetActive(!Root.activeSelf);
|
||||
}
|
||||
|
||||
m_ui.UpdateTogle(EnableBvh, EnableTPose);
|
||||
}
|
||||
|
||||
void EnableBvh()
|
||||
{
|
||||
if (m_loaded != null)
|
||||
{
|
||||
m_loaded.Source = m_src;
|
||||
m_loaded.SourceType = HumanPoseTransfer.HumanPoseTransferSourceType.HumanPoseTransfer;
|
||||
}
|
||||
}
|
||||
|
||||
void EnableTPose()
|
||||
{
|
||||
if (m_loaded != null)
|
||||
{
|
||||
m_loaded.PoseClip = m_pose;
|
||||
m_loaded.SourceType = HumanPoseTransfer.HumanPoseTransferSourceType.HumanPoseClip;
|
||||
}
|
||||
}
|
||||
|
||||
void OnOpenClicked()
|
||||
{
|
||||
#if UNITY_STANDALONE_WIN
|
||||
var path = FileDialogForWindows.FileDialog("open VRM", "vrm", "glb", "bvh");
|
||||
#else
|
||||
var path = Application.dataPath + "/default.vrm";
|
||||
#endif
|
||||
if (string.IsNullOrEmpty(path))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var ext = Path.GetExtension(path).ToLower();
|
||||
switch (ext)
|
||||
{
|
||||
case ".gltf":
|
||||
case ".glb":
|
||||
case ".vrm":
|
||||
LoadModel(path);
|
||||
break;
|
||||
|
||||
case ".bvh":
|
||||
LoadMotion(path);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void LoadModel(string path)
|
||||
{
|
||||
if (!File.Exists(path))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Debug.LogFormat("{0}", path);
|
||||
var ext = Path.GetExtension(path).ToLower();
|
||||
switch (ext)
|
||||
{
|
||||
case ".vrm":
|
||||
{
|
||||
var context = new VRMImporterContext();
|
||||
var file = File.ReadAllBytes(path);
|
||||
context.ParseGlb(file);
|
||||
m_texts.UpdateMeta(context);
|
||||
context.Load();
|
||||
context.ShowMeshes();
|
||||
context.EnableUpdateWhenOffscreen();
|
||||
context.ShowMeshes();
|
||||
SetModel(context.Root);
|
||||
break;
|
||||
}
|
||||
|
||||
case ".glb":
|
||||
{
|
||||
var context = new UniGLTF.ImporterContext();
|
||||
var file = File.ReadAllBytes(path);
|
||||
context.ParseGlb(file);
|
||||
context.Load();
|
||||
context.ShowMeshes();
|
||||
context.EnableUpdateWhenOffscreen();
|
||||
context.ShowMeshes();
|
||||
SetModel(context.Root);
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
Debug.LogWarningFormat("unknown file type: {0}", path);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void SetModel(GameObject go)
|
||||
{
|
||||
// cleanup
|
||||
var loaded = m_loaded;
|
||||
m_loaded = null;
|
||||
|
||||
if (loaded != null)
|
||||
{
|
||||
Debug.LogFormat("destroy {0}", loaded);
|
||||
GameObject.Destroy(loaded.gameObject);
|
||||
}
|
||||
|
||||
if (go != null)
|
||||
{
|
||||
var lookAt = go.GetComponent<VRMLookAtHead>();
|
||||
if (lookAt != null)
|
||||
{
|
||||
m_loaded = go.AddComponent<HumanPoseTransfer>();
|
||||
m_loaded.Source = m_src;
|
||||
m_loaded.SourceType = HumanPoseTransfer.HumanPoseTransferSourceType.HumanPoseTransfer;
|
||||
|
||||
m_lipSync = go.AddComponent<AIUEO>();
|
||||
m_blink = go.AddComponent<Blinker>();
|
||||
|
||||
lookAt.Target = m_target.transform;
|
||||
lookAt.UpdateType = UpdateType.LateUpdate; // after HumanPoseTransfer's setPose
|
||||
}
|
||||
|
||||
var animation = go.GetComponent<Animation>();
|
||||
if (animation && animation.clip != null)
|
||||
{
|
||||
animation.Play(animation.clip.name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void SetMotion(HumanPoseTransfer src)
|
||||
{
|
||||
m_src = src;
|
||||
src.GetComponent<Renderer>().enabled = false;
|
||||
|
||||
EnableBvh();
|
||||
}
|
||||
}
|
||||
}
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using UniHumanoid;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
|
||||
namespace VRM
|
||||
{
|
||||
public class ViewerUI : MonoBehaviour
|
||||
{
|
||||
#region UI
|
||||
[SerializeField]
|
||||
Text m_version;
|
||||
|
||||
[SerializeField]
|
||||
Button m_open;
|
||||
|
||||
[SerializeField]
|
||||
Toggle m_enableLipSync;
|
||||
|
||||
[SerializeField]
|
||||
Toggle m_enableAutoBlink;
|
||||
#endregion
|
||||
|
||||
[SerializeField]
|
||||
HumanPoseTransfer m_src;
|
||||
|
||||
[SerializeField]
|
||||
GameObject m_target;
|
||||
|
||||
[SerializeField]
|
||||
GameObject Root;
|
||||
|
||||
[Serializable]
|
||||
struct TextFields
|
||||
{
|
||||
[SerializeField, Header("Info")]
|
||||
Text m_textModelTitle;
|
||||
[SerializeField]
|
||||
Text m_textModelVersion;
|
||||
[SerializeField]
|
||||
Text m_textModelAuthor;
|
||||
[SerializeField]
|
||||
Text m_textModelContact;
|
||||
[SerializeField]
|
||||
Text m_textModelReference;
|
||||
[SerializeField]
|
||||
RawImage m_thumbnail;
|
||||
|
||||
[SerializeField, Header("CharacterPermission")]
|
||||
Text m_textPermissionAllowed;
|
||||
[SerializeField]
|
||||
Text m_textPermissionViolent;
|
||||
[SerializeField]
|
||||
Text m_textPermissionSexual;
|
||||
[SerializeField]
|
||||
Text m_textPermissionCommercial;
|
||||
[SerializeField]
|
||||
Text m_textPermissionOther;
|
||||
|
||||
[SerializeField, Header("DistributionLicense")]
|
||||
Text m_textDistributionLicense;
|
||||
[SerializeField]
|
||||
Text m_textDistributionOther;
|
||||
|
||||
public void Start()
|
||||
{
|
||||
m_textModelTitle.text = "";
|
||||
m_textModelVersion.text = "";
|
||||
m_textModelAuthor.text = "";
|
||||
m_textModelContact.text = "";
|
||||
m_textModelReference.text = "";
|
||||
|
||||
m_textPermissionAllowed.text = "";
|
||||
m_textPermissionViolent.text = "";
|
||||
m_textPermissionSexual.text = "";
|
||||
m_textPermissionCommercial.text = "";
|
||||
m_textPermissionOther.text = "";
|
||||
|
||||
m_textDistributionLicense.text = "";
|
||||
m_textDistributionOther.text = "";
|
||||
}
|
||||
|
||||
public void UpdateMeta(VRMImporterContext context)
|
||||
{
|
||||
var meta = context.ReadMeta(true);
|
||||
|
||||
m_textModelTitle.text = meta.Title;
|
||||
m_textModelVersion.text = meta.Version;
|
||||
m_textModelAuthor.text = meta.Author;
|
||||
m_textModelContact.text = meta.ContactInformation;
|
||||
m_textModelReference.text = meta.Reference;
|
||||
|
||||
m_textPermissionAllowed.text = meta.AllowedUser.ToString();
|
||||
m_textPermissionViolent.text = meta.ViolentUssage.ToString();
|
||||
m_textPermissionSexual.text = meta.SexualUssage.ToString();
|
||||
m_textPermissionCommercial.text = meta.CommercialUssage.ToString();
|
||||
m_textPermissionOther.text = meta.OtherPermissionUrl;
|
||||
|
||||
m_textDistributionLicense.text = meta.LicenseType.ToString();
|
||||
m_textDistributionOther.text = meta.OtherLicenseUrl;
|
||||
|
||||
m_thumbnail.texture = meta.Thumbnail;
|
||||
}
|
||||
}
|
||||
[SerializeField]
|
||||
TextFields m_texts;
|
||||
|
||||
[Serializable]
|
||||
struct UIFields
|
||||
{
|
||||
[SerializeField]
|
||||
Toggle ToggleMotionTPose;
|
||||
|
||||
[SerializeField]
|
||||
Toggle ToggleMotionBVH;
|
||||
|
||||
[SerializeField]
|
||||
ToggleGroup ToggleMotion;
|
||||
|
||||
Toggle m_activeToggleMotion;
|
||||
|
||||
public void UpdateTogle(Action onBvh, Action onTPose)
|
||||
{
|
||||
var value = ToggleMotion.ActiveToggles().FirstOrDefault();
|
||||
if (value == m_activeToggleMotion)
|
||||
return;
|
||||
|
||||
m_activeToggleMotion = value;
|
||||
if (value == ToggleMotionTPose)
|
||||
{
|
||||
onTPose();
|
||||
}
|
||||
else if (value == ToggleMotionBVH)
|
||||
{
|
||||
onBvh();
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Log("motion: no toggle");
|
||||
}
|
||||
}
|
||||
}
|
||||
[SerializeField]
|
||||
UIFields m_ui;
|
||||
|
||||
[SerializeField]
|
||||
HumanPoseClip m_pose;
|
||||
|
||||
private void Reset()
|
||||
{
|
||||
var buttons = GameObject.FindObjectsOfType<Button>();
|
||||
m_open = buttons.First(x => x.name == "Open");
|
||||
|
||||
var toggles = GameObject.FindObjectsOfType<Toggle>();
|
||||
m_enableLipSync = toggles.First(x => x.name == "EnableLipSync");
|
||||
m_enableAutoBlink = toggles.First(x => x.name == "EnableAutoBlink");
|
||||
|
||||
var texts = GameObject.FindObjectsOfType<Text>();
|
||||
m_version = texts.First(x => x.name == "Version");
|
||||
|
||||
m_src = GameObject.FindObjectOfType<HumanPoseTransfer>();
|
||||
|
||||
m_target = GameObject.FindObjectOfType<TargetMover>().gameObject;
|
||||
}
|
||||
|
||||
HumanPoseTransfer m_loaded;
|
||||
|
||||
AIUEO m_lipSync;
|
||||
bool m_enableLipSyncValue;
|
||||
bool EnableLipSyncValue
|
||||
{
|
||||
set
|
||||
{
|
||||
if (m_enableLipSyncValue == value) return;
|
||||
m_enableLipSyncValue = value;
|
||||
if (m_lipSync != null)
|
||||
{
|
||||
m_lipSync.enabled = m_enableLipSyncValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Blinker m_blink;
|
||||
bool m_enableBlinkValue;
|
||||
bool EnableBlinkValue
|
||||
{
|
||||
set
|
||||
{
|
||||
if (m_blink == value) return;
|
||||
m_enableBlinkValue = value;
|
||||
if (m_blink != null)
|
||||
{
|
||||
m_blink.enabled = m_enableBlinkValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void Start()
|
||||
{
|
||||
m_version.text = string.Format("VRMViewer {0}.{1}",
|
||||
VRMVersion.MAJOR, VRMVersion.MINOR);
|
||||
m_open.onClick.AddListener(OnOpenClicked);
|
||||
|
||||
// load initial bvh
|
||||
LoadMotion(Application.streamingAssetsPath + "/test.txt");
|
||||
|
||||
string[] cmds = System.Environment.GetCommandLineArgs();
|
||||
if (cmds.Length > 1)
|
||||
{
|
||||
LoadModel(cmds[1]);
|
||||
}
|
||||
|
||||
m_texts.Start();
|
||||
}
|
||||
|
||||
private void LoadMotion(string path)
|
||||
{
|
||||
var context = new UniHumanoid.BvhImporterContext();
|
||||
context.Parse(path);
|
||||
context.Load();
|
||||
SetMotion(context.Root.GetComponent<HumanPoseTransfer>());
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
EnableLipSyncValue = m_enableLipSync.isOn;
|
||||
EnableBlinkValue = m_enableAutoBlink.isOn;
|
||||
|
||||
if (Input.GetKeyDown(KeyCode.Tab))
|
||||
{
|
||||
if (Root != null) Root.SetActive(!Root.activeSelf);
|
||||
}
|
||||
|
||||
m_ui.UpdateTogle(EnableBvh, EnableTPose);
|
||||
}
|
||||
|
||||
void EnableBvh()
|
||||
{
|
||||
if (m_loaded != null)
|
||||
{
|
||||
m_loaded.Source = m_src;
|
||||
m_loaded.SourceType = HumanPoseTransfer.HumanPoseTransferSourceType.HumanPoseTransfer;
|
||||
}
|
||||
}
|
||||
|
||||
void EnableTPose()
|
||||
{
|
||||
if (m_loaded != null)
|
||||
{
|
||||
m_loaded.PoseClip = m_pose;
|
||||
m_loaded.SourceType = HumanPoseTransfer.HumanPoseTransferSourceType.HumanPoseClip;
|
||||
}
|
||||
}
|
||||
|
||||
void OnOpenClicked()
|
||||
{
|
||||
#if UNITY_STANDALONE_WIN
|
||||
var path = FileDialogForWindows.FileDialog("open VRM", "vrm", "glb", "bvh");
|
||||
#else
|
||||
var path = Application.dataPath + "/default.vrm";
|
||||
#endif
|
||||
if (string.IsNullOrEmpty(path))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var ext = Path.GetExtension(path).ToLower();
|
||||
switch (ext)
|
||||
{
|
||||
case ".gltf":
|
||||
case ".glb":
|
||||
case ".vrm":
|
||||
LoadModel(path);
|
||||
break;
|
||||
|
||||
case ".bvh":
|
||||
LoadMotion(path);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void LoadModel(string path)
|
||||
{
|
||||
if (!File.Exists(path))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Debug.LogFormat("{0}", path);
|
||||
var ext = Path.GetExtension(path).ToLower();
|
||||
switch (ext)
|
||||
{
|
||||
case ".vrm":
|
||||
{
|
||||
var context = new VRMImporterContext();
|
||||
var file = File.ReadAllBytes(path);
|
||||
context.ParseGlb(file);
|
||||
m_texts.UpdateMeta(context);
|
||||
context.Load();
|
||||
context.ShowMeshes();
|
||||
context.EnableUpdateWhenOffscreen();
|
||||
context.ShowMeshes();
|
||||
SetModel(context.Root);
|
||||
break;
|
||||
}
|
||||
|
||||
case ".glb":
|
||||
{
|
||||
var context = new UniGLTF.ImporterContext();
|
||||
var file = File.ReadAllBytes(path);
|
||||
context.ParseGlb(file);
|
||||
context.Load();
|
||||
context.ShowMeshes();
|
||||
context.EnableUpdateWhenOffscreen();
|
||||
context.ShowMeshes();
|
||||
SetModel(context.Root);
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
Debug.LogWarningFormat("unknown file type: {0}", path);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void SetModel(GameObject go)
|
||||
{
|
||||
// cleanup
|
||||
var loaded = m_loaded;
|
||||
m_loaded = null;
|
||||
|
||||
if (loaded != null)
|
||||
{
|
||||
Debug.LogFormat("destroy {0}", loaded);
|
||||
GameObject.Destroy(loaded.gameObject);
|
||||
}
|
||||
|
||||
if (go != null)
|
||||
{
|
||||
var lookAt = go.GetComponent<VRMLookAtHead>();
|
||||
if (lookAt != null)
|
||||
{
|
||||
m_loaded = go.AddComponent<HumanPoseTransfer>();
|
||||
m_loaded.Source = m_src;
|
||||
m_loaded.SourceType = HumanPoseTransfer.HumanPoseTransferSourceType.HumanPoseTransfer;
|
||||
|
||||
m_lipSync = go.AddComponent<AIUEO>();
|
||||
m_blink = go.AddComponent<Blinker>();
|
||||
|
||||
lookAt.Target = m_target.transform;
|
||||
lookAt.UpdateType = UpdateType.LateUpdate; // after HumanPoseTransfer's setPose
|
||||
}
|
||||
|
||||
var animation = go.GetComponent<Animation>();
|
||||
if (animation && animation.clip != null)
|
||||
{
|
||||
animation.Play(animation.clip.name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void SetMotion(HumanPoseTransfer src)
|
||||
{
|
||||
m_src = src;
|
||||
src.GetComponent<Renderer>().enabled = false;
|
||||
|
||||
EnableBvh();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user