@@ -362,13 +362,7 @@ public void TestExportCamera(){
362
362
/// <param name="filename">Filename.</param>
363
363
/// <param name="cameraObj">Camera object.</param>
364
364
private Camera ExportCamera ( string filename , GameObject cameraObj ) {
365
- ModelExporter . ExportObject ( filename , cameraObj ) ;
366
-
367
- GameObject fbxObj = AssetDatabase . LoadMainAssetAtPath ( filename ) as GameObject ;
368
- var fbxCamera = fbxObj . GetComponent < Camera > ( ) ;
369
-
370
- Assert . IsNotNull ( fbxCamera ) ;
371
- return fbxCamera ;
365
+ return ExportComponent < Camera > ( filename , cameraObj ) ;
372
366
}
373
367
374
368
private void CompareCameraValues ( Camera camera , Camera fbxCamera , float delta = 0.001f ) {
@@ -377,5 +371,91 @@ private void CompareCameraValues(Camera camera, Camera fbxCamera, float delta=0.
377
371
Assert . AreEqual ( camera . nearClipPlane , fbxCamera . nearClipPlane , delta ) ;
378
372
Assert . AreEqual ( camera . farClipPlane , fbxCamera . farClipPlane , delta ) ;
379
373
}
374
+
375
+ /// <summary>
376
+ /// Exports the GameObject and returns component of type T.
377
+ /// </summary>
378
+ /// <returns>The component.</returns>
379
+ /// <param name="filename">Filename.</param>
380
+ /// <param name="obj">Object.</param>
381
+ /// <typeparam name="T">The component type.</typeparam>
382
+ private T ExportComponent < T > ( string filename , GameObject obj ) where T : Component {
383
+ ModelExporter . ExportObject ( filename , obj ) ;
384
+
385
+ GameObject fbxObj = AssetDatabase . LoadMainAssetAtPath ( filename ) as GameObject ;
386
+ var fbxComponent = fbxObj . GetComponent < T > ( ) ;
387
+
388
+ Assert . IsNotNull ( fbxComponent ) ;
389
+ return fbxComponent ;
390
+ }
391
+
392
+ [ Test ]
393
+ public void TestComponentAttributeExport ( )
394
+ {
395
+ // test exporting of normals, tangents, uvs, and vertex colors
396
+ // Note: won't test binormals as they are not imported into Unity
397
+
398
+ var quad = GameObject . CreatePrimitive ( PrimitiveType . Quad ) ;
399
+ var quadMeshFilter = quad . GetComponent < MeshFilter > ( ) ;
400
+ var quadMesh = quadMeshFilter . sharedMesh ;
401
+
402
+ // create a simple mesh (just a quad)
403
+ // this is to make sure we don't accidentally modify the
404
+ // Unity internal Quad primitive.
405
+ var mesh = new Mesh ( ) ;
406
+ mesh . name = "Test" ;
407
+
408
+ mesh . vertices = quadMesh . vertices ;
409
+ mesh . triangles = quadMesh . triangles ;
410
+ mesh . tangents = quadMesh . tangents ;
411
+ mesh . normals = quadMesh . normals ;
412
+ mesh . colors = quadMesh . colors ;
413
+
414
+ Assert . IsNotNull ( mesh . tangents ) ;
415
+ Assert . IsNotNull ( mesh . vertices ) ;
416
+ Assert . IsNotNull ( mesh . triangles ) ;
417
+ Assert . IsNotNull ( mesh . normals ) ;
418
+ Assert . IsNotNull ( mesh . colors ) ;
419
+
420
+ var gameObject = new GameObject ( ) ;
421
+ var meshFilter = gameObject . AddComponent < MeshFilter > ( ) ;
422
+
423
+ meshFilter . sharedMesh = mesh ;
424
+
425
+ // don't need quad anymore
426
+ Object . DestroyImmediate ( quad ) ;
427
+
428
+ // try exporting default values
429
+ string filename = GetRandomFbxFilePath ( ) ;
430
+ var fbxMeshFilter = ExportComponent < MeshFilter > ( filename , gameObject ) ;
431
+ var fbxMesh = fbxMeshFilter . sharedMesh ;
432
+ CompareMeshComponentAttributes ( mesh , fbxMesh ) ;
433
+
434
+ // try exporting mesh without vertex colors
435
+ mesh . colors = new Color [ ] { } ;
436
+
437
+ filename = GetRandomFbxFilePath ( ) ;
438
+ fbxMeshFilter = ExportComponent < MeshFilter > ( filename , gameObject ) ;
439
+ fbxMesh = fbxMeshFilter . sharedMesh ;
440
+ CompareMeshComponentAttributes ( mesh , fbxMesh ) ;
441
+
442
+ Object . DestroyImmediate ( mesh ) ;
443
+ }
444
+
445
+ private void CompareMeshComponentAttributes ( Mesh mesh , Mesh fbxMesh )
446
+ {
447
+ Assert . IsNotNull ( fbxMesh ) ;
448
+ Assert . IsNotNull ( fbxMesh . vertices ) ;
449
+ Assert . IsNotNull ( fbxMesh . triangles ) ;
450
+ Assert . IsNotNull ( fbxMesh . normals ) ;
451
+ Assert . IsNotNull ( fbxMesh . colors ) ;
452
+ Assert . IsNotNull ( fbxMesh . tangents ) ;
453
+
454
+ Assert . AreEqual ( mesh . vertices , fbxMesh . vertices ) ;
455
+ Assert . AreEqual ( mesh . triangles , fbxMesh . triangles ) ;
456
+ Assert . AreEqual ( mesh . normals , fbxMesh . normals ) ;
457
+ Assert . AreEqual ( mesh . colors , fbxMesh . colors ) ;
458
+ Assert . AreEqual ( mesh . tangents , fbxMesh . tangents ) ;
459
+ }
380
460
}
381
461
}
0 commit comments