ADX2ロボット機能を使ってみる備忘録

# はじめに
CRI Atom Craft Ver.3.44.18からADX2ロボット機能　（正式名称は[CRI Atom Craft ロボット機能](https://game.criware.jp/learn/tips/atomcraftrobot/)）という、自動化機能が搭載された。
これをとりあえず触ってみた備忘録です。

#マニュアルに従いセットアップ

Python入れていない人は、[CRIのマニュアル](https://game.criware.jp/manual/adx2_tool/latest/criatom_tools_atomcraft_api.html)を参照
[実行環境の準備](https://game.criware.jp/manual/adx2_tool/latest/criatom_tools_atomcraft_api_prepare.html)

自分の環境はWindowsで、すでにReaperや自作ツールなどでPythonは導入済のため、
インストールやパスの設定はしなくてもすぐ動かせる環境で、
このスクリプト設定から、Python3.8を選択するのみでした。（導入は簡単な様子）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96808/44dcd03f-a526-ae90-e8f3-4c4893c03ad4.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96808/710c6526-165f-a01d-47de-05d549cc9c79.png)

#Hello worldに2種類ある
デバッグ表示でprintはよく使うのですが、
ADX2には

``` hello.py 
import cri.atomcraft.debug 
cri.atomcraft.debug.log("Hello, World")
```
といったものでログ出力ができ、こちらを利用することで、
リモート処理時もADX2側のログに出力される。
（Print()の場合は実行アプリ側にログが出るらしい）
warningだとオレンジ色になる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96808/31427a71-a171-33ad-5617-0929b0960931.png)

#ところでtkinter でGUIは出せるのか？
試してみたところ2回実行するとツールが落ちてしまう様子。

#スクリプトのリモート実行

環境変数PYTHONPATHにcriのリモート用のフォルダを設定する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96808/62ef5916-9eab-6288-2bc0-668aaf06b433.png)

ここまですれば、リモートのpythonでUIを出して、操作ができそう。
とりあえず[サンプル](https://game.criware.jp/manual/adx2_tool/latest/criatom_tools_atomcraft_api_connect.html)にあったhelloworldは表示できた。

UI関連はちょっと複雑になるので別の機会にしよう。

#「アクショントラックの参照しているキューのパスを表示する」スクリプト

少し実用的なスクリプトを作ってみようと思う。

用途：アクショントラックがあるけど、他の人が作ったもので、どこに元があるのかわらない。といった時に解析できる。

流れとしては、
1.選択しているアクショントラックを得る
2.参照しているオブジェクトを得る
3.参照しているオブジェクトがあれば、パスを表示

これでいけそう。


``` ShowActionTrackTarget.py
# --Description:アクショントラックのターゲットオブジェクトのパスをログに表示

import cri.atomcraft.debug as acdebug
import cri.atomcraft.project as acproject

# 1.選択しているActionTrackを得る
selected_ActionTrack = acproject.get_selected_objects("ActionTrack")["data"]
if not selected_ActionTrack :
    acdebug.warning("Please select at least a ActionTrack.")
    sys.exit()
# 2.参照しているオブジェクトを得る
tgtObj = acproject.get_value(selected_ActionTrack[0], "TargetObject")["data"]
if not tgtObj :
    acdebug.warning("Not found a tgtObj.")
    sys.exit()
else:
    # 3.オブジェクトパス表示
    acdebug.log("Target Path:\"{0}\"".format(acproject.get_object_path(tgtObj)["data"] ))
    # 4.オブジェクト選択
    acproject.select_object(tgtObj)
```

こんな感じで、アクショントラックを選択してスクリプトメニューから
「アクショントラックのターゲットオブジェクトのパスをログに表示」
を選ぶと

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96808/c2701941-df17-aa06-b596-ab68edabfb55.png)

パスをログに表示して
ツリー上で赤枠ハイライト、タイムラインの表示が切り替わった。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96808/81b4e6d9-4275-b43c-30a5-b34699a9e28d.png)


#終わりに
ちょっと触ってみた感じですが、ターゲットオブジェクトが遠い時とかに便利なスクリプトが作れました。
（名前だけだとどこのかわからなくなってしまうことがあったので）

欲しいなと思った機能としては
- 右クリックからスクリプトメニューが選べるといいな（あるいはショートカット割り当て、ちょっとメニューの距離が遠い）
（追記20210526: 3.45.00 から右クリックメニューから選べるようになっていました）

#続き
[ADX2 ロボット機能でビルドファイルをUnityへコピーするだけ]
(https://qiita.com/tatmos/items/32ee12efa4a7a85bb9ac)

[MIDIインポート試しに作ってみた]
(https://qiita.com/tatmos/items/738181ed9b346a8f32e4)