簡単なイベントスクリプトを記述することで、アプリケーション上でその内容に沿った動作を実行します。
※アプリケーションのチュートリアルの実装や、アプリケーションのテスト等で使用することを想定しています。
- 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上で詳細に説明していますので、こちらをご確認下さい。
- Unity2019.4.22f1
- Pixel4 XL
- UnityEditorとUnityPlayer(実機)の両方で実行出来ます。
- 既存の
Event System
オブジェクトとEvent System Bot
オブジェクトを差し替える必要があります。 - 具体的な手順は下記の通りです。
- 本リポジトリを使用したいUnityProjectのAsset以下に配置します。
- Scene上に、
Event System Bot
を配置します。元々Scene上にあるEventSystem
は無効化して下さい。
- [イベントスクリプト]を作成します。イベントスクリプトの記述情報に関しては、こちらをご確認下さい。また、プレイ中の入力を記録し、イベントスクリプトに書き出すことも可能です。
- イベントスクリプトを
Event System Bot
->Event Script System
->Scripts
に登録します。
- プログラム中にInputを使用している箇所は
Input2
に置き換えて下さい。
example
var horizontal = Input.GetAxsisRow("Horizontal");
using Utj.UnityBotKun;
...
var horizontal = Input2.GetAxsisRow("Horizontal");
Unity EditorをPlay Modeで実行し、任意のタイミングでEvent Script System
のPlayボタンを押します。
UnityBotKun Remote Clientを使ってApplicationをUnityEditorからリモートで制御し、イベントスクリプトの実行、記録を行います。UnityBotKun RemoteClientはWindow->UnityBotKun->RemoteClient
で起動します。
アプリケーションをビルドする際にDevelopmentBuildを有効にしてビルドを行って下さい。
ここでは、Event System Bot
にAddされているコンポーネントを説明します。
Event System Bot
はEventSystem,StandaloneInputModuleOverrider,ScriptBot,InputBot,InputRecorder,DontDestory等の複数のコンポーネントで構成されています。
入力、レイキャスト、イベント送信を処理します。
特に変更はありませんので、詳細に関してはスクリプトリファレンスをご確認下さい。
Axisやボタンの名称を変更する場合はこちらで設定を行います。
詳細に関しては、スクリプトリファレンスをご確認下さい。
イベントスクリプトの制御を行います。
- Script
実行するイベントスクリプトのテーブルです。- Size
登録するイベントスクリプトの個数を指定します。 - Element
イベントスクリプトを登録します。
- Size
- isAutoPlay
有効な場合、実行直後にPlayScriptで指定されているイベントスクリプトを実行します。 - Play Scipt
実行する、イベントスクリプトを選択します。 - Play
イベントスクリプトを実行します。実行する為には、アプリケーションが実行中(Application.isPlay == true)である必要があります。 - Stop
実行中のイベントスクリプトを停止します。 - PC
イベントスクリプトの実行位置(行)を表示します。
InputをHackするコンポーネントです。
- Is Override Input
有効な場合、InputをHackします。イベントスクリプトが実行中は常に有効となります。 - Is Enable Touch Simulation
有効な場合、MouseをTouchとしてシュミレーションします。この時、Mouseは無効となります。 - Input Infomation
Inputの情報を表示します。デバック用の機能です。
実行中のアプリケーションの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として保存します。
Sceneを跨いでEvent System Bot
を使用する為のコンポーネントです。
- Is Dont Destroy On Load
Scene切り替え時の
Event System Bot
を破棄したくない場合は有効にする必要があります。
実機上で動作させる場合にUnityPlayer<->UnityEditor間の動作を行う為のコンポーネントです。
UnityPlayer(実機)上のEvent System Bot
をUnityEditorから制御する為のWindowです。
① Refleshボタン。Player上のUnityBotKunの情報を取得します。
② イベントスクリプト実行ボタン。④で指定されたイベントスクリプトを実行/停止を行います。
③ 録画ボタン。Player上で発生したInput情報の記録/停止を行います。記録内容は停止時にEditor上でTextAssetとして保存します。
④ イベントスクリプト選択リスト。Player上で実行するイベントを選択します。
⑤ イベントスクリプトオブジェクトフィールド。Player上に転送するイベントスクリプト。
⑥ 追加ボタン。⑤で指定したイベントスクリプトをPlayerへ転送します。
イベントスクリプトでは、Touch
,Mouse
,Button
,AxisRaw
を制御する為の命令に加えて、変数、四則演算、条件分岐、ジャンプ等のプログラマブルな記述を行うことが出来ます。
ゲーム業界でスクリプターの経験がある人には親しみやすい記述方式になっていると思います。
詳しくは、イベントスクリプトリファレンスをご確認下さい。
-
Q
New Input Systemに対応していますか? -
A
対応していません。 -
Q
InputRecorder
で作成したイベントスクリプトを再生しても、全く同じ結果になりません。 -
A
InpurRecorder
はInputのみを記録しています。処理落ちや乱数など、結果に対して様々な要員がある為、同じ結果にならない場合があります。 -
Q
イベントスクリプトを実行しても、Inputが反映されません。 -
A
他のEvent System
が有効になっている可能性があります。実行時にEvent System Bot
以外のEvent System
がScene
上に存在しないか確認してみて下さい。また、Standalone Iput Module Override
のForce Module Active
を有効にすることで改善する可能性があります。 -
Q
uGUI
にはタッチやマウスのクリックが反応しますが、3D等他のオブジェクトに反応しません。 -
A
Event System
を利用している為、MonoBehaviour.OnMouseXXX
系のイベントは発生しません。IPointerEnterHandlerを継承する等してイベントをキャッチして下さい。また、CameraオブジェクトにPhysicsRaycasterやPhysics2DRaycasterをAddすることもお忘れなく。