@@ -2228,7 +2228,9 @@ protected int ExportAnimationOnly(
2228
2228
foreach ( var bone in bones ) {
2229
2229
FbxNode node ;
2230
2230
if ( ! ExportGameObjectAndParents (
2231
- bone . gameObject , unityGO , fbxScene , out node , newCenter , exportType , ref numObjectsExported , objectCount , skinnedMesh , boneDict , rootBone , true
2231
+ bone . gameObject , unityGO , fbxScene , out node , newCenter ,
2232
+ exportType , ref numObjectsExported , objectCount ,
2233
+ new SkinnedMeshBoneInfo ( rootBone , skinnedMesh , boneDict )
2232
2234
) ) {
2233
2235
// export cancelled
2234
2236
return - 1 ;
@@ -2264,6 +2266,18 @@ protected int ExportAnimationOnly(
2264
2266
return numObjectsExported ;
2265
2267
}
2266
2268
2269
+ class SkinnedMeshBoneInfo {
2270
+ public Transform rootBone ;
2271
+ public SkinnedMeshRenderer skinnedMesh ;
2272
+ public Dictionary < Transform , int > boneDict ;
2273
+
2274
+ public SkinnedMeshBoneInfo ( Transform root , SkinnedMeshRenderer skinnedMesh , Dictionary < Transform , int > boneDict ) {
2275
+ this . rootBone = root ;
2276
+ this . skinnedMesh = skinnedMesh ;
2277
+ this . boneDict = boneDict ;
2278
+ }
2279
+ }
2280
+
2267
2281
private bool ExportGameObjectAndParents (
2268
2282
GameObject unityGo ,
2269
2283
GameObject rootObject ,
@@ -2273,10 +2287,7 @@ private bool ExportGameObjectAndParents(
2273
2287
TransformExportType exportType ,
2274
2288
ref int exportProgress ,
2275
2289
int objectCount ,
2276
- SkinnedMeshRenderer skinnedMesh = null ,
2277
- Dictionary < Transform , int > boneDict = null ,
2278
- Transform rootBone = null ,
2279
- bool isBone = false )
2290
+ SkinnedMeshBoneInfo boneInfo = null )
2280
2291
{
2281
2292
// node already exists
2282
2293
if ( MapUnityObjectToFbxNode . TryGetValue ( unityGo , out fbxNode ) ) {
@@ -2308,18 +2319,18 @@ private bool ExportGameObjectAndParents(
2308
2319
fbxNode . SetTransformationInheritType ( FbxTransform . EInheritType . eInheritRSrs ) ;
2309
2320
2310
2321
// TODO: check if GO is a bone and export accordingly
2311
- var exportedBoneTransform = isBone ?
2312
- ExportBoneTransform ( fbxNode , fbxScene , unityGo . transform , rootBone , skinnedMesh , boneDict ) : false ;
2322
+ var exportedBoneTransform = boneInfo != null ?
2323
+ ExportBoneTransform ( fbxNode , fbxScene , unityGo . transform , boneInfo ) : false ;
2313
2324
2314
2325
// export regular transform if we are not a bone or failed to export as a bone
2315
2326
if ( ! exportedBoneTransform ) {
2316
2327
ExportTransform ( unityGo . transform , fbxNode , newCenter , exportType ) ;
2317
2328
}
2318
2329
2319
2330
if ( unityGo . transform . parent != null || unityGo . transform . parent != rootObject . transform . parent ) {
2320
- var parentIsBone = false ;
2321
- if ( isBone && rootBone != null && unityGo . transform != rootBone ) {
2322
- parentIsBone = true ;
2331
+ SkinnedMeshBoneInfo parentBoneInfo = null ;
2332
+ if ( boneInfo != null && boneInfo . rootBone != null && unityGo . transform != boneInfo . rootBone ) {
2333
+ parentBoneInfo = boneInfo ;
2323
2334
}
2324
2335
2325
2336
FbxNode fbxNodeParent ;
@@ -2332,33 +2343,34 @@ private bool ExportGameObjectAndParents(
2332
2343
TransformExportType . Local ,
2333
2344
ref exportProgress ,
2334
2345
objectCount ,
2335
- skinnedMesh ,
2336
- boneDict ,
2337
- rootBone ,
2338
- parentIsBone
2346
+ parentBoneInfo
2339
2347
) ) {
2340
2348
// export cancelled
2341
2349
return false ;
2342
2350
}
2343
2351
fbxNodeParent . AddChild ( fbxNode ) ;
2344
2352
}
2345
2353
2346
- if ( unityGo == rootObject ) {
2354
+ if ( unityGo == rootObject || unityGo . transform . parent == null ) {
2347
2355
fbxScene . GetRootNode ( ) . AddChild ( fbxNode ) ;
2348
2356
}
2349
2357
2350
2358
return true ;
2351
2359
}
2352
2360
2353
2361
private bool ExportBoneTransform (
2354
- FbxNode fbxNode , FbxScene fbxScene , Transform unityBone , Transform rootBone ,
2355
- SkinnedMeshRenderer skinnedMesh , Dictionary < Transform , int > boneDict
2362
+ FbxNode fbxNode , FbxScene fbxScene , Transform unityBone , SkinnedMeshBoneInfo boneInfo
2356
2363
) {
2357
- if ( skinnedMesh == null || boneDict == null || unityBone == null ) {
2364
+ if ( boneInfo != null || boneInfo . skinnedMesh == null || boneInfo . boneDict == null || unityBone == null ) {
2358
2365
return false ;
2359
2366
}
2367
+
2368
+ var rootBone = boneInfo . rootBone ;
2369
+ var skinnedMesh = boneInfo . skinnedMesh ;
2370
+ var boneDict = boneInfo . boneDict ;
2371
+
2360
2372
if ( rootBone == null ) {
2361
- rootBone = skinnedMesh . rootBone ;
2373
+ boneInfo . rootBone = skinnedMesh . rootBone ;
2362
2374
}
2363
2375
2364
2376
var fbxSkeleton = fbxNode . GetSkeleton ( ) ;
@@ -2481,6 +2493,7 @@ protected void GetObjectsInAnimationClips(
2481
2493
GameObject animationRootObject ,
2482
2494
ref AnimationOnlyExportData exportData
2483
2495
) {
2496
+ // TODO: find a better way to keep track of which components + properties we support
2484
2497
var cameraProps = new List < string > { "field of view" } ;
2485
2498
var lightProps = new List < string > { "m_Intensity" , "m_SpotAngle" , "m_Color.r" , "m_Color.g" , "m_Color.b" } ;
2486
2499
@@ -2497,7 +2510,6 @@ ref AnimationOnlyExportData exportData
2497
2510
if ( ! uniObj ) {
2498
2511
continue ;
2499
2512
}
2500
- //Debug.LogWarning (uniObj.name + ": " + uniCurveBinding.propertyName);
2501
2513
2502
2514
GameObject unityGo = GetGameObject ( uniObj ) ;
2503
2515
if ( ! unityGo ) {
0 commit comments