概要
toio SDK for Unity v1.3で、なんとMacのUnity Editorから直接リアルのtoioコアキューブに接続できるようになりました!
これ自体も素晴らしい機能なのですが、実はこれのうれしい副作用として、逆に、ビルドしたアプリからシミュレータのキューブに接続することが簡単にできるようになっています。
これによって、toioコアキューブを持っていない方にも、どんなアプリなのか試してもらえるというメリットがあります。
以下、やり方をまとめます。
対応方法
コアキューブに接続するためのクラス(CubeManagerなど)のコンストラクタで引数のConnectType.(Auto|Simulator|Real)を切り替えるだけで、接続先を変えてくれます。
https://github.com/morikatron/toio-sdk-for-unity/blob/main/docs/usage_cube.md#4-cube%E3%81%AE%E6%8E%A5%E7%B6%9A%E8%A8%AD%E5%AE%9A
- 基本設定(ConnectType.Auto)の場合はビルド対象に応じて内部実装が自動的に変わります。 =従来動作
- シミュレータ設定(ConnectType.Simulator)の場合はビルド対象に関わらずシミュレータのキューブが動作します。
- リアル設定(ConnectType.Real)の場合はビルド対象に関わらずリアルのキューブが動作します。
参考:v1.3より前の方法
以前はSDK内のマクロで切り分けている箇所に手を入れる必要がありました
シミュレータのキューブの操作方法
https://github.com/morikatron/toio-sdk-for-unity/blob/main/docs/development_simulator.md#cube-%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%AB%E5%AF%BE%E3%81%99%E3%82%8B%E6%93%8D%E4%BD%9C
キューブを持ち上げる必要があるアプリの場合、右クリックが要求されるので、AndroidやiOSではその辺考慮する必要があります。WebGL推奨ってことになりそうです。
Tips
GUIで設定変更する
ビルド設定としてInspectorから変更できるようにしておくと、切り替えが簡単にできて便利です。
using UnityEngine;
using toio;
[CreateAssetMenu]
public class ToioSdkConfig : ScriptableObject
{
private static ToioSdkConfig instance;
public ConnectType ConnectType;
public bool IsSimulator => ActualConnectType == ConnectType.Simulator;
private ConnectType ActualConnectType => ConnectType == ConnectType.Auto
? CubeScanner.actualTypeOfAuto
: ConnectType;
public static ToioSdkConfig Instance
{
get
{
if (instance == null)
{
instance = Resources.Load<ToioSdkConfig>("ScriptableObjects/ToioSdkConfig");
}
return instance;
}
}
}
// コンストラクタ引数に使う
var cubeManager = new CubeManager(ToioSdkConfig.Instance.ConnectType);
衝突、ダブルタップなどを発生させる
UnityEditor上ではInspectorからCubeSimulatorのinternalなmethodを呼び出す形で操作することができます。
が、ビルドしたアプリではこれを触ることができません。
そのため、InspectorのGUIが呼び出しているのと同じmethodを、Reflectionで呼び出すボタンを配置します。
using System.Reflection;
using toio.Simulator;
using UnityEngine;
using UnityEngine.UI;
public class CubeSimulatorCollisionButton : MonoBehaviour
{
[SerializeField] private CubeSimulator cubeSimulator;
[SerializeField] private Button button;
private void Start()
{
button.onClick.AddListener(() =>
{
var method = cubeSimulator.GetType().GetMethod("_TriggerCollision",
BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
if (method != null)
{
method.Invoke(cubeSimulator, null);
}
});
}
}
おわりに
開発中のゲームのシミュレータ接続ビルド
toioコアキューブお持ちでない方もぜひお試しください。
シミュレータ画面をワイプ表示している部分については、また別で記事書きます。
通常のリアルtoioコアキューブ接続ビルド
遊ぶには、最近のtoio購入でついてくるorスイッチサイエンスさんで購入する簡易プレイマットも必要です。
プレイ動画