public static IEnumerable <Validation> Validate(GameObject ExportRoot) { if (!ExportRoot) { yield break; } if (MeshInformations != null) { if (HasRotationOrScale(ExportRoot) || MeshInformations.Any(x => x.ExportBlendShapeCount > 0 && !x.HasSkinning)) { // 正規化必用 if (EnableFreeze) { // する yield return(Validation.Info("PoseFreeze checked. OK")); } else { // しない yield return(Validation.Warning(ValidationMessages.ROTATION_OR_SCALEING_INCLUDED_IN_NODE.Msg())); } } else { // 不要 if (EnableFreeze) { // する yield return(Validation.Warning(ValidationMessages.IS_POSE_FREEZE_DONE.Msg())); } else { // しない yield return(Validation.Info("Root OK")); } } } // // animator // var animator = ExportRoot.GetComponent <Animator>(); if (animator == null) { yield return(Validation.Critical(ValidationMessages.NO_ANIMATOR.Msg())); yield break; } // avatar var avatar = animator.avatar; if (avatar == null) { yield return(Validation.Critical(ValidationMessages.NO_AVATAR_IN_ANIMATOR.Msg())); yield break; } if (!avatar.isValid) { yield return(Validation.Critical(ValidationMessages.AVATAR_IS_NOT_VALID.Msg())); yield break; } if (!avatar.isHuman) { yield return(Validation.Critical(ValidationMessages.AVATAR_IS_NOT_HUMANOID.Msg())); yield break; } // direction { var l = animator.GetBoneTransform(HumanBodyBones.LeftUpperLeg); var r = animator.GetBoneTransform(HumanBodyBones.RightUpperLeg); var f = GetForward(l, r); if (Vector3.Dot(f, Vector3.forward) < 0.8f) { yield return(Validation.Critical(ValidationMessages.FACE_Z_POSITIVE_DIRECTION.Msg())); yield break; } } { var lu = animator.GetBoneTransform(HumanBodyBones.LeftUpperArm); var ll = animator.GetBoneTransform(HumanBodyBones.LeftLowerArm); var ru = animator.GetBoneTransform(HumanBodyBones.RightUpperArm); var rl = animator.GetBoneTransform(HumanBodyBones.RightLowerArm); if (Vector3.Dot((ll.position - lu.position).normalized, Vector3.left) < 0.8f || Vector3.Dot((rl.position - ru.position).normalized, Vector3.right) < 0.8f) { yield return(Validation.Error(ValidationMessages.NOT_TPOSE.Msg())); } } var jaw = animator.GetBoneTransform(HumanBodyBones.Jaw); if (jaw != null) { yield return(Validation.Warning(ValidationMessages.JAW_BONE_IS_INCLUDED.Msg())); } }