LoginSignup
3
1

More than 3 years have passed since last update.

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

Last updated at Posted at 2019-11-11

はじめに

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

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

といったものを紹介

Pythonで

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

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

ビルド時実行とは

image.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を作る を作りました。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1