從網上淘到了一套人物的模型,當時的心情是激動無比,掏出用的不熟練的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中,最后再來張帥帥噠圖片。