從網上淘到了一套人物的模型,當時的心情是激動無比,掏出用的不熟練的3DMax折騰了半天。突然發現了一個蛋疼的事兒,所有的模型文件,材質名稱,子材質,以及貼圖所實用的是中文命名!!
!
盡管說是能跑,只是這個命名也忒不規范了,將模型,資源導入了Unity。關聯產生的資源和材質名稱也都是中文的!!!
雖說是能用,只是心里總感覺有點兒別扭。然而要改動一系列的名稱又太太太麻煩....於是我這個懶人就想到了寫一個max腳本完畢這個功能。
我搞到的素材在Max里面打開是醬紫的,赤果果的中文命名:
從文件名稱,模型名稱,材質名稱,子材質名稱,貼圖名稱,貼圖路徑都是中文...
我的思路大概是這樣:
1)max文件名保持不變,仍然為中文,方便查找,並且這個無影響。
2.)手動改動模型名稱為自己希望的英文名,依據材質名稱 手動改動目錄下的貼圖名稱為“模型名稱 + 遞增編號”
3)通過腳本,自己主動將材質名稱改為模型名稱,假設有多維子材質,自己主動將子材質重命名為 ”模型名稱 + 遞增編號“
4)通過腳本,自己主動將材質相應的貼圖名稱&貼圖路徑名改為當前路徑下相應的貼圖
好了,廢話不多說了,上代碼:
--更換材質包括的貼圖的名稱
--arg: mat 材質名
--arg: index standard material 中貼圖的index 比方2是diffuse 7是Opacity
--arg name 要改動的名稱
function ChangeTexName mat index name =
(
tex = getSubTexmap mat index
if tex == undefined then
(
print("Index " + (index as string)+ " isn't exist in mat, so skip it")
)
else
(
tex.name = name
tex.filename = maxFilePath + tex.name + ".dds"
print (name + " texture name changed ok")
)
)
--遍歷選擇的物體
for obj in selection do
(
--改動材質名稱為與對象名稱一致
obj.material.name = obj.name
local num = getNumSubMtls obj.material
if num == 0 then
(
ChangeTexName obj.material 2 obj.name
ChangeTexName obj.material 7 obj.name
print "main material changed ok"
)
else
(
local count = 1
--處理多維子材質,將多維子材質依照對象名稱+遞增編號重命名
for material in obj.material do
(
local tempName = obj.name
append tempName (count as string)
material.name = tempName
count = count + 1
--將index 2相應的diffuse貼圖改名
ChangeTexName material 2 tempName
--將index 7相應的opecity貼圖改名(假設不須要刻意去掉此行)
ChangeTexName material 7 tempName
print "sub material changed ok"
)
)
print "Name Change OK"
)
具體的凝視我寫在了代碼中,主要要注意的是一個地方,因為我的資源是使用了Diffuse和Opecity兩個貼圖,所以我這樣寫。假設要改名字的腳本是其它類型的貼圖,僅僅須要改動Index值就能夠。index的相應關系例如以下:

以下看一下使用:
我首先依據材質編輯器中的貼圖,將目錄下的貼圖改動名稱。這時,模型會由於找不到貼圖而變成白色:

然后。我們把模型名稱改動一下,改成jingyingbaijianke。然后執行腳本:


因為這些模型資源是一個蒙皮文件(max)+若干個動作文件(max)+貼圖文件(dds)放在同一個文件夾下,所以我僅僅須要第一次改動一次貼圖文件名。然后每次打開一個文件之后。重命名一下模型,執行一下腳本,全部材質,子材質。貼圖名,貼圖路徑就都變成我們設定好的名稱了,哇咔咔。!
比方我又一次打開一個動作文件。開始時會提醒我貼圖丟失。我們直接點擊跳過,然后改動模型名。執行腳本。一切就都自己主動搞定了。然后我們就能夠放心大膽的把它們導入到Unity中,最后再來張帥帥噠圖片。

