見出し画像

え!?ハンドルコントローラーで出展を⁉️ 東京ゲームダンジョン5 出展レポート(2024/5/4)

はじめに

2024年5月4日、ハンドルコントローラーが2台鎮座する謎のインディーゲームブースが浜松町に爆誕していた…‼️

東京ゲームダンジョン5に出展者側として参加しました。今までのイベントではメカアクション「プニヒローダー2」の展示を行っていましたが、今回はビルドが一切ない状態でハンドルコントローラーの展示をやりたいがためにレースゲームを企画してイベントに応募するという無法を働きました。無事試遊展示もできましたので今回のレースゲーム試遊展示について記録を行いたく本記事を執筆します。

メンバー紹介

@KaninoYokonobu : 代表。ソフトウェア開発担当。工場で腰を破壊した。

@K_SheePlane : 副代表。3DCG及び雑務担当。工場で精神を破壊した。

以上2名による開発に謎の友人たちが時々現れる編成で謎の生物「ぷにひ」が登場するゲームを制作しています。

出展の経緯

元々私達221GAMES(これでプニヒゲームスと呼びます)はプニヒローダー2を2年間ほど展示し続けてきました。2023年12月にSteamにて早期アクセスを開始し、東京ゲームダンジョン4に出展していた時、ふと思いがよぎりました。

プニヒローダー2の試遊展示に俺等が飽きている…!

流石に同じゲームで試遊展示を出しすぎたため、試遊版、接客ルーティーンなどが固まってしまい、刺激がなくなってしまいました。またメカカスタマイズを全面に押し出す試遊展示という試遊としては無茶なスタイルでもあったのでお客様の目線で見ても新鮮さがなくなっているように感じました。
そこでふと頭をよぎったのが

特殊コントローラによる展示が面白そう!!

と言う考えです。元々東京ゲームダンジョン等のインディーゲーム展示会では特殊なコントローラや自作コントローラによる展示が多数存在し、"お祭り感"の醸成に一役買っているなと思っていた節があります。そして、我々には一つ、以前にやり残した思いがありました。

開発コードネーム「Punity17」の存在です。Punity17は221GAMESが手掛ける第17作目の作品であり、Steamで221GAMESが初めて発売するゲームとして2020年に開発を開始したレースゲームでした。しかし、疫病と開発の歯車がうまく噛み合わなかった結果、1年を浪費してプロジェクトが中止になったという失敗プロジェクトです。なお、この失敗の直後に開発を開始したゲームが「Punity24」プニヒローダー2でした。(得るものがなかったわけではなく、敵車AIはプニヒローダー2のAI処理に反映され、車モデリングの知見はメカや今作で活かされています)

ハンドルコントローラを展示会場に持ち込んでレースゲームを遊んだら絶対楽しいだろ!!

と言うことで「ハンドルコントローラで試遊展示を行うためにレースゲームを制作する」という手段と目的が完全に逆転したゲーム開発が始まりました…。とはいえ現在早期アクセス中の「プニヒローダー2」を放置するわけにも行きません。そのため我々は1ヶ月という時間制限を設けて新作「Punity25」プニヒ運輸(仮)の開発に着手したのです。

TGD5で使用したサークルカット。恐ろしいことに提出した時ビルドが存在しなかった。

事前準備

ハンドルコントローラによる展示を決定しましたが、当日サプライズで出現させるとキング・迷惑であるのは明白でしたので予め東京ゲームダンジョン運営の方には下記の画像をお見せして話をしながら進めていきました。当初は机を取っ払ってハンドルコントローラとモニタースタンドのみという潔い配置も考えていたのですが、東京ゲームダンジョン最大の特徴であるデカ机を捨て去り通常の展示会で使われるようなサイズの机にすることで試遊スペースを確保できると試算しました。

生産技術 伝家の宝刀「Excel方眼紙による設備レイアウト配置」

ハンドルコントローラを据え付けるスタンドをどう調達するかと言う課題があり、最初は運搬に特化した設計で自作することを考えていましたが、流石に面倒臭すぎるのと普通に既製品でいい感じのスタンドがあったのでそちらを使いました。

会場への機材運搬は、元々東京ゲームダンジョンでは自家用車での機材搬入を実施していたため、大型スーツケース2台とアウトドア用の超特大トートバッグを駆使することでなんとか搬入することが出来ました。

因みにこのトートバッグ、171Lの容量を誇ります。

ちなみに出展準備で自室にハンドルコントローラが2台並ぶ等の異常な状況が発生しました。

死闘‼️ Logicool G29 VS Unity

ここからは代表のかにひが今回使用したハンドルコントローラー「Logicool G29」をUnityで動作させるために苦労した知見を代表にまとめていただきました。

はじめに

おい‼オタク‼お前だよ‼
UnityでG29の実装しようとしてる奴がオタクじゃねえわけねえだろ‼ Unity G29とかでググるとありがてえことにいくつか記事が出てくるが、いざ実際に使ってゲームにするとなるといくつか困ったことがあったから、お前にも知ってほしくてこの記事に寄稿させてもらうことになった。

1.Logitech Gaming SDKの実装とロジクールG HUBのインストール

ググってください。

2.実装編① ~コントローラーの初期化と終了~

先人達の記事やLogitechSteeringWheel.csを読んでいると

Debug.Log("SteeringInit:" + LogitechGSDK.LogiSteeringInitialize(false));

とか

Debug.Log("SteeringShutdown:" + LogitechGSDK.LogiSteeringShutdown());

を見かけたと思うがこいつらはGameManagerみたいなスクリプトに配置してAwakeとかStartでInitialize、OnApplicationQuitでShutdownしてもOKみたいだ! ハンドルコントローラーの入力やFFBを操作するスクリプトと一緒に配置しなくても動くって事を覚えておいてくれ! 逆にゲームの実行中にShutdownすると問答無用でクラッシュするから注意してくれ!

3.実装編② ハンコンか?ゲームパッドか?見分けろ!

これはもっと上手いやり方を知りたいんだけど

        StringBuilder deviceName = new StringBuilder(256);
        LogitechGSDK.LogiGetFriendlyProductName(0, deviceName, 256);
        if (deviceName.ToString().Contains("Controller")) {
            Debug.Log("これはゲームパッドだと思う");
        } else {
            _steerConnected = true;
            Debug.Log("これはG29である可能性が高い");
        }

結局デバイスネームを見て気合で判定している…(ゲームパッドのデバイスネームにはControllerって入っていがちなので)。 お察しの通り、これはカスの寄稿なので俺の部屋に転がっているゲームパッドとG29にしか対応していない実装だという事に注意してくれ。

if(_steerConnected){
int neutral = 65535 / 2;
_inputSteer = steerinput.lX / (float)neutral * STEER_INPUT_MULTIPLER;
}

これはお客さんにハンドルを540度回転させてください!!!!というわけにはいかないので デバイスがハンコンだった場合入力にSTEER_INPUT_MULTIPLERを掛け算している。 これによりハンドルを最後まで回さなくてもゲームパッドのスティックを目いっぱい倒した時と同じ旋回力を得られる。 _inputSteerは(-1,1)でクランプしようね(1負)。 ちなみにSTEER_INPUT_MULTIPLERは外部のjsonファイルに記述して現地で変更できるようにした。役に立った。

4.実装編③ プニヒ運輸(仮)で使用したステアリングのエフェクトを、紹介

この項目は既にLogitechSteeringWheel.csを読破し、かつ実機で実験をした超オタク野郎は読み飛ばしてOK! 逆に今風呂に入っていたり、手元に実機が無いオタクは一応読んでくれ。

  • スプリングフォース

LogitechGSDK.LogiPlaySpringForce(0, ANGLE_CENTER, SPRING_SATURATION, SPRING_COEFFICIENT);

ハンドルがセンターに戻ろうとする力を働かせることが出来る。ざっくり言うとハンドルの重さだ! SPRING_SATURATIONとSPRING_COEFFICIENTをうまく調整して希望の感触を目指してくれ。 ANGLE_CENTERはハンドルが目指す角度だ。0で良いと思うが、何か良い使い方があれば教えてくれ! プニヒ運輸(仮)では少年少女達にもプレイして頂けるように力を弱めに設定したが その結果ハンドルが元の角度に戻ろうとする力まで弱くなってしまい 切り返しが必要な際に気合でハンドルを回す必要が生じてしまった! 直前のフレームのハンドルの角度と現在のハンドルの角度を比較する等して スプリングフォースを可変させる必要があったかもしれない。

  • ダートロードエフェクト

float _carVelocity = Mathf.Clamp(Mathf.Abs(Velocity) * 3.6f / EFFECT_POWER_MAX_KPH, 0, 1);
LogitechGSDK.LogiPlayDirtRoadEffect(0, (int)(EFFECTPOWER_ROAD * _carVelocity));

これが有効な時、ハンドルが震えまくる! EFFECTPOWER_ROADに自由な値を入れて良いが、100にするとマジで机の上の小物が全て倒れ、すべてを破壊する。 プニヒ運輸(仮)ではクルマの速度から_carVelocityをゲットし、速度に応じて振動が強くなるようにして使ったぞ。 Velocityはrigidbodyとかから適当に取ってくれ!EFFECT_POWER_MAX_KPHは振動パワーが最大になる時の車速(時速)だ! また、任意の方法で路面の状況を判定してやればオンロードとオフロードで振動の強さを変えたりできて良い感じだぞ!

  • フロンタルコリジョンフォース

LogitechGSDK.LogiPlayFrontalCollisionForce(0, (int)(EFFECTPOWER_HIT * _carVelocity));

これが走ると、ハンドルが1回だけ激しく揺れる!EFFECTPOWER_HITは実機の様子を見ながら大きくしていくことを激しく推奨する。 クルマの当たり判定が壁にぶつかった時とかに発動させればOKだ。 プニヒ運輸(仮)で使用したエフェクトはなんとこの3つのみ。 簡単にゴージャスな試遊機を用意できることがお分かりいただけただろうか。
ちなみにSPRING_SATURATIONとかEFFECT_POWER_MAX_KPHみたいな奴も外部のjsonファイルで保持して現地でエフェクト強度とかを変えられるようにした。

5.実装編④ ハンコンでUIを動かす

この項目は何も正しくない可能性があるし、ガチで読んでいて楽しくないし、俺も嫌だなあと思いながら書いている。 「こうしたら動いた」を載せておくから、参考くらいにはなるかもしれない。 まずUnityのオタクならもうInputSystemを使ってると思うから、ハンコンの入力をInputActionsにねじ込んでやる必要がある。

バブ

G29の×ボタンの名前がtriggerになってるのが気に入らねえ~!お前はbutton0だろうが!

バブ・ツー

PlayerInputを使う場合、Auto-Switchにチェックを入れておかないとハンコンのボタンの入力がゲームに伝わらなかった。理由は考えていません…。 プニヒ運輸(仮)のUI操作に関してはハンドルを回して車両選択、アクセルペダルで決定などを敢行しても良かったんだけど 絶対バグが出ると思って十字キーとボタンで普通に操作してもらった。

6.おわりに ~BIG感謝~

割とガチで手探りの限界実装となってしまったが、お客さんは面白がってくれたっぽいのでよかった。

おわり 

そうして完成したビルドがこちら。(疫病感染で2週間ワープしたためUnity開発は実質2weekだったらしい…。)

展示会当日の状況

今回の東京ゲームダンジョン5は2フロア開催であり、私達のブースは3Fに配置されていました。スタッフ編成は私達メインメンバー2名に謎の友人2名を追加した4名編成とし、戦いに挑みました。

ハンドルコントローラを2台も並べる馬鹿に配慮いただいた配置だった。BIG 感謝

受付が4Fということもあり、開場してまもなくは人も疎らでしたが、15分もしないうちに大盛況となりました。(なお一番恐ろしかった展示会はBitSummitで、開場した瞬間大手企業のインディーゲームブースに客がすべて吸われる設計だったため我々の開場時間は実質1時間遅れでした)

実際に試遊しているところを動画で撮るのをすっかり忘れていたのでツインスティックを展示会に持ち込むことで有名なTakeさんのツイートからご紹介…。(左上の動画です。迷惑だったら消します)

試遊いただいた感触は想像よりも良好で、特殊コントローラの力を感じました。ハンドルを左右に振ってペダルを踏んだり蹴ったりすると…楽しい!
時々試遊待ちの列が発生するほどで、ある程度誘導は行っていましたが、近隣ブースにはご迷惑をおかけしていたかと思います。この場でお詫び申し上げます。
試遊時間は約5分程度に収まったこともあり色んな方に試遊頂けたのではないかなと思っています。最終的には101名の方が試遊いただいた結果となり、過去の開催歴の中でも最高の試遊人数を記録しました。今回はジャンルがレースゲームということもあり、以前のメカアクションとは違う客層の方にも遊んでもらえ、様々な感想をいただくことができ、とても嬉しかったです。

反省点としては、
・荷物置き(レストランとかで見る床に置く箱状のやつ)を作ったほうが良かった。バッグ等をお腹に抱えてプレイしようとする方が苦労していた。
・背の高い展示物が提灯だけだったので遠くからは提灯が見える真に謎のブースと化していた。
・もう少し積極的に列形成を実施するべきだった。
・タイトルのネーミングをしくじった。(次の展示でタイトル変わるかも)
等が挙げられます。

展示会が閉会した後はスタッフとして応援いただいていた謎の友人が予約していたシカゴピザとクラフトビールの店「デビルクラフト」に雪崩込みピザと芋とコーラを堪能しました。

おい‼️良すぎだろ‼️ 次回からここに通います

総括

特殊コントローラ展示はいいぞ‼️

手段と目的が完全に逆転した上、短期間での開発となりましたが、振り返ってみればかなり良い経験ができたと考えています。
東京ゲームダンジョンは先着順で応募可能なイベントなので、イベント応募時にビルドどころか掲載できるものが何もない状態でも応募できました。また、1サークルに割り振られている試遊スペースも広大で、私が関東在住ということもあり自家用車での機材搬入が可能だったためこのような突貫工事での試遊展示を実現することが出来ました。
勿論このやり方を万人に勧めると試遊展示を落とすサークルも出てくると思うので要注意ではありますが、Unity1WeekGameJamの延長線としてこういったゲームの試遊展示もありかなと思って頂けたら幸いです。

今回の記事は初めてのトライとして開発記事も合体させた内容となり特大ボリュームとなってしまいました。
ここまで読んでいただきありがとうございました。
ついでに私達のゲームも見てみて(宣伝)

おわり

この記事が参加している募集

この記事が気に入ったらサポートをしてみませんか?