1.9K Views
September 22, 22
スライド概要
Unity+Arduino+シリアル通信でUnityゲームから制御できる電光掲示板を作ったおはなしです。
一番艇フライング欠場!▼D.N.A.Softwares▼デジゲー博▼その他▼Unityぜんぜんわからん
(Unityに)エモさをもたらす シリアル通信のはなし D.N.A. (D.N.A. Softwares) Background Designed by Brgfx
自己紹介 サークル D.N.A. Softwares 代表 同人・インディゲームオンリー 「デジゲー博」代表 Twitter: @dnasoftwares
さっそく 本題
エモさ #とは
いつもの画面以外の表示器 ゲームと連動して光る電飾 そのゲームの世界観に沿った特別な コントローラー
いつもの画面以外の表示器 ゲームと連動して光る電飾 そのゲームの世界観に沿った特別な コントローラー → 画面外からの刺激 → 感情を揺さぶる → エモい!
そんなエモさをUnityでも 醸し出したい!!!
実際にやってみた “デジゲー博2018” にて展示
諸元 8桁7セグ表示器×3行 8桁16セグ表示器×1行 制御:Arduino Nanoに独自スケッチを書き込み インタフェース:USB (Micro-Bコネクタ)経由の シリアル通信 電源:USB or DC7.5V~9V 1A
設計・試作 evive というプロトタイプキットで試作 Arduino搭載かつ入出力が豊富でデバッグがしやすい 本番用Arduinoへの 移行も比較的簡単だった サイト(Shopあり): https://thestempedia.com/
動いた • シリアル通信でコマンド を送る • →の出力を得るコマンド例 l01st 1000 l12nd 900 l23rd 800 先頭1文字目lがコマンド、2文字目0は書き換え行 残りが表示文字列 • バッファに余裕が無いのでコマンド書式 はツメツメで
Unity側のコード ArduinoのUSBシリアルポートをC#から叩く System.IO.Ports.SerialPortクラスを使う (Api Compatibility Level の設定を「.NET 2.0」にすると使用可能) Qiitaの記事「UnityとArduinoをシリアル通信」(@yjiro0403氏)が参考になる • https://qiita.com/yjiro0403/items/54e9518b5624c0030531 デバイスが繋がっているポートを 自動スキャンする機構 シリアルポートを列挙し、それぞれのポートに所定のコマンドを送って期待通りの応答を返 すポートを見つける (ファームのバージョン情報を返すコマンドを入れておく)
あとは…… • ゲーム内に実装!ただし…… PC側を全力でぶん回すとコマンド処理が追いつかない コマンド処理より早くリングバッファが溜まる→未処理のバッファが新しいコマンドに上書きされ て文字化け データ送信は秒間20コマンド程度になるように適宜間引く 例外処理はザックリでもいいから入れておこう デバイスがないときの動作はどうか? 外部デバイス用のコードとゲーム本体のコードをキッチリ分離する シリアルポートがないPCでの動作はどうか?
できあがり
結論 (制御された光り物は) エモい ありがとうございました