mirror of
https://github.com/vrm-c/UniVRM.git
synced 2026-09-08 11:59:26 -05:00
VrmAnimationImporter create VrmAnimationInstance
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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>());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user