@@ -256,5 +256,61 @@ public void TestInstanceNameMatchesFilename()
256
256
257
257
Assert . AreEqual ( Path . GetFileNameWithoutExtension ( path ) , cube . name ) ;
258
258
}
259
+
260
+ [ Test ]
261
+ public void TestConvertModelInstance ( )
262
+ {
263
+ // expected result: prefab is linked to originally exported
264
+ // fbx and no new fbx is created.
265
+
266
+ // create hierarchy (Cube->Sphere)
267
+ var cube = GameObject . CreatePrimitive ( PrimitiveType . Cube ) ;
268
+ var sphere = GameObject . CreatePrimitive ( PrimitiveType . Sphere ) ;
269
+
270
+ sphere . transform . SetParent ( cube . transform ) ;
271
+
272
+ // export using regular model export
273
+ var filename = GetRandomFileNamePath ( ) ;
274
+ GameObject fbxObj = ExportSelection ( filename , cube ) ;
275
+
276
+ // add back to scene
277
+ GameObject fbxInstance = PrefabUtility . InstantiatePrefab ( fbxObj ) as GameObject ;
278
+ Assert . That ( fbxInstance , Is . Not . Null ) ;
279
+
280
+ // attach some components
281
+ var rigidBody = fbxInstance . AddComponent < Rigidbody > ( ) ;
282
+ Assert . That ( rigidBody , Is . Not . Null ) ;
283
+
284
+ var instanceSphere = fbxInstance . transform . GetChild ( 0 ) ;
285
+ Assert . That ( instanceSphere , Is . Not . Null ) ;
286
+
287
+ var boxCollider = instanceSphere . gameObject . AddComponent < BoxCollider > ( ) ;
288
+ Assert . That ( boxCollider , Is . Not . Null ) ;
289
+
290
+ // convert to prefab
291
+ GameObject [ ] converted = ConvertToModel . CreateInstantiatedModelPrefab ( new GameObject [ ] { fbxInstance } , Path . GetDirectoryName ( filename ) ) ;
292
+
293
+ Assert . That ( converted . Length , Is . EqualTo ( 1 ) ) ;
294
+ Assert . That ( converted [ 0 ] , Is . EqualTo ( fbxInstance ) ) ;
295
+
296
+ // check meshes link to original fbx
297
+ var prefabCubeMesh = fbxInstance . GetComponent < MeshFilter > ( ) . sharedMesh ;
298
+ Assert . That ( prefabCubeMesh , Is . Not . Null ) ;
299
+
300
+ var fbxObjAssetPath = AssetDatabase . GetAssetPath ( fbxObj ) ;
301
+
302
+ Assert . That ( AssetDatabase . GetAssetPath ( prefabCubeMesh ) , Is . EqualTo ( fbxObjAssetPath ) ) ;
303
+
304
+ var prefabSphere = fbxInstance . transform . GetChild ( 0 ) ;
305
+ Assert . That ( prefabSphere , Is . Not . Null ) ;
306
+ var prefabSphereMesh = prefabSphere . GetComponent < MeshFilter > ( ) . sharedMesh ;
307
+ Assert . That ( prefabSphere , Is . Not . Null ) ;
308
+
309
+ Assert . That ( AssetDatabase . GetAssetPath ( prefabSphereMesh ) , Is . EqualTo ( fbxObjAssetPath ) ) ;
310
+
311
+ // check that components are still there
312
+ Assert . That ( fbxInstance . GetComponent < Rigidbody > ( ) , Is . Not . Null ) ;
313
+ Assert . That ( prefabSphere . GetComponent < BoxCollider > ( ) , Is . Not . Null ) ;
314
+ }
259
315
}
260
316
}
0 commit comments