VrmAnimationImporter create VrmAnimationInstance

This commit is contained in:
ousttrue
2023-06-14 17:00:25 +09:00
parent 464a5c8953
commit 77ecdc2d55
3 changed files with 19 additions and 21 deletions

View File

@@ -1,3 +1,4 @@
using System.Collections.Generic;
using UniHumanoid;
using UnityEngine;
@@ -7,8 +8,9 @@ namespace UniVRM10
{
public SkinnedMeshRenderer BoxMan;
public (INormalizedPoseProvider, ITPoseProvider) ControlRig;
public Dictionary<ExpressionKey, Transform> ExpressionMap = new Dictionary<ExpressionKey, Transform>();
public void Initialize()
public void Initialize(IReadOnlyList<(ExpressionKey, Transform)> expressions)
{
var humanoid = gameObject.AddComponent<Humanoid>();
if (humanoid.AssignBonesFromAnimator())
@@ -25,6 +27,11 @@ namespace UniVRM10
var mesh = BoxMan.sharedMesh;
mesh.name = "box-man";
}
foreach (var (preset, transform) in expressions)
{
ExpressionMap.Add(preset, transform);
}
}
}
}

View File

@@ -19,6 +19,7 @@ namespace UniVRM10
IMaterialDescriptorGenerator materialGenerator = null)
: base(data, externalObjectMap, textureDeserializer, materialGenerator)
{
InvertAxis = Axes.X;
}
private static int? GetNodeIndex(UniGLTF.Extensions.VRMC_vrm_animation.Humanoid humanoid, HumanBodyBones bone)
@@ -169,7 +170,7 @@ namespace UniVRM10
{
var instance = await base.LoadAsync(awaitCaller, measureTime);
// VRMA-humanoid
// setup humanoid
var humanMap = GetHumanMap();
if (humanMap.Count > 0)
{
@@ -184,8 +185,11 @@ namespace UniVRM10
animator.avatar = avatar;
}
// VRMA-animation solver
var animationInstance = instance.gameObject.AddComponent<VrmAnimationInstance>();
animationInstance.Initialize(GetExpressions());
return instance;
}
}
}

View File

@@ -1,7 +1,6 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using UniGLTF;
using UniHumanoid;
using UnityEngine;
using VRMShaders;
@@ -12,7 +11,7 @@ namespace UniVRM10.VRM10Viewer
private readonly VrmAnimationInstance m_instance;
(INormalizedPoseProvider, ITPoseProvider) IMotion.ControlRig => m_instance.ControlRig;
public IDictionary<ExpressionKey, Transform> ExpressionMap { get; } = new Dictionary<ExpressionKey, Transform>();
IDictionary<ExpressionKey, Transform> IMotion.ExpressionMap => m_instance.ExpressionMap;
public VrmAnimation(VrmAnimationInstance instance)
{
@@ -41,22 +40,10 @@ namespace UniVRM10.VRM10Viewer
public static async Task<VrmAnimation> LoadVrmAnimationFromPathAsync(string path)
{
using (GltfData data = new AutoGltfFileParser(path).Parse())
using (var loader = new VrmAnimationImporter(data))
{
loader.InvertAxis = Axes.X;
var instance = await loader.LoadAsync(new ImmediateCaller());
var animationInstance = instance.gameObject.AddComponent<UniVRM10.VrmAnimationInstance>();
animationInstance.Initialize();
var animation = new VrmAnimation(animationInstance);
foreach (var (preset, transform) in loader.GetExpressions())
{
animation.ExpressionMap.Add(preset, transform);
}
return animation;
}
using GltfData data = new AutoGltfFileParser(path).Parse();
using var loader = new VrmAnimationImporter(data);
var instance = await loader.LoadAsync(new ImmediateCaller());
return new VrmAnimation(instance.GetComponent<VrmAnimationInstance>());
}
}
}