示例#1
0
 IEnumerable <SubAssetKey> EnumerateExpressinKeys(UniGLTF.Extensions.VRMC_vrm.Expressions expressions)
 {
     if (expressions?.Preset?.Happy != null)
     {
         yield return(ExpressionKey.Happy.SubAssetKey);
     }
     if (expressions?.Preset?.Angry != null)
     {
         yield return(ExpressionKey.Angry.SubAssetKey);
     }
     if (expressions?.Preset?.Sad != null)
     {
         yield return(ExpressionKey.Sad.SubAssetKey);
     }
     if (expressions?.Preset?.Relaxed != null)
     {
         yield return(ExpressionKey.Relaxed.SubAssetKey);
     }
     if (expressions?.Preset?.Surprised != null)
     {
         yield return(ExpressionKey.Surprised.SubAssetKey);
     }
     if (expressions?.Preset?.Aa != null)
     {
         yield return(ExpressionKey.Aa.SubAssetKey);
     }
     if (expressions?.Preset?.Ih != null)
     {
         yield return(ExpressionKey.Ih.SubAssetKey);
     }
     if (expressions?.Preset?.Ou != null)
     {
         yield return(ExpressionKey.Ou.SubAssetKey);
     }
     if (expressions?.Preset?.Ee != null)
     {
         yield return(ExpressionKey.Ee.SubAssetKey);
     }
     if (expressions?.Preset?.Oh != null)
     {
         yield return(ExpressionKey.Oh.SubAssetKey);
     }
     if (expressions?.Preset?.Blink != null)
     {
         yield return(ExpressionKey.Blink.SubAssetKey);
     }
     if (expressions?.Preset?.BlinkLeft != null)
     {
         yield return(ExpressionKey.BlinkLeft.SubAssetKey);
     }
     if (expressions?.Preset?.BlinkRight != null)
     {
         yield return(ExpressionKey.BlinkRight.SubAssetKey);
     }
     if (expressions?.Preset?.LookUp != null)
     {
         yield return(ExpressionKey.LookUp.SubAssetKey);
     }
     if (expressions?.Preset?.LookDown != null)
     {
         yield return(ExpressionKey.LookDown.SubAssetKey);
     }
     if (expressions?.Preset?.LookLeft != null)
     {
         yield return(ExpressionKey.LookLeft.SubAssetKey);
     }
     if (expressions?.Preset?.LookRight != null)
     {
         yield return(ExpressionKey.LookRight.SubAssetKey);
     }
     foreach (var kv in expressions.Custom)
     {
         yield return(ExpressionKey.CreateCustom(kv.Key).SubAssetKey);
     }
 }
示例#2
0
        public static void Check(JsonNode vrm0, UniGLTF.Extensions.VRMC_vrm.Expressions vrm1,
                                 MigrationVrm.MeshIndexToNodeIndexFunc meshToNode)
        {
            foreach (var blendShape in vrm0["blendShapeGroups"].ArrayItems())
            {
                var name = blendShape["presetName"].GetString().ToLower();
                switch (name)
                {
                case "a": Check(name, blendShape, vrm1.Preset.Aa, meshToNode); break;

                case "i": Check(name, blendShape, vrm1.Preset.Ih, meshToNode); break;

                case "u": Check(name, blendShape, vrm1.Preset.Ou, meshToNode); break;

                case "e": Check(name, blendShape, vrm1.Preset.Ee, meshToNode); break;

                case "o": Check(name, blendShape, vrm1.Preset.Oh, meshToNode); break;

                case "blink": Check(name, blendShape, vrm1.Preset.Blink, meshToNode); break;

                case "joy": Check(name, blendShape, vrm1.Preset.Happy, meshToNode); break;

                case "angry": Check(name, blendShape, vrm1.Preset.Angry, meshToNode); break;

                case "sorrow": Check(name, blendShape, vrm1.Preset.Sad, meshToNode); break;

                case "fun": Check(name, blendShape, vrm1.Preset.Relaxed, meshToNode); break;

                case "lookup": Check(name, blendShape, vrm1.Preset.LookUp, meshToNode); break;

                case "lookdown": Check(name, blendShape, vrm1.Preset.LookDown, meshToNode); break;

                case "lookleft": Check(name, blendShape, vrm1.Preset.LookLeft, meshToNode); break;

                case "lookright": Check(name, blendShape, vrm1.Preset.LookRight, meshToNode); break;

                case "blink_l": Check(name, blendShape, vrm1.Preset.BlinkLeft, meshToNode); break;

                case "blink_r": Check(name, blendShape, vrm1.Preset.BlinkRight, meshToNode); break;

                case "neutral": Check(name, blendShape, vrm1.Preset.Neutral, meshToNode); break;

                default:
                {
                    string found = default;
                    foreach (var kv in vrm1.Custom)
                    {
                        if (kv.Key.ToLower() == name)
                        {
                            Check(name, blendShape, kv.Value, meshToNode);
                            found = kv.Key;
                            break;
                        }
                    }
                    if (found == null)
                    {
                        throw new MigrationException(name, $"expression not migrated");
                    }
                    break;
                }
                }
            }
        }