From c369439dc0e799b9d56ee87871355b3c7d72c5a9 Mon Sep 17 00:00:00 2001 From: ousttrue Date: Thu, 26 Sep 2024 19:57:17 +0900 Subject: [PATCH] =?UTF-8?q?vrm-1.0=20import=20=E6=99=82=E3=81=AE=20index?= =?UTF-8?q?=20check.=20node.mesh=20=E3=81=82=E3=82=8B=E3=81=8B=EF=BC=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../VRM10/Runtime/IO/ExpressionExtensions.cs | 22 ++++++++++++++----- Assets/VRM10/Runtime/IO/Vrm10Importer.cs | 21 +++++++++++------- 2 files changed, 29 insertions(+), 14 deletions(-) diff --git a/Assets/VRM10/Runtime/IO/ExpressionExtensions.cs b/Assets/VRM10/Runtime/IO/ExpressionExtensions.cs index 18bb973eb..402a089c6 100644 --- a/Assets/VRM10/Runtime/IO/ExpressionExtensions.cs +++ b/Assets/VRM10/Runtime/IO/ExpressionExtensions.cs @@ -8,13 +8,23 @@ namespace UniVRM10 { public static class ExpressionExtensions { - public static UniVRM10.MorphTargetBinding Build10(this MorphTargetBind bind, GameObject root, Vrm10Importer.ModelMap loader, VrmLib.Model model) + public static MorphTargetBinding? Build10(this MorphTargetBind bind, GameObject root, Vrm10Importer.ModelMap loader, VrmLib.Model model) { - var libNode = model.Nodes[bind.Node.Value]; - var node = loader.Nodes[libNode].transform; - var mesh = loader.Meshes[libNode.MeshGroup]; - var relativePath = node.RelativePathFrom(root.transform); - return new UniVRM10.MorphTargetBinding(relativePath, bind.Index.Value, bind.Weight.Value); + if (bind.Node.TryGetValidIndex(model.Nodes.Count, out var nodeIndex)) + { + var libNode = model.Nodes[nodeIndex]; + if (libNode.MeshGroup == null) + { + return default; + } + var node = loader.Nodes[libNode].transform; + var relativePath = node.RelativePathFrom(root.transform); + return new MorphTargetBinding(relativePath, bind.Index.Value, bind.Weight.Value); + } + else + { + return default; + } } public static UniVRM10.MaterialColorBinding? Build10(this MaterialColorBind bind, IReadOnlyList materials) diff --git a/Assets/VRM10/Runtime/IO/Vrm10Importer.cs b/Assets/VRM10/Runtime/IO/Vrm10Importer.cs index be77bb089..ace9cb3bf 100644 --- a/Assets/VRM10/Runtime/IO/Vrm10Importer.cs +++ b/Assets/VRM10/Runtime/IO/Vrm10Importer.cs @@ -316,7 +316,10 @@ namespace UniVRM10 if (expression.MorphTargetBinds != null) { - clip.MorphTargetBindings = expression.MorphTargetBinds?.Select(x => x.Build10(Root, m_map, m_model)) + clip.MorphTargetBindings = expression.MorphTargetBinds? + .Select(x => x.Build10(Root, m_map, m_model)) + .Where(x => x.HasValue) + .Select(x => x.Value) .ToArray(); } else @@ -492,15 +495,17 @@ namespace UniVRM10 var fp = vrmExtension.FirstPerson; foreach (var x in fp.MeshAnnotations) { - var node = Nodes[x.Node.Value]; - var relative = node.RelativePathFrom(Root.transform); - vrm.FirstPerson.Renderers.Add(new RendererFirstPersonFlags + if (x.Node.TryGetValidIndex(Nodes.Count, out var index)) { - FirstPersonFlag = x.Type, - Renderer = relative, - }); + var node = Nodes[x.Node.Value]; + var relative = node.RelativePathFrom(Root.transform); + vrm.FirstPerson.Renderers.Add(new RendererFirstPersonFlags + { + FirstPersonFlag = x.Type, + Renderer = relative, + }); + } } - } else { // default 値を割り当てる