Skip to content

Commit e0defcc

Browse files
committed
move import functionality into a global function
1 parent 7f06b71 commit e0defcc

File tree

1 file changed

+85
-64
lines changed

1 file changed

+85
-64
lines changed

Assets/Integrations/Autodesk/max/scripts/UnityFbxForMaxPlugin.ms

Lines changed: 85 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -2,46 +2,50 @@
22
macroScript UnityImport category:"Unity" tooltip:"Import an FBX file from a Unity project and auto-configure for exporting"
33
(
44
rootDummyName = "UnityFbxExportSets"
5-
6-
origObjects = #()
7-
currSetName = ""
8-
unityFbxFilePathAttr = ""
9-
unityFbxFileNameAttr = ""
10-
unityAnimFileNameAttr = ""
11-
unityAnimFilePathAttr = ""
12-
isAnimFile = false
135

146
persistent global unityAskSetUnits
157

16-
global afterImport
17-
fn afterImport = (
18-
unityFbxExportSet = #()
19-
currSet = selectionSets[currSetName]
20-
if not isdeleted currSet and currSet != undefined then (
21-
unityFbxExportSet = unityFbxExportSet + currSet
22-
)
23-
for obj in objects do(
24-
if findItem origObjects obj == 0 then(
25-
-- add to selection set
26-
append unityFbxExportSet obj
8+
global unityAfterFbxImport
9+
fn unityAfterFbxImport = (
10+
local callbackVars = unityImportCallbackVarsInstance
11+
if(callbackVars != undefined) then(
12+
local currSetName = callbackVars.currSetName
13+
local origObjects = callbackVars.origObjects
14+
local unityFbxFilePathAttr = callbackVars.unityFbxFilePathAttr
15+
local unityFbxFileNameAttr = callbackVars.unityFbxFileNameAttr
16+
local unityAnimFileNameAttr = callbackVars.unityAnimFileNameAttr
17+
local unityAnimFilePathAttr = callbackVars.unityAnimFilePathAttr
18+
local isAnimFile = callbackVars.isAnimFile
19+
20+
unityFbxExportSet = #()
21+
currSet = selectionSets[currSetName]
22+
if not isdeleted currSet and currSet != undefined then (
23+
unityFbxExportSet = unityFbxExportSet + currSet
2724
)
25+
for obj in objects do(
26+
if findItem origObjects obj == 0 then(
27+
-- add to selection set
28+
append unityFbxExportSet obj
29+
)
30+
)
31+
selectionSets[currSetName] = unityFbxExportSet
32+
33+
-- check if dummy already exists in scene
34+
unityDummy = UnityImportHelpers.getOrCreateSettingsDummy currSetName
35+
36+
if((not isAnimFile) or unityDummy.unityData.modelFilePath == "") do (
37+
unityDummy.unityData.modelFilePath = unityFbxFilePathAttr
38+
)
39+
if((not isAnimFile) or unityDummy.unityData.modelFileName == "") do (
40+
unityDummy.unityData.modelFileName = unityFbxFileNameAttr
41+
)
42+
43+
unityDummy.unityData.animFilePath = unityAnimFilePathAttr
44+
unityDummy.unityData.animFileName = unityAnimFileNameAttr
45+
46+
unityRootDummy = UnityImportHelpers.getOrCreateRootDummy rootDummyName
47+
unityDummy.parent = unityRootDummy
2848
)
29-
selectionSets[currSetName] = unityFbxExportSet
30-
31-
-- check if dummy already exists in scene
32-
unityDummy = UnityImportHelpers.getOrCreateSettingsDummy currSetName
33-
34-
if((not isAnimFile) or unityDummy.unityData.modelFilePath == "") do (
35-
unityDummy.unityData.modelFilePath = unityFbxFilePathAttr
36-
)
37-
if((not isAnimFile) or unityDummy.unityData.modelFileName == "") do (
38-
unityDummy.unityData.modelFileName = unityFbxFileNameAttr
39-
)
40-
unityDummy.unityData.animFilePath = unityAnimFilePathAttr
41-
unityDummy.unityData.animFileName = unityAnimFileNameAttr
42-
43-
unityRootDummy = UnityImportHelpers.getOrCreateRootDummy rootDummyName
44-
unityDummy.parent = unityRootDummy
4549
);
4650

4751
-- Make sure the FbxImporter plugin is loaded
@@ -73,35 +77,7 @@ macroScript UnityImport category:"Unity" tooltip:"Import an FBX file from a Unit
7377
)
7478
)
7579

76-
unityFbxFilePathAttr = ""
77-
for fbxFileName in fbxFileNames do (
78-
-- Get all objects in scene before importAction
79-
origObjects = objects as array
80-
81-
unityFbxFilePathAttr = getFilenamePath fbxFileName
82-
unityFbxFileNameAttr = filenameFromPath fbxFileName
83-
unityFbxFileName = getFilenameFile fbxFileName
84-
85-
unityAnimFilePathAttr = unityFbxFilePathAttr
86-
unityAnimFileNameAttr = unityFbxFileNameAttr
87-
88-
-- check if importing an animation file (contains @ symbol)
89-
local isAnimFile = false
90-
if(matchPattern unityFbxFileName pattern:"*@*") do (
91-
isAnimFile = true
92-
unityFbxFileName = (filterString unityFbxFileName "@")[1]
93-
)
94-
95-
currSetName = unityFbxFileName + unityExportSetPostFix
96-
97-
callbacks.addScript #postImport ("afterImport()") id:#unityPlugin
98-
99-
importFile fbxFileName #noPrompt using:FBXIMP
100-
101-
callbacks.removeScripts #postImport id:#unityPlugin
102-
)
103-
104-
UnityImportHelpers.switchProject unityFbxFilePathAttr
80+
UnityImportHelpers.importFiles fbxFileNames
10581
)
10682
)
10783
macroScript UnityExport category:"Unity" tooltip:"Export models and animation to Unity"
@@ -116,6 +92,18 @@ macroScript UnityExportModel category:"Unity" tooltip:"Export models to Unity"
11692

11793
global unityExportSetPostFix = "_UnityExportSet"
11894

95+
struct UnityImportCallbackVars (
96+
origObjects = #(),
97+
currSetName = "",
98+
unityFbxFilePathAttr = "",
99+
unityFbxFileNameAttr = "",
100+
unityAnimFileNameAttr = "",
101+
unityAnimFilePathAttr = "",
102+
isAnimFile = false
103+
)
104+
105+
global unityImportCallbackVarsInstance = undefined
106+
119107
struct UnityImportHelpers (
120108
fn loadUnityFbxImportSettings = (
121109
fbxImportSettings = getINISetting (GetMAXIniFile()) "Unity" "UnityFbxImportSettings"
@@ -203,6 +191,39 @@ struct UnityImportHelpers (
203191
)
204192

205193
unityDummy -- return dummy
194+
),
195+
196+
fn importFiles fbxFileNames = (
197+
local callbackVars = UnityImportCallbackVars()
198+
callbacks.addScript #postImport ("unityAfterFbxImport()") id:#unityPlugin
199+
callbackVars.unityFbxFilePathAttr = ""
200+
for fbxFileName in fbxFileNames do (
201+
-- Get all objects in scene before importAction
202+
callbackVars.origObjects = objects as array
203+
204+
callbackVars.unityFbxFilePathAttr = getFilenamePath fbxFileName
205+
callbackVars.unityFbxFileNameAttr = filenameFromPath fbxFileName
206+
local unityFbxFileName = getFilenameFile fbxFileName
207+
208+
callbackVars.unityAnimFilePathAttr = callbackVars.unityFbxFilePathAttr
209+
callbackVars.unityAnimFileNameAttr = callbackVars.unityFbxFileNameAttr
210+
211+
-- check if importing an animation file (contains @ symbol)
212+
callbackVars.isAnimFile = false
213+
if(matchPattern unityFbxFileName pattern:"*@*") do (
214+
callbackVars.isAnimFile = true
215+
unityFbxFileName = (filterString unityFbxFileName "@")[1]
216+
)
217+
218+
callbackVars.currSetName = unityFbxFileName + unityExportSetPostFix
219+
220+
unityImportCallbackVarsInstance = callbackVars
221+
222+
importFile fbxFileName #noPrompt using:FBXIMP
223+
)
224+
callbacks.removeScripts #postImport id:#unityPlugin
225+
226+
UnityImportHelpers.switchProject callbackVars.unityFbxFilePathAttr
206227
)
207228
)
208229

0 commit comments

Comments
 (0)