Search Unity

独自のイベントスクリプトで自動処理を行える「UnityBotKun」の解説

はじめに

(本記事で紹介するツールは、ユニティ・テクノロジーズ・ジャパンの社員が個人的に開発・利用していたもので、この度Unityユーザーの皆さんにも自由にご利用いただけるよう無償公開したものです。ツールの使用許諾などはリポジトリのREADME、LICENSEテキストをお読みください。原則として公式サポートはございません)

UnityBotKunは独自のイベントスクリプトを記述することで、その内容に沿った任意の操作をアプリケーション上で実行するツールです。アプリケーション上での操作をイベントスクリプトに書き出す事もできます。

インストール

UnityエディタのメニューからWindow-> PackageManagerと選択し、Package Managerウィンドウを開きます。

ウィンドウの左上にある+のアイコンをクリックし、「Add package from git URL...」を選択します。

入力欄にhttps://github.com/katsumasa/UnityBotKun.gitと入力し、「Add」ボタンを押すとインストールが行われます。

実際に使ってみる

シーンにButton - TextMeshProを追加します。この時、EventSystemが自動的に追加されます。

UnityBotKunはこのEventSystemの代わりに自動処理をする仕組みになっています。その為、既存のEventSystemについてはここで無効化するか、削除しておいて下さい。

次にパッケージのフォルダ内のRuntime/Prefabsに有るEvet System Botという名前のPrefabをシーンに追加して下さい。

ボタンを押した時に分かりやすい様に、押された数を表示するようにします。以下のC#スクリプトをTestという名前で作成し、Buttonに追加して下さい。

using UnityEngine;
using UnityEngine.UI;
using TMPro;

public class Test : MonoBehaviour
{
	Button testButton;
	TextMeshProUGUI testText;
	int count;

	void Start()
	{
		testButton = GetComponent<Button>();
		testText = testButton.GetComponentInChildren<TextMeshProUGUI>();
		testButton.onClick.AddListener(CountUp);
	}

	public void CountUp()
	{
		count++;
		testText.text = count.ToString();
	}
}

UnityBotKunでは自動処理で行わせる内容はテキストファイルに専用のスクリプトで記述します。

Buttonという名前のオブジェクトに対して、タッチイベントを実行したい場合には以下のような記述になります。

:: "Button"という名前のオブジェクトをタップする
touch begin 0 "Button"
wait sec 1.0
touch ended 0

内容としては「Buttonという名前のオブジェクトを押下→1秒待機→指を離す」という記述になります。先頭に::を付ける事でコメントを書くことも出来ます。

※スクリプトについてのドキュメントはこちら

こちらをButtonClick.txtというファイル名でエンコードはBOM付きのUTF-8で保存し、Projectに追加して下さい。

Event System Botのインスペクタを開き、Event Script SystemScriptsButtonClick.txtを設定します。

これで準備は終わりましたので動かしてみます。UnityエディタのPlayボタンを押して下さい。

ボタンが自動的に押されるはずなのに変化が無いですね。実はUnityBotKunはデフォルトでは実行ボタンを押されてから処理が実行されます。

Event System Botのインスペクタを開き、「Play」ボタンを押すと実行されます。なお、起動時に自動的に動作させたい場合には「Is Auto Play」にチェックを付けます。

次に100回ボタンを押す処理を書いてみます。ButtonClick.txtの内容を以下のものに書き換えて下さい。

int i 0
# LOOP1
print "i=" + i
print "ボタン押下"
touch begin 0 "Button"
print "0.1秒待つ"
wait sec 0.1
print "ボタンを離す"
touch ended 0
:: i = i + 1を実行
add i i 1
:: iが100未満ならLOOP1へジャンプ
ifls i 100 goto LOOP1

ここでは進捗が分かりやすい様にprint命令でコンソールへ文字列を出力しています。

今回使用したtouch以外にも以下の様な命令が有ります。

コマンド名概要
buttonButtonイベントを発生させる
axisrawAxisRawイベントを発生させる
mousebuttonMouseボタン入力イベントを発生させる
mouseposMouseの座標移動イベントを発生させる

mouseposはマウスカーソルの位置を移動させる命令です。実際に使おうと思った時には「今、カーソルを置いているここの座標を知りたい」と思うときが有ると思います。その様な時に役立つテクニックを紹介します。

Inspectorに有るRecordボタンを押します。

この様に今までのマウスカーソルの位置が保存されています。また、現在の座標を確認する事も出来きます。この座標情報を元にスクリプトを記述して下さい。

おわりに

UnityBotKun」、今回紹介した内容以外にもaxisrawコマンドを使ってキャラクターを自動的に動かしてデバックする仕組みの構築なども可能です。是非、色々な処理の自動化に使ってみて下さい。

この記事はいかがでしたか?