Example #1
0
        public override void PostHook(NodeImporter impoter, Transform trans, VGltf.Types.Node gltfNode)
        {
            if (!GE.ContainsExtensionUsed(impoter.Container.Gltf, AvatarType.ExtensionName))
            {
                return;
            }

            AvatarType extAvatar;

            if (!gltfNode.GetExtension(AvatarType.ExtensionName, out extAvatar))
            {
                return;
            }

            var extHD = extAvatar.HumanDescription;

            var hd = new HumanDescription();

            hd.upperArmTwist = extHD.UpperArmTwist;
            hd.lowerArmTwist = extHD.LowerArmTwist;
            hd.upperLegTwist = extHD.UpperLegTwist;
            hd.lowerLegTwist = extHD.LowerLegTwist;
            hd.armStretch    = extHD.ArmStretch;
            hd.legStretch    = extHD.LegStretch;
            hd.feetSpacing   = extHD.FeetSpacing;

            hd.skeleton = extHD.Skeleton.Select(s =>
            {
                // TODO: Coord
                return(new SkeletonBone
                {
                    name = s.Name,
                    position = PrimitiveImporter.AsVector3(s.Position),
                    rotation = PrimitiveImporter.AsQuaternion(s.Rotation),
                    scale = PrimitiveImporter.AsVector3(s.Scale),
                });
            }).ToArray();

            hd.human = extHD.Human.Select(h =>
            {
                var extLimit = h.Limit;
                var limit    = new HumanLimit
                {
                    useDefaultValues = extLimit.UseDefaultValues,
                    min        = PrimitiveImporter.AsVector3(extLimit.Min),
                    max        = PrimitiveImporter.AsVector3(extLimit.Max),
                    center     = PrimitiveImporter.AsVector3(extLimit.Center),
                    axisLength = extLimit.AxisLength,
                };

                return(new HumanBone
                {
                    boneName = h.BoneName,
                    humanName = h.HumanName,
                    limit = limit,
                });
            }).ToArray();

            var go   = trans.gameObject;
            var anim = go.AddComponent <Animator>();

            anim.avatar = AvatarBuilder.BuildHumanAvatar(go, hd);
        }