ADX2ビルド時にUnityにコピーするなど便利なスクリプト紹介

#はじめに

ADX2でビルド時にpythonを実行することで、更新時の手順を少しだけ軽減できます。

- UnityのstreamingAssetsへACF,ACB,AWBをコピーする
- キュー名文字列CSファイルの生成

といったものを紹介

# Pythonで

Pythonの勉強もかねて書いている。

コード内のPathとかは適宜変更して使ってください。

# ビルド時実行とは

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96808/dcb0bf2e-d9a3-6946-e940-c8fda634e12f.png)

ビルドダイアログの下にある
「ポストプロセス設定」から
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を作る](https://qiita.com/tatmos/items/33543bddede4fee80c6b) を作りました。