2
2
macroScript UnityImport category: " Unity" tooltip: " Import an FBX file from a Unity project and auto-configure for exporting"
3
3
(
4
4
rootDummyName = " UnityFbxExportSets"
5
-
6
- origObjects = #()
7
- currSetName = " "
8
- unityFbxFilePathAttr = " "
9
- unityFbxFileNameAttr = " "
10
- unityAnimFileNameAttr = " "
11
- unityAnimFilePathAttr = " "
12
- isAnimFile = false
13
5
14
6
persistent global unityAskSetUnits
15
7
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
27
24
)
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
28
48
)
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
45
49
);
46
50
47
51
-- Make sure the FbxImporter plugin is loaded
@@ -73,35 +77,7 @@ macroScript UnityImport category:"Unity" tooltip:"Import an FBX file from a Unit
73
77
)
74
78
)
75
79
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
105
81
)
106
82
)
107
83
macroScript UnityExport category: " Unity" tooltip: " Export models and animation to Unity"
@@ -116,6 +92,18 @@ macroScript UnityExportModel category:"Unity" tooltip:"Export models to Unity"
116
92
117
93
global unityExportSetPostFix = " _UnityExportSet"
118
94
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
+
119
107
struct UnityImportHelpers (
120
108
fn loadUnityFbxImportSettings = (
121
109
fbxImportSettings = getINISetting (GetMAXIniFile()) " Unity" " UnityFbxImportSettings"
@@ -203,6 +191,39 @@ struct UnityImportHelpers (
203
191
)
204
192
205
193
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
206
227
)
207
228
)
208
229
0 commit comments