From 8d02eec68e1f8585b637310bc880fd3dc7c080c1 Mon Sep 17 00:00:00 2001 From: ousttrue Date: Tue, 8 Jun 2021 18:21:51 +0900 Subject: [PATCH] =?UTF-8?q?SetupAnimationsAsync=20=E3=82=92=E5=88=86?= =?UTF-8?q?=E9=9B=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Runtime/UniGLTF/IO/ImporterContext.cs | 69 ++++++++++++------- 1 file changed, 45 insertions(+), 24 deletions(-) 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)