@@ -362,13 +362,7 @@ public void TestExportCamera(){
362362 /// <param name="filename">Filename.</param>
363363 /// <param name="cameraObj">Camera object.</param>
364364 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 ) ;
372366 }
373367
374368 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.
377371 Assert . AreEqual ( camera . nearClipPlane , fbxCamera . nearClipPlane , delta ) ;
378372 Assert . AreEqual ( camera . farClipPlane , fbxCamera . farClipPlane , delta ) ;
379373 }
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+ }
380460 }
381461}
0 commit comments