Skip to content

Commit b16a673

Browse files
committed
export camera as child node if mesh exists
- if node has a mesh, create a child node to add the camera to - if node doesn't have a mesh, export camera on fbxNode
1 parent 8132b8b commit b16a673

File tree

1 file changed

+21
-8
lines changed

1 file changed

+21
-8
lines changed

Assets/FbxExporters/Editor/FbxExporter.cs

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -766,7 +766,7 @@ protected bool ExportInstance (GameObject unityGo, FbxNode fbxNode, FbxScene fbx
766766
/// <summary>
767767
/// Exports camera component
768768
/// </summary>
769-
protected bool ExportCamera (GameObject unityGO, FbxScene fbxScene, FbxNode fbxNode)
769+
protected bool ExportCamera (GameObject unityGO, FbxScene fbxScene, FbxNode fbxNode, bool addAsChildNode=false)
770770
{
771771
Camera unityCamera = unityGO.GetComponent<Camera> ();
772772
if (unityCamera == null) {
@@ -806,22 +806,29 @@ protected bool ExportCamera (GameObject unityGO, FbxScene fbxScene, FbxNode fbxN
806806
// FarPlane
807807
fbxCamera.SetFarPlane (unityCamera.farClipPlane*100);
808808

809+
FbxNode cameraNode = fbxNode;
810+
// fbxNode already has a node attribute, so add the camera as a child of fbxNode
811+
if (addAsChildNode) {
812+
cameraNode = FbxNode.Create (fbxScene, GetUniqueName (unityGO.name + "_Camera"));
813+
fbxNode.AddChild (cameraNode);
814+
}
815+
809816
// Export backgroundColor as a custom property
810817
// NOTE: export on fbxNode so that it will show up in Maya
811-
ExportColorProperty (fbxNode, unityCamera.backgroundColor,
818+
ExportColorProperty (cameraNode, unityCamera.backgroundColor,
812819
MakeName("backgroundColor"),
813820
"The color with which the screen will be cleared.");
814821

815822
// Export clearFlags as a custom property
816823
// NOTE: export on fbxNode so that it will show up in Maya
817-
ExportIntProperty (fbxNode, (int)unityCamera.clearFlags,
824+
ExportIntProperty (cameraNode, (int)unityCamera.clearFlags,
818825
MakeName("clearFlags"),
819826
"How the camera clears the background.");
820827

821-
fbxNode.SetNodeAttribute (fbxCamera);
828+
cameraNode.SetNodeAttribute (fbxCamera);
822829

823830
// make the last camera exported the default camera
824-
DefaultCamera = fbxNode.GetName ();
831+
DefaultCamera = cameraNode.GetName ();
825832

826833
return true;
827834
}
@@ -926,11 +933,17 @@ protected int ExportComponents (
926933

927934
ExportTransform ( unityGo.transform, fbxNode, newCenter, exportType);
928935

929-
// try exporting mesh as an instance or camera, export regularly if we cannot
930-
if (!ExportInstance (unityGo, fbxNode, fbxScene) && !ExportCamera(unityGo, fbxScene, fbxNode)) {
931-
ExportMesh (unityGo, fbxNode);
936+
// try export mesh
937+
bool exportedMesh = ExportInstance (unityGo, fbxNode, fbxScene);
938+
if (!exportedMesh) {
939+
exportedMesh = ExportMesh (unityGo, fbxNode);
932940
}
933941

942+
// try export camera
943+
// if a mesh has already been added to fbxNode, add camera as child node of fbxNode
944+
bool addAsChildNode = exportedMesh? true : false; // adding this extra step so it's clearer what we are passing
945+
ExportCamera(unityGo, fbxScene, fbxNode, addAsChildNode);
946+
934947
if (Verbose)
935948
Debug.Log (string.Format ("exporting {0}", fbxNode.GetName ()));
936949

0 commit comments

Comments
 (0)