From 24da2e5c398ed199712ba337b83bfc264123cb33 Mon Sep 17 00:00:00 2001 From: Takayuki Matsuoka Date: Wed, 21 Sep 2022 19:40:56 +0900 Subject: [PATCH] Add IAwaitCaller.NextFrameIfTimedOut to time consuming loops MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 処理の長いループ内に IAwaitCaller.NextFrameIfTimedOut を追加します。 ループ外にProfiler.Begin/EndProfile()がある場合は、ループ内に入れます。 これにより、UnityEngineがループをまたいだBegin/EndProfileに対して 警告を出すのを抑制します。 --- .../Runtime/UniGLTF/IO/ImporterContext.cs | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/ImporterContext.cs b/Assets/UniGLTF/Runtime/UniGLTF/IO/ImporterContext.cs index f46085f50..9b16da9b3 100644 --- a/Assets/UniGLTF/Runtime/UniGLTF/IO/ImporterContext.cs +++ b/Assets/UniGLTF/Runtime/UniGLTF/IO/ImporterContext.cs @@ -205,12 +205,13 @@ namespace UniGLTF { using (MeasureTime("LoadNodes")) { - Profiler.BeginSample("ImporterContext.LoadNodes"); for (var i = 0; i < GLTF.nodes.Count; i++) { + await awaitCaller.NextFrameIfTimedOut(); + Profiler.BeginSample("ImporterContext.LoadNodes"); Nodes.Add(NodeImporter.ImportNode(GLTF.nodes[i], i).transform); + Profiler.EndSample(); } - Profiler.EndSample(); } await awaitCaller.NextFrame(); @@ -221,12 +222,13 @@ namespace UniGLTF var nodes = new List(); if (Nodes.Count > 0) { - Profiler.BeginSample("NodeImporter.BuildHierarchy"); for (var i = 0; i < Nodes.Count; ++i) { + await awaitCaller.NextFrameIfTimedOut(); + Profiler.BeginSample("NodeImporter.BuildHierarchy"); nodes.Add(NodeImporter.BuildHierarchy(GLTF, i, Nodes, Meshes)); + Profiler.EndSample(); } - Profiler.EndSample(); await awaitCaller.NextFrame(); } @@ -236,12 +238,13 @@ namespace UniGLTF // skinning if (nodes.Count > 0) { - Profiler.BeginSample("NodeImporter.SetupSkinning"); for (var i = 0; i < nodes.Count; ++i) { + await awaitCaller.NextFrameIfTimedOut(); + Profiler.BeginSample("NodeImporter.SetupSkinning"); NodeImporter.SetupSkinning(Data, nodes, i, inverter); + Profiler.EndSample(); } - Profiler.EndSample(); await awaitCaller.NextFrame(); } @@ -273,6 +276,7 @@ namespace UniGLTF var textures = TextureDescriptorGenerator.Get().GetEnumerable(); foreach (var param in textures) { + await awaitCaller.NextFrameIfTimedOut(); var tex = await TextureFactory.GetTextureAsync(param, awaitCaller); } } @@ -295,6 +299,7 @@ namespace UniGLTF { for (int i = 0; i < Data.GLTF.materials.Count; ++i) { + await awaitCaller.NextFrameIfTimedOut(); var param = MaterialDescriptorGenerator.Get(Data, i); var material = await MaterialFactory.LoadAsync(param, TextureFactory.GetTextureAsync, awaitCaller); }