Skip to content

katsumasa/UnityBotKun

Repository files navigation

UnityBotKun

GitHub package.json version

概要

BotKun



簡単なイベントスクリプトを記述することで、アプリケーション上でその内容に沿った動作を実行します。


本ライブラリで出来ること

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

※アプリケーションのチュートリアルの実装や、アプリケーションのテスト等で使用することを想定しています。


イベントスクリプトで出来ること

  • Input系の命令
  • int型、float型、string型の変数の使用
  • 四則演算、条件分岐、ジャンプ命令などプログラムチックな操作

例えば、ボタンを1秒間タッチして放す場合は、下記のように記述します。

::: Button1を1秒間押す
touch begin 0 "Button1"
wait sec 1.0
touch ended 0

条件分岐やジャンプ命令を使えば複雑な事も可能です。

::: Button1を0.1秒間隔で100回連打する
int i 0
# LOOP1
touch begin 0 "Button1"
wait sec 0.1
touch ended 0
add i i 1
ifls i 100 goto LOOP1

イベントスクリプトに関してはWiki上で詳細に説明していますので、こちらをご確認下さい。

動作環境

Unityのバージョン

  • Unity2019.4.22f1

動作確認済み端末

Android

  • Pixel4 XL

使用方法

  • UnityEditorとUnityPlayer(実機)の両方で実行出来ます。
  • 既存のEvent SystemオブジェクトとEvent System Botオブジェクトを差し替える必要があります。
  • 具体的な手順は下記の通りです。

インストール方法

  1. 本リポジトリを使用したいUnityProjectのAsset以下に配置します。

  2. Scene上に、Event System Bot を配置します。元々Scene上にあるEventSystemは無効化して下さい。

    7bb999acffa06c965befe08d2e0dfb32

  3. [イベントスクリプト]を作成します。イベントスクリプトの記述情報に関しては、こちらをご確認下さい。また、プレイ中の入力を記録し、イベントスクリプトに書き出すことも可能です。

  4. イベントスクリプトをEvent System Bot->Event Script System->Scriptsに登録します。

    4cc62410ddd69f7453220c85b54bae02

  5. プログラム中にInputを使用している箇所はInput2に置き換えて下さい。
    example
var horizontal = Input.GetAxsisRow("Horizontal");
using Utj.UnityBotKun;
...
var horizontal = Input2.GetAxsisRow("Horizontal");

UnityEditorでの実行方法

Unity EditorをPlay Modeで実行し、任意のタイミングでEvent Script SystemのPlayボタンを押します。

223d79121d8f60d04063952a468103fb

UnityPlayer(実機)での実行方法

UnityBotKun Remote Clientを使ってApplicationをUnityEditorからリモートで制御し、イベントスクリプトの実行、記録を行います。UnityBotKun RemoteClientはWindow->UnityBotKun->RemoteClientで起動します。

注意時効

アプリケーションをビルドする際にDevelopmentBuildを有効にしてビルドを行って下さい。

Component

ここでは、Event System Bot にAddされているコンポーネントを説明します。

Event System Bot

Event System BotはEventSystem,StandaloneInputModuleOverrider,ScriptBot,InputBot,InputRecorder,DontDestory等の複数のコンポーネントで構成されています。

Event System

img

入力、レイキャスト、イベント送信を処理します。 特に変更はありませんので、詳細に関してはスクリプトリファレンスをご確認下さい。

Standalone Input Module Overrider

img

Axisやボタンの名称を変更する場合はこちらで設定を行います。 詳細に関しては、スクリプトリファレンスをご確認下さい。

Event Script System

img

イベントスクリプトの制御を行います。

  • Script
    実行するイベントスクリプトのテーブルです。
    • Size
      登録するイベントスクリプトの個数を指定します。
    • Element
      イベントスクリプトを登録します。
  • isAutoPlay
    有効な場合、実行直後にPlayScriptで指定されているイベントスクリプトを実行します。
  • Play Scipt
    実行する、イベントスクリプトを選択します。
  • Play
    イベントスクリプトを実行します。実行する為には、アプリケーションが実行中(Application.isPlay == true)である必要があります。
  • Stop
    実行中のイベントスクリプトを停止します。
  • PC
    イベントスクリプトの実行位置(行)を表示します。

BaseInputOverride

img

InputをHackするコンポーネントです。

  • Is Override Input
    有効な場合、InputをHackします。イベントスクリプトが実行中は常に有効となります。
  • Is Enable Touch Simulation
    有効な場合、MouseをTouchとしてシュミレーションします。この時、Mouseは無効となります。
  • Input Infomation
    Inputの情報を表示します。デバック用の機能です。

Input Recorder

Input Recorder

実行中のアプリケーションのInputを記録して、イベントスクリプトを生成する為のコンポーネントです。

  • Axis Names
    イベントスクリプトに記録する軸の名称です。イベントスクリプトに記録する、軸の名前を変更したい場合、こちらを変更して下さい。
  • Button Names
    イベントスクリプトに記録するボタンの名称です。イベントスクリプトに記録する、ボタンの名前を変更したい場合、こちらを変更して下さい。
  • Wait Type
    イベントスクリプトに記録するwaitコマンドをframe/secから指定します。
  • IsEnable Position To GameObject
    Touchイベントが発生した場合、可能であれば、Touchイベントを座標からGameObject名に変換します。
  • IsCompression
    イベントスクリプトを可能な限り圧縮します。この設定が無効な場合、axisやMouseの情報が毎フレーム記録されます。この設定が有効な場合、axisやMouseの情報は変化があったフレームのみ記録されますが、精度が若干落ちます。
  • Is Record Button
    ボタンの情報を記録するか否かを指定します。
  • Is Record Axis Raw
    AxisRawの情報を記録するか否かを指定します。
  • Is Record Mouse
    Mouseの情報を記録するか否かを指定します。
  • Is Record Touch
    Touchの情報を記録するか否かを指定します。
  • Script
    記録中のイベントスクリプトの内容を表示します。
  • Record
    イベントスクリプトの記録を開始します。イベントスクリプトを記録する為にはアプリケーションが実行中(Application.isPlaying)である必要があります。
  • Stop
    イベントスクリプトの記録を停止します。
  • Save
    記録したイベントスクリプトをTextAssetとして保存します。

Dont Destory

Sceneを跨いでEvent System Botを使用する為のコンポーネントです。

img

  • Is Dont Destroy On Load Scene切り替え時のEvent System Botを破棄したくない場合は有効にする必要があります。

Remote Player

実機上で動作させる場合にUnityPlayer<->UnityEditor間の動作を行う為のコンポーネントです。

UnityBotKun Remote Player

RemoteClient

UnityPlayer(実機)上のEvent System BotをUnityEditorから制御する為のWindowです。

① Refleshボタン。Player上のUnityBotKunの情報を取得します。
② イベントスクリプト実行ボタン。④で指定されたイベントスクリプトを実行/停止を行います。 ③ 録画ボタン。Player上で発生したInput情報の記録/停止を行います。記録内容は停止時にEditor上でTextAssetとして保存します。
④ イベントスクリプト選択リスト。Player上で実行するイベントを選択します。
⑤ イベントスクリプトオブジェクトフィールド。Player上に転送するイベントスクリプト。
⑥ 追加ボタン。⑤で指定したイベントスクリプトをPlayerへ転送します。



イベントスクリプト

イベントスクリプトでは、Touch,Mouse,Button,AxisRawを制御する為の命令に加えて、変数、四則演算、条件分岐、ジャンプ等のプログラマブルな記述を行うことが出来ます。 ゲーム業界でスクリプターの経験がある人には親しみやすい記述方式になっていると思います。 詳しくは、イベントスクリプトリファレンスをご確認下さい。

FAQ

  • Q
    New Input Systemに対応していますか?

  • A
    対応していません。

  • Q
    InputRecorderで作成したイベントスクリプトを再生しても、全く同じ結果になりません。

  • A
    InpurRecorderはInputのみを記録しています。処理落ちや乱数など、結果に対して様々な要員がある為、同じ結果にならない場合があります。

  • Q
    イベントスクリプトを実行しても、Inputが反映されません。

  • A
    他のEvent Systemが有効になっている可能性があります。実行時にEvent System Bot以外のEvent SystemScene上に存在しないか確認してみて下さい。また、Standalone Iput Module OverrideForce Module Activeを有効にすることで改善する可能性があります。

  • Q
    uGUIにはタッチやマウスのクリックが反応しますが、3D等他のオブジェクトに反応しません。

  • A
    Event Systemを利用している為、MonoBehaviour.OnMouseXXX系のイベントは発生しません。IPointerEnterHandlerを継承する等してイベントをキャッチして下さい。また、CameraオブジェクトにPhysicsRaycasterPhysics2DRaycasterをAddすることもお忘れなく。

Footnotes

  1. リリース済みのアプリケーションを制御出来る訳ではありません。)

  2. Input単体での再現の為、再現性の精度は低いです。