アセット作者向けにテクスチャが同じで複数のファイル名にコピーするスクリプトを作りました

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

こんにちは神乃木です。例によって阪急電車を作っております。

今日はテクスチャが同じで複数のファイル名にコピーするスクリプトを作ったので紹介します。

このスクリプトを利用することで、同じテクスチャだけどファイル名だけ異なるファイルを何種類も作らなきゃいけないとき、毎度コピーしたりリネームする手間から解放されます。

何をするスクリプトなのか

どういう動作をするかというとこういう動作です。

見ての通り、baseという名前を指定し、その後var1,var2,var3とカンマで区切って名前を指定すると、baseの中で存在するメインのa/c/d/i/n/s/r/pファイルをvar1,var2,var3とリネームしてコピーします。

このため、例えば同じテクスチャを利用している鉄道車両の6種類の車体のテクスチャをコピーするとき、毎回コピー&ペーストしてリネームをする作業がなくなります。

使い方

  1. 下のzipファイルをダウンロードするか、本文下にあるスクリプトをコピーし、.vbsで保存します。
    テクスチャをコピーするスクリプト(ZIP形式→vbs形式)
  2.  .vbsファイルをbaseにしたいテクスチャがあるフォルダに移動させます(importフォルダでも可)。
  3. .vbsをダブルクリックして実行します。「Base file name」にはベースにしたいファイル名を、「Output file name list」には、コピー先のファイル名を入力します。拡張子は不要です。
  4. 作業はは一瞬で終わります。


    この画面が表示されたら完了です。「はい」を押すと同じコピー操作をもう一度行いますので、必要に応じてこの画面のままスクリプトを放置しておき、アップデートが必要になった場合にOKを押すという使い方ができます。

注意

  • a/d/s/i/n/c/r/p ファイルに対応。
  • .pngファイルにだけ対応しています。jpgなどは対応してません。
  • ソースファイルに存在しないタイプのマップはコピーされません(当然)
  • うちの環境では動きましたが動作保証はありません。

スクリプト本文

VBスクリプトには慣れてないので適当でごめんなさい。

Dim Source
Dim Source
Dim Target
 
Sub Init()
	Source  = InputBox("Base file name (cf. Tc221_d/s/i.png-> Tc221)")
	Target  = InputBox("Output file name list (comma to split) (cf. Mc221,M221,M220)")
 
	Dim rc
	rc = MsgBox("Copy texture files (a/d/s/i/n/c/r/p + LOD) in " & vbCrLf  & Source & " to " & Target, 4, "Confirm")
 
	IF (rc = vbYes) and (Source <> "") and (Target <> "") then
		SplitAndCopy Source,Target
 
	ELSE
		WScript.Quit
 
	END IF
End Sub
 
Sub SplitAndCopy(Source,Target)
	Dim arTarget
	Dim baseFileName
	Dim FSO
 
	arTarget = Split(Target, ",")
	Set FSO  = WScript.CreateObject("Scripting.FileSystemObject")
 
	' file name loop
	For Each baseName In arTarget
	    Dim currentSourceFileName
	    Dim currentTargetFileName
	    Dim variations
	    variations = Array("_a.png","_c.png","_d.png","_i.png","_n.png","_s.png","_r.png","_p.png","_lod_a.png","_lod_c.png","_lod_d.png","_lod_i.png","_lod_n.png","_lod_s.png","_lod_r.png","_lod_p.png")
 
	    For Each variation In variations
	            currentSourceFileName = Source   & variation
            	    currentTargetFileName = baseName & variation
	        IF FSO.FileExists(currentSourceFileName) then
			FSO.CopyFile currentSourceFileName,currentTargetFileName
	        END IF
	    Next
	Next 
	Dim rc
	rc = MsgBox("Finished! Do you want to copy again?"  & vbCrLf  & "(Useful for updating base textures)", 4, "Confirm")
	IF (rc = vbYes) and (Source <> "") and (Target <> "") then
		SplitAndCopy Source,Target
	ELSE
		WScript.Quit
	END IF
End Sub
 
Init()

感想をお聞かせください。

  • ためになった・面白かった (1)
  • ためにならなかった・面白くなかった (0)
  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

SNSでもご購読できます。

コメントを残す

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)