toio 入門 (2) - キューブの操作
「toio SDK for Unity v1.4.0」をベースに、toioキューブを操作する方法をまとめました。
前回
1. キューブの操作
「toio 入門 (1) - 事始め」のキューブを回転させるコードを、キューブのキー操作とXY座標表示を行うコードに変更します。
(1) Hierarchyウィンドウで「RotateCube」を削除。
(2) Hierarchyウィンドウの「+ → UI → Text」で「Text」を追加し、「Label」という名前を指定。
白文字で左上に配置して、初期値「(0, 0)」にしています。
(3) Hierarchyウィンドウで、「+ → Create → Empty Object」で空のオブジェクトを生成し、「ControlCube」という名前を指定。
(4) Hierarchyウィンドウで「ControlCube」を選択し、Inspectorウィンドウで「ControlCube」を追加し、以下のように編集。
・ControlCube.cs
using UnityEngine;
using UnityEngine.UI;
using toio;
// キューブの操作
public class ControlCube : MonoBehaviour
{
public ConnectType connectType; // 接続種別
public Text label; // ラベル
CubeManager cm; // キューブマネージャ
// スタート時に呼ばれる
async void Start()
{
// キューブの接続
cm = new CubeManager(connectType);
await cm.MultiConnect(1);
}
// フレーム毎に呼ばれる
void Update()
{
// キューブのキー操作
foreach (var cube in cm.syncCubes)
{
if (Input.GetKey(KeyCode.LeftArrow)) {
cube.Move(-20, 20, 50);
} else if (Input.GetKey(KeyCode.RightArrow)) {
cube.Move(20, -20, 50);
} else if (Input.GetKey(KeyCode.UpArrow)) {
cube.Move(50, 50, 50);
} else if (Input.GetKey(KeyCode.DownArrow)) {
cube.Move(-50, -50, 50);
}
}
// キューブのXY座標表示
string text = "";
foreach (var cube in cm.syncCubes)
{
text += "(" + cube.x + "," + cube.y + ")\n";
}
if (text != "") this.label.text = text;
}
}
(5) Hierarchyウィンドウで「ControlCube」を選択し、Hierarchyウィンドウの「Label」を「ControlCube」の「Label」にドラッグ&ドロップ。
(7) Playボタンで実行。
上下左右キーでキューブを操作できます。左上にXY座標が表示されます。
2. CubeManagerクラス
キューブの接続と、操作対象となるキューブの取得は、「CobeManagerクラス」で行います。
◎ キューブの接続
キューブの接続を行うには、CobeManagerクラスのMultiConnect()を使います。引数には、接続するキューブの台数を指定します。
// キューブの接続
cm = new CubeManager(connectType);
await cm.MultiConnect(1);
◎ キューブの操作と情報取得
キューブの操作と情報取得するには、以下のプロパティでCube群、またはCubeHandle群を取得します。
Cubeは左右モーター速度でキューブを操作する基本API、CubeHandleは前進量と回転量などでキューブを操作する高レベルAPIです。
キューブには操作可能なタイミングと不可能なタイミングがあり、syncXXXは操作可能なタイミングでのみオブジェクト群を返します。
foreach (var cube in cm.cubes)
{
<キューブの情報取得>
}
foreach (var cube in cm.syncCubes)
{
<キューブの情報取得 or キューブの操作>
}
foreach (var handle in cm.handles)
{
<キューブの情報取得>
}
foreach (var handle in cm.syncHandles)
{
<キューブの情報取得 or キューブの操作>
}
3. Cubeクラス
「Cubeクラス」は、左右モーター速度でキューブを操作する基本APIです。
◎ キューブの操作
キューブの操作は、以下のメソッドを使います。
・cube.MoveRaw()
左右モーター速度によるキューブの操作を行います。
◎ キューブの情報取得
キューブの情報取得は、以下のプロパティを使います。
4. CubeHandleクラス
「CubeHandleクラス」は、前進量と回転量などでキューブを操作する高レベルAPIです。
◎ キューブの操作
キューブの操作は、以下のメソッドを使います。
・handle.MoveRaw()
左右モーター速度によるキューブの操作を行います。cube.Move()と同等のメソッドになります。
handle.MoveRaw(int left, int right, int durationMs=1000,
ORDER_TYPE order=ORDER_TYPE.Weak)
・left : 左モーター速度 (0 ~ 115)
・right : 右モーター速度 (0 ~ 115)
・durationMs : 持続時間 (ms)
・order : 優先度 (Week, Strong)
・handle.Move()
前進量と回転量によるキューブの操作を行います。
handle.Move(double translate, double rotate, int durationMs = 1000,
bool border = true, Cube.ORDER_TYPE order = Cube.ORDER_TYPE.Weak)
・translate : 前進量 (-115+Abs(rotate)/2 ~ 115-Abs(rotate)/2)
・rotate : 回転量 (-115+Abs(rotate)/2 ~ 115-Abs(rotate)/2)
・durationMs : 持続時間 (ms)
・border = true : ボーダー制限の有効・無効
・order : 優先度 (Week, Strong)
・戻り値 : Movement
他にも、以下のようなメソッドを提供しています。
◎ キューブ情報の取得
キューブ情報の取得は、以下のプロパティを使います。
5. マットの座標
キューブのXY座標はマットに印刷されている座標になります。
「簡易プレイマット」の場合は、左上が(98,142)、右下が(402,358)になります。
他のマットについては、以下で確認できます。
6. 複数のキューブの操作
複数のキューブを操作する手順は、次のとおりです。
(1) Hierarchyウィンドウに配置するCube数を増す。
(2) CubeManagerクラスのMultiConnect()の引数にそのCube数を指定。
// キューブの接続
cm = new CubeManager(connectType);
await cm.MultiConnect(3);
(3) 実行。
3台を同時にキーで操作できます。
【おまけ】 toio SDK for UnityのAPIリファレンス
「toio SDK for Unity」のAPIリファレンスは、次のとおりです。
プレイマットの仕様は、以下で確認できます。
次回
この記事が気に入ったらサポートをしてみませんか?