@@ -502,14 +502,29 @@ meshInfo.Vertices [v].z*UnitScaleFactor
502
502
return fbxMesh ;
503
503
}
504
504
505
+ /// <summary>
506
+ /// Takes a Quaternion and returns a Euler with XYZ rotation order.
507
+ /// </summary>
508
+ /// <returns>Euler with XYZ rotation order.</returns>
509
+ public static Vector3 QuaternionToXYZEuler ( Quaternion q )
510
+ {
511
+ FbxQuaternion quat = new FbxQuaternion ( q . x , q . y , q . z , q . w ) ;
512
+ FbxAMatrix m = new FbxAMatrix ( ) ;
513
+ m . SetQ ( quat ) ;
514
+ var vector4 = m . GetR ( ) ;
515
+ var result = new Vector3 ( ( float ) vector4 . X , ( float ) vector4 . Y , ( float ) vector4 . Z ) ;
516
+
517
+ return result ;
518
+ }
519
+
505
520
// get a fbxNode's global default position.
506
521
protected void ExportTransform ( UnityEngine . Transform unityTransform , FbxNode fbxNode , TransformExportType exportType )
507
522
{
508
523
// Fbx rotation order is XYZ, but Unity rotation order is ZXY.
509
524
// This causes issues when converting euler to quaternion, causing the final
510
525
// rotation to be slighlty off.
511
- // Fixed if we set the rotation order to the Unity rotation order in the FBX .
512
- fbxNode . SetRotationOrder ( FbxNode . EPivotSet . eSourcePivot , FbxEuler . EOrder . eOrderZXY ) ;
526
+ // Fixed by exporting the rotations as eulers with XYZ rotation order.
527
+ fbxNode . SetRotationOrder ( FbxNode . EPivotSet . eSourcePivot , FbxEuler . EOrder . eOrderXYZ ) ;
513
528
514
529
UnityEngine . Vector3 unityTranslate ;
515
530
UnityEngine . Vector3 unityRotate ;
@@ -523,12 +538,12 @@ protected void ExportTransform (UnityEngine.Transform unityTransform, FbxNode fb
523
538
break ;
524
539
case TransformExportType . Global :
525
540
unityTranslate = unityTransform . position ;
526
- unityRotate = unityTransform . rotation . eulerAngles ;
541
+ unityRotate = QuaternionToXYZEuler ( unityTransform . rotation ) ;
527
542
unityScale = unityTransform . lossyScale ;
528
543
break ;
529
544
default : /*case TransformExportType.Local*/
530
545
unityTranslate = unityTransform . localPosition ;
531
- unityRotate = unityTransform . localRotation . eulerAngles ;
546
+ unityRotate = QuaternionToXYZEuler ( unityTransform . localRotation ) ;
532
547
unityScale = unityTransform . localScale ;
533
548
break ;
534
549
}
@@ -699,6 +714,7 @@ public enum TransformExportType { Local, Global, Zeroed };
699
714
/// </summary>
700
715
public int ExportAll ( IEnumerable < UnityEngine . Object > unityExportSet )
701
716
{
717
+ exportCancelled = false ;
702
718
Verbose = true ;
703
719
try {
704
720
// Create the FBX manager
0 commit comments