#はじめに
ADX2でビルド時にpythonを実行することで、更新時の手順を少しだけ軽減できます。
- UnityのstreamingAssetsへACF,ACB,AWBをコピーする
- キュー名文字列CSファイルの生成
といったものを紹介
Pythonで
Pythonの勉強もかねて書いている。
コード内のPathとかは適宜変更して使ってください。
ビルド時実行とは
ビルドダイアログの下にある
「ポストプロセス設定」から
pythonを指定すると動かせます。
pythonは別途インストールが必要です。
ADX2ビルドしたファイルをUnityのstreamingAssetsへACF,ACB,AWBをコピーする
ADX2はビルド先を指定できるけど、微妙に扱いづらいので、
一度出力したファイルをコピーします。
(階層出力のチェックは外しておきます)
copyAndConv.py
#ADX2のビルド後にUnityへコピーする
import shutil
srcPath = "C:/MyDearest/CraftData/Chronos/PC/"
dstPath = "C:/MyDearest/github/Chronos/Assets/StreamingAssets/"
#コピーしたいファイル名
acfAcbAwbNameList = ["Chronos.acf",
"BGM.acb","BGM.awb",
"SE.acb","SE.awb",
"VOICE.acb","VOICE.awb"]
for acfAcbAwbName in acfAcbAwbNameList:
shutil.copyfile(srcPath + acfAcbAwbName, dstPath + acfAcbAwbName)
#csを文字列csに変換する
import adx2cs_to_Str_cs
csDstPath = "C:/MyDearest/github/Chronos/Assets/MyDearest/Chronos/Editor/UranusExtension/Sound/"
namespace = "MyDearest.Chronos"
csNameList = ["BGM.cs","SE.cs","VOICE.cs"]
for csName in csNameList:
adx2cs_to_Str_cs.conv(srcPath+csName,csDstPath+csName,namespace)
キュー名文字列CSファイルの生成
ADX2でビルドしたキュー名を文字列の定義に変更する
こちらは、ちょっと強引なコードです。
ADX2ではキュー名が自由なのですが、c#出力だと使えない文字があるので、
文字列配列でとれるようなcsファイルを出力します。
adx2cs_to_Str_cs.py
#print("ADX2のcs出力をキュー一覧を文字列csに変換する")
def conv(inputPath, outputPath, namespace):
# 解析するファイルを開く
with open(inputPath, "r",encoding="utf-8") as test_data:
# 書き込みファイルを開く
with open(outputPath,"w",encoding="utf-8") as f:
# 1行読む
for line in test_data:
# 分割 空白
sp = line.split(' ')
for i in range(len(sp)):
# classがあればクラス名
if(sp[i]== "class"):
f.write("///<summary></summary>\n")
f.write("namespace " + namespace + "\n")
f.write("{\n")
f.write("\tpublic class " + sp[i+1] + " {\n")
f.write("\t\tpublic static string[] Cue {\n")
f.write("\t\t\tget {\n")
f.write("\t\t\t\treturn new string[]{\n")
break;
# intがあれば次の要素を出力
if(sp[i]=="int"):
f.write("\t\t///<summary></summary>\n")
f.write("\t\t\"" + sp[i+1] + "\" ,\n")
break;
# フッター
f.write("\t};\n")
f.write("\t\t\t}\n")
f.write("\t\t}\n")
f.write("\t}\n")
f.write("}\n")
実行時などであれば、ACBなどからキュー名を取得できるのですが、エディター時にキュー一覧とか欲しい場合に使います。
VOICE.cs
///<summary></summary>
namespace MyDearest.Chronos
{
public class VOICE {
public static string[] Cue {
get {
return new string[]{
///<summary></summary>
"dummy" ,
///<summary></summary>
"1000100" ,
///<summary></summary>
"1000101" ,
};
}
}
}
}
以上
#続き
実のところ、もっとADX2の情報が取り出したくなり、上の方法に変わるものとして
ADX2ビルド時にPythonでScriptableObjectを作る を作りました。