numa が 2026年01月31日22時38分40秒 に編集
コメント無し
本文の変更
## **家でも外でも、思い立った瞬間に格闘ゲームのコマンド練習がしたかった。**
## **家でも外でも、思い立った瞬間に格闘ゲームのコマンド練習がしたい。**
ゲームを起動せず、入力そのものを確認するための練習デバイスです。  # 1. どこでも格闘ゲーム道場とは **どこでも格闘ゲーム道場**は、 格闘ゲームのコマンド入力を、場所を選ばず練習するために作った ポータブルな練習デバイスです。 ゲーム機やモニタがなくても、 コマンド入力の流れやタイミングをその場で確認でき、 「今の入力がどうだったのか」をすぐに振り返ることができます。 この道場は、 格闘ゲームを「遊ぶ」環境そのものを置き換えるものではありません。 コマンド入力そのものに向き合い、 操作感やタイミングを整えるための、 練習を支えるための道具として制作しました。 # 2. なぜこのデバイスが必要だったか 近年は携帯機の性能も向上し、 出先でも格闘ゲームを起動して遊べる環境が整ってきました。 一方で、実際に「練習」という視点で考えると、 少し事情が変わってきます。 短い空き時間に、 特定のコマンド入力だけを確認したいときや、 直前まで使っていた感覚を保ったまま手を動かしたいとき、 ゲームを起動すること自体が少し大掛かりに感じる場面がありました。 しばらく触っていないと、 入力の感触やタイミングに不安を覚えることがあります。 **「今の操作感は合っているのか」** **「指の動きと入力結果にズレはないか」** そうした点を、 すぐに確認できる手段があれば、 練習の質を保てるのではないかと感じていました。 実際のゲーム画面での練習は重要です。 しかしそれとは別に、 コマンド入力そのものに集中して確認できる “前段階の練習”があっても良いのではないかと考えました。 # 3. この道場で何ができるか どこでも格闘ゲーム道場では、 コマンド入力の状態を確認することができます。  入力の結果は、 操作を時間の流れとして表示したうえで、 **コマンド入力が成立した場合に色で示されます。** これは、 格闘ゲームのキーフレーム表示を見ながら、 練習者自身がフレーム数を確認して 成功・失敗を判断していた練習方法を、 そのまま置き換えることを意図しています。 入力の過程と結果を同時に確認できるため、 練習中の判断をよりスムーズに行えるようになっています。 # 4. 入力を見える形にするための考え方 格闘ゲームのコマンド入力は、 実際のゲーム内と同様に、 方向入力とボタン入力を 順序と時間関係を持った入力列として扱います。 どこでも格闘ゲーム道場でも、 この考え方に合わせて、 コマンド入力を時系列で保存しています。 入力はフレーム単位で記録され、 入力の順番や間隔を後から確認できます。 ただし、 取得した入力をそのまま表示すると、 入力の流れを把握しにくくなります。 そのため本デバイスでは、 保存した時系列データを、 確認しやすい形に整理して表示しています。  この整理によって、 入力の順序やタイミングを 短時間でも把握しやすくなり、 練習用途として使いやすい表示を実現しています。 # 5. 反応をどのように計測しているか どこでも格闘ゲーム道場では、 単純な操作速度ではなく、 合図に対してどのような反応が行われたかも確認できます。 本デバイスでは、 反応を二つの異なる視点から計測しています。 一つは、 画面にマーカーが表示されてから、 ボタン入力が検出されるまでの時間を Spresense内部で計測する方法です。 これは、 表示からボタンの入力検出までを含めた、 システムとしての反応を 安定した条件で評価するためのものです。 もう一つは、 同じマーカー表示を起点として、 指が動き始める瞬間までを カメラで撮影して確認する方法です。 こちらは、 内部計測では取得できない、 人の認知や反射を含んだ反応を 確認するために用いています。  写真で示した二つの反応は、 同じ合図を起点としていますが、 実際に捉えている反応の区間が異なります。  この二つの計測は、 同じ反応を二重に測っているのではなく、 対象の異なる反応を それぞれ確認するために併用しています。 # 6. システム構成とSpresenseの使いどころ どこでも格闘ゲーム道場では、 「接続してすぐ使えること」と 「入力を安定して確認できること」を同時に満たす必要がありました。 入力の取りこぼしや表示の遅れが発生すると、 練習用デバイスとしての信頼性が損なわれてしまいます。 そのため、本デバイスでは 処理の安定性とリアルタイム性を重視した構成を採用しています。 ## ハードウェア構成の概要 まず、全体のハードウェア構成を示します。  本デバイスでは、 USBホスト機能を持つ別基板をUART接続し、 コントローラからの入力を受信しています。 表示にはLCDを使用し、 SpresenseとはSPI接続で通信しています。 また、反応の計測にはHDRカメラを使用しており、 Spresenseが標準でサポートするカメラインターフェースを利用しています。 それぞれのデバイスを 用途に応じて適切なインターフェースで接続することで、 構成をシンプルに保ちつつ、 必要な機能を無理なく組み合わせています。 ## ソフトウェア構成とマルチコアの役割分担 次に、ソフトウェア構成について説明します。  Spresenseはマルチコア構成を持っており、 複数の処理を同時に扱える点が特徴です。 本デバイスでは、 処理内容に応じて役割を分離し、 メインコアと複数のサブコアを使い分けています。 MainCore 全体の制御や状態管理を担当します。 SubCore1 コントローラ入力の受信を担当します。 SubCore2 画面表示を担当し、一定のフレームレートで更新します。 SubCore3 入力の解析や履歴管理など、 表示とは独立した処理を担当します。 処理を役割ごとに分離することで、 一部の処理が負荷を受けても、 他の処理に影響が出にくい構成としています。 ## この構成を採用した理由 格闘ゲームのコマンド入力を確認する用途では、 「速さ」そのものよりも、 毎回同じ条件で安定して動作することが重要です。 入力の取得、解析、表示を一つの処理にまとめてしまうと、 負荷のかかり方によって 入力や表示にばらつきが生じる可能性があります。 そこで本デバイスでは、 Spresenseのマルチコア構成を活かし、 処理を分離する設計を採用しました。 この構成により、 コントローラを接続してすぐ使える手軽さと、 入力を落ち着いて確認できる安定性を両立しています。 # 7. 実際の使い方と想定シーン どこでも格闘ゲーム道場は、 コントローラを本デバイスに接続するだけで使用できます。 ゲーム機やモニタを用意する必要はなく、 その場でコマンド入力の状態を確認できます。  コマンド練習の確認だけであれば、 カメラの配置を意識する必要はありません。 一方で、 指の動きをカメラに映すように配置することで、 合図に対する反応速度の計測も行えます。 用途に応じて、 「入力の確認」と「反応の計測」を 切り替えて使える点も特徴です。 短い時間でも手を動かして状態を確認できるため、 練習の前後や、感覚を整えたい場面で 気軽に使うことができます。 # 8. この道場が目指しているもの どこでも格闘ゲーム道場は、 格闘ゲームを「遊ぶ環境」そのものを 置き換えるためのデバイスではありません。 実際の対戦や本格的な練習は、 ゲーム機と画面のある環境で行うことが前提です。 本デバイスが目指したのは、 その前後にある 「入力感覚の確認」や「状態の調整」を、 より気軽に行えるようにすることです。 コマンド入力の感触やタイミングは、 少し触らないだけでも不安になります。 その状態を、 短い時間でも手を動かして確かめられることが、 練習を継続するうえで重要だと感じていました。 どこでも格闘ゲーム道場は、 練習の量を増やすための道具ではなく、 練習の質を保つための道具です。 「今の入力はどうだったか」 「感覚と表示にズレはないか」 そうした点を、 その場ですぐに確認できることを 最も大切にして設計しました。 実際の操作の流れは、 以下の動画で紹介しています。 (※ コントローラを接続して操作している様子が確認できます)  https://youtu.be/j8MNDc3s_Ek # 9. 設計上のこだわりと判断 どこでも格闘ゲーム道場を設計するうえで、 **「できることを増やす」よりも 「やらないことを決める」ことを重視しました。** 本デバイスでは、 格闘ゲームそのものは動作しません。 また、実際のゲーム画面を再現することも行っていません。 ゲーム機能を内包すれば、 より多くのことができるようになりますが、 起動時間や構成は複雑になり、 **「すぐに確認できる」という目的から離れてしまいます。** そこで本デバイスでは、 コマンド入力そのものに集中できる構成に絞り込み、 ゲームの演出や進行はあえて扱わない設計としました。 コマンド入力の技判定自体は実装していますが、 重要なのは技が出たかどうかではなく、 **どのような順序と間隔で入力されていたかを、 現在の自分で確認できること** だと考えています。 入力の流れを見て、 練習者自身が原因を判断できる余地を残すことで、 練習の自由度を保つことを意識しました。 これらを安定して実現するため、 Spresenseのマルチコア構成を前提とした設計を行っています。 コントローラ入力は、 100kHzを超えるポーリングレートで取得し、 高精度なTimestampによって管理しています。 内部ではmsオーダーで入力を保持しつつ、 表示には見慣れたフレーム表記を用いる構成としました。 表示はフレーム単位、 計測はオリジナルのTimestampという 役割を分けた設計としています。 一方で、 カメラによる画像計測は30fps相当となるため、 一定の計測誤差が生じます。 ただし、 視覚刺激からの反応速度は100ms以上かかることが多く、 本デバイスの用途では その誤差は問題にならないと判断しています。 指が実際にボタンを押下するタイミングも計測できるようにしましたが、 画面を見てからの反応が想像以上に遅いことは、 個人的にも印象的でした。 これらの処理を 役割ごとに分離することで、 マイコンに負担が集中せず、 他の処理に影響を与えにくい構成としています。 どこでも格闘ゲーム道場は、 多機能な練習機ではありません。 限られた機能に絞り込むことで、 **「いつでも確認できる」体験を確実に提供すること** を 最も大切にしました。 # 10. まとめとソースコード どこでも格闘ゲーム道場は、 格闘ゲームの練習そのものを置き換えるのではなく、 練習と練習のあいだを支えることを目的として制作しました。 コマンド入力の状態や反応を、 短い時間でも確認できることを重視し、 構成や機能を絞り込んで設計しています。 Spresenseのマルチコア構成とリアルタイム性を活かすことで、 入力取得・表示・計測を安定して行えるデバイスを 実現することができました。 本作品のソースコードは、 以下のリポジトリにて公開しています。 https://github.com/numagithub/dokodemo-fighting-game-dojo/ 最後までお読みいただき、ありがとうございました。 # 付録:設計の記録 本編では体験と仕組みを中心に説明しましたが、 ここでは、実際に設計・検討した内容を 写真ベースでカジュアルに紹介します。  ユニバーサル基板を使い、 Spresense拡張ボードに被せるシールド形状の基板を作りました。 ただし左右の端子位置が微妙にずれており、実装には多少の加工が必要でした。 5V / 3.3V / 1.8V を同時に扱える点は、 最近の周辺機器への対応を考えると非常にありがたい構成だと感じています。  市販のUSBホスト基板を貼り付けて使用しています。 VBUSのみGPIOで制御できるようにしました。 拡張ボードの回路を見るとかなり安全な構成なので、 単にVBUSを供給するだけであれば不要だったかもしれません。 ただ、Spresenseの電源ONシーケンスによっては サブコアが立ち上がる前にUSBコントローラが動き始めることがあり、 VBUS制御を入れたことで状態管理が楽になりました。 結果的には付けてよかった点です。  LCD基板が想定より大きく、 全体サイズはほぼLCD基準になりました。 Spresense本体が小さいだけに、少しもったいなく感じています。 HDRカメラ基板もサイズとフラットケーブルの制約があり、 今回は動作確認を優先した配置にしています。 ケースをかなりタイトに作ったため、 フラットケーブルが接触不良を起こすこともありましたが、 刺し直せば問題なく動作しています。 カメラは細かく制御して使いたかったのですが、 シャッター時間など一部の設定は反映できませんでした。 今回は暗い環境でも指の動きを正確に撮影できる点を活かしています。 画像自体は非常に明るく、はっきりしています。  LCD基板が赤いため、最終的には全体をケースで囲っています。 電源はモバイルバッテリーを使用しましたが、 マイクロUSBでの給電は少し気になる点です。 本来であれば電源を内蔵するか、 裏面に専用の給電端子を設ける構成のほうが良かったと感じています。 カメラ位置や拡張基板のUSB端子配置も、 今後見直したいポイントです。 かなりラフな使い方をしてしまいましたが、 今のところ大きなトラブルはありません。 今後もソフトウェア側を調整しながら、 自分の練習に役立てていくつもりです。