using Unity.Collections; using UnityEngine.Animations; namespace LibMMD.Unity3D.Animation { // Thin adapter: pose computation (VMD evaluation, IK, Bullet physics, baked-FK // interpolation) happens outside this job, on the same thread that calls // MmdAnimationDriver.Evaluate(). This job just overwrites the bones flagged for a write // (WriteFlags[i]) with already-computed poses. internal struct MmdPoseAnimationJob : IAnimationJob { public NativeArray Handles; public NativeArray Poses; public NativeArray WriteFlags; public void ProcessAnimation(AnimationStream stream) { for (var i = 0; i < Handles.Length; ++i) { if (!WriteFlags[i]) { continue; } var handle = Handles[i]; var pose = Poses[i]; handle.SetPosition(stream, pose.Position); handle.SetRotation(stream, pose.Rotation); } } public void ProcessRootMotion(AnimationStream stream) { } } }