diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/ImporterContext.cs b/Assets/UniGLTF/Runtime/UniGLTF/IO/ImporterContext.cs index 04bb99268..616afcda2 100644 --- a/Assets/UniGLTF/Runtime/UniGLTF/IO/ImporterContext.cs +++ b/Assets/UniGLTF/Runtime/UniGLTF/IO/ImporterContext.cs @@ -101,42 +101,63 @@ namespace UniGLTF await LoadGeometryAsync(awaitCaller, MeasureTime); - await LoadAnimationAsync(awaitCaller, MeasureTime); + using (MeasureTime("AnimationImporter")) + { + await LoadAnimationAsync(awaitCaller); + await SetupAnimationsAsync(awaitCaller); + } await OnLoadHierarchy(awaitCaller, MeasureTime); } - protected virtual async Task LoadAnimationAsync(IAwaitCaller awaitCaller, Func MeasureTime) + /// + /// ImporterContext.AnimationClips に AnimationClip を読み込むところまでが責務 + /// + /// + /// + protected virtual async Task LoadAnimationAsync(IAwaitCaller awaitCaller) { - using (MeasureTime("AnimationImporter")) + if (GLTF.animations != null && GLTF.animations.Any()) { - if (GLTF.animations != null && GLTF.animations.Any()) + for (int i = 0; i < GLTF.animations.Count; ++i) { - var animation = Root.AddComponent(); - for (int i = 0; i < GLTF.animations.Count; ++i) + var gltfAnimation = GLTF.animations[i]; + AnimationClip clip = default; + if (_externalObjectMap.TryGetValue(new SubAssetKey(typeof(AnimationClip), gltfAnimation.name), out UnityEngine.Object value)) { - var gltfAnimation = GLTF.animations[i]; - AnimationClip clip = default; - if (_externalObjectMap.TryGetValue(new SubAssetKey(typeof(AnimationClip), gltfAnimation.name), out UnityEngine.Object value)) - { - clip = value as AnimationClip; - } - else - { - clip = AnimationImporterUtil.ConvertAnimationClip(GLTF, GLTF.animations[i], InvertAxis.Create()); - AnimationClips.Add(clip); - } - - animation.AddClip(clip, clip.name); - if (i == 0) - { - animation.clip = clip; - } + clip = value as AnimationClip; } + else + { + clip = AnimationImporterUtil.ConvertAnimationClip(GLTF, GLTF.animations[i], InvertAxis.Create()); + AnimationClips.Add(clip); + } + } - await awaitCaller.NextFrame(); + await awaitCaller.NextFrame(); + } + } + + /// + /// AnimationClips を AnimationComponent に載せる + /// + protected virtual async Task SetupAnimationsAsync(IAwaitCaller awaitCaller) + { + if (AnimationClips.Count == 0) + { + return; + } + var animation = Root.AddComponent(); + for (int i = 0; i < AnimationClips.Count; ++i) + { + var clip = AnimationClips[i]; + animation.AddClip(clip, clip.name); + if (i == 0) + { + animation.clip = clip; } } + await awaitCaller.NextFrame(); } protected virtual async Task LoadGeometryAsync(IAwaitCaller awaitCaller, Func MeasureTime)