@@ -2203,6 +2203,7 @@ protected int ExportAnimationOnly(
2203
2203
) {
2204
2204
// export any bones
2205
2205
var skinnedMeshRenderers = unityGO . GetComponentsInChildren < SkinnedMeshRenderer > ( ) ;
2206
+ int numObjectsExported = exportProgress ;
2206
2207
2207
2208
foreach ( var skinnedMesh in skinnedMeshRenderers ) {
2208
2209
var boneArray = skinnedMesh . bones ;
@@ -2224,18 +2225,24 @@ protected int ExportAnimationOnly(
2224
2225
2225
2226
foreach ( var bone in bones ) {
2226
2227
FbxNode node ;
2227
- ExportGameObjectAndParents (
2228
- bone . gameObject , unityGO , fbxScene , out node , newCenter , exportType , exportProgress , objectCount , skinnedMesh , boneDict , rootBone , true
2229
- ) ;
2228
+ if ( ! ExportGameObjectAndParents (
2229
+ bone . gameObject , unityGO , fbxScene , out node , newCenter , exportType , ref numObjectsExported , objectCount , skinnedMesh , boneDict , rootBone , true
2230
+ ) ) {
2231
+ // export cancelled
2232
+ return - 1 ;
2233
+ }
2230
2234
}
2231
2235
}
2232
2236
2233
2237
// export everything else
2234
2238
foreach ( var go in exportData . goExportSet ) {
2235
2239
FbxNode node ;
2236
- ExportGameObjectAndParents (
2237
- go , unityGO , fbxScene , out node , newCenter , exportType , exportProgress , objectCount
2238
- ) ;
2240
+ if ( ! ExportGameObjectAndParents (
2241
+ go , unityGO , fbxScene , out node , newCenter , exportType , ref numObjectsExported , objectCount
2242
+ ) ) {
2243
+ // export cancelled
2244
+ return - 1 ;
2245
+ }
2239
2246
2240
2247
System . Type compType ;
2241
2248
if ( exportData . exportComponent . TryGetValue ( go , out compType ) ) {
@@ -2252,7 +2259,7 @@ protected int ExportAnimationOnly(
2252
2259
ExportAnimationClip ( animClip . Key , animClip . Value , fbxScene ) ;
2253
2260
}
2254
2261
2255
- return 0 ;
2262
+ return numObjectsExported ;
2256
2263
}
2257
2264
2258
2265
private bool ExportGameObjectAndParents (
@@ -2262,7 +2269,7 @@ private bool ExportGameObjectAndParents(
2262
2269
out FbxNode fbxNode ,
2263
2270
Vector3 newCenter ,
2264
2271
TransformExportType exportType ,
2265
- int exportProgress ,
2272
+ ref int exportProgress ,
2266
2273
int objectCount ,
2267
2274
SkinnedMeshRenderer skinnedMesh = null ,
2268
2275
Dictionary < Transform , int > boneDict = null ,
@@ -2282,6 +2289,15 @@ private bool ExportGameObjectAndParents(
2282
2289
fbxNode = FbxNode . Create ( fbxScene , GetUniqueName ( unityGo . name ) ) ;
2283
2290
MapUnityObjectToFbxNode [ unityGo ] = fbxNode ;
2284
2291
2292
+ exportProgress ++ ;
2293
+ if ( EditorUtility . DisplayCancelableProgressBar (
2294
+ ProgressBarTitle ,
2295
+ string . Format ( "Creating FbxNode {0}/{1}" , exportProgress , objectCount ) ,
2296
+ ( exportProgress / ( float ) objectCount ) * 0.5f ) ) {
2297
+ // cancel silently
2298
+ return false ;
2299
+ }
2300
+
2285
2301
// Default inheritance type in FBX is RrSs, which causes scaling issues in Maya as
2286
2302
// both Maya and Unity use RSrs inheritance by default.
2287
2303
// Note: MotionBuilder uses RrSs inheritance by default as well, though it is possible
@@ -2312,14 +2328,14 @@ private bool ExportGameObjectAndParents(
2312
2328
out fbxNodeParent ,
2313
2329
newCenter ,
2314
2330
TransformExportType . Local ,
2315
- exportProgress ,
2331
+ ref exportProgress ,
2316
2332
objectCount ,
2317
2333
skinnedMesh ,
2318
2334
boneDict ,
2319
2335
rootBone ,
2320
2336
parentIsBone
2321
2337
) ) {
2322
- Debug . LogWarningFormat ( "Failed to export GameObject {0}" , unityGo . transform . parent . name ) ;
2338
+ // export cancelled
2323
2339
return false ;
2324
2340
}
2325
2341
fbxNodeParent . AddChild ( fbxNode ) ;
0 commit comments