Last active
November 10, 2024 05:28
-
-
Save FleshMobProductions/f598096b705f6a9c96beb58e284303f1 to your computer and use it in GitHub Desktop.
Double click a FBX file inside Unity and open it inside Blender properly (Windows only. User needs to edit blenderPath to point to their installation)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Place inside an "Editor" folder | |
#if PLATFORM_STANDALONE_WIN | |
using System; | |
using System.IO; | |
using UnityEditor; | |
using UnityEditor.Callbacks; | |
using UnityEngine; | |
public static class FbxBlenderOpeningProcessor | |
{ | |
// Set this variable to your installation path. | |
// If the path was added to your "PATH" system environment variable, it should be | |
// possible to just use "blender" as path | |
private static readonly string blenderPath = @"D:\Applications\Blender_3.0\blender.exe"; | |
[OnOpenAsset] | |
public static bool OnOpenAsset(int instanceId, int line) | |
{ | |
UnityEngine.Object obj = EditorUtility.InstanceIDToObject(instanceId); | |
string assetPath = AssetDatabase.GetAssetPath(instanceId); | |
if (string.Equals(Path.GetExtension(assetPath), ".fbx", StringComparison.OrdinalIgnoreCase) | |
&& obj is GameObject) | |
{ | |
Debug.Log($"Open FBX file \"{assetPath}\" in Blender"); | |
OpenAsFbxInBlender(assetPath); | |
return true; // Prevent Unity from further processing the opening task | |
} | |
return false; // Continue builtin handling | |
} | |
private static void OpenAsFbxInBlender(string assetPath) | |
{ | |
string assetPathPythonFull = Path.GetFullPath(assetPath).Replace("\\", "/"); | |
// Delete default cube and import fbx: | |
string[] instructions = new string[] | |
{ | |
"import bpy", | |
"bpy.data.objects['Cube'].select_set(True)", | |
"bpy.ops.object.delete()", | |
$"bpy.ops.import_scene.fbx( filepath = '{assetPathPythonFull}' )" | |
}; | |
string pythonLoadFbxArgument = CreatePythonExpressionArgument(instructions); | |
StartBlenderWithArguments(pythonLoadFbxArgument); | |
} | |
private static string CreatePythonExpressionArgument(string[] pythonLines) | |
{ | |
// Multi line instructions possible using instruction separation with ; | |
return $"--python-expr \"{string.Join(";", pythonLines)}\""; | |
} | |
private static void StartBlenderWithArguments(string arguments) | |
{ | |
System.Diagnostics.Process process = new System.Diagnostics.Process(); | |
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo | |
{ | |
FileName = blenderPath, | |
UseShellExecute = false, | |
RedirectStandardOutput = true, | |
CreateNoWindow = true, | |
Arguments = arguments | |
}; | |
process.StartInfo = startInfo; | |
process.Start(); | |
} | |
} | |
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Further resources and links for those interested. | |
Official Blender command line docs: https://docs.blender.org/manual/en/latest/advanced/command_line/arguments.html | |
Run command line from C#: https://stackoverflow.com/questions/1469764/run-command-prompt-commands | |
Delete the Default Cube using Blender Python: https://www.youtube.com/watch?v=flP4csFnIOc | |
Blender Python: Delete all scene objects and import FBX: https://wtools.io/paste-code/y3B | |
Pass command line arguents to a blender python script: | |
https://b3d.interplanety.org/en/how-to-pass-command-line-arguments-to-a-blender-python-script-or-add-on/ | |
Execute multiple lines of python with --python-expr in cmd: | |
https://stackoverflow.com/questions/49783426/running-blender-from-command-prompt-beginner | |
Command for importing an FBX file through Python in Blender:: | |
https://blender.stackexchange.com/questions/65815/how-do-i-import-a-fbx-file-into-blender-from-command-line |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment