
個人ゲーム開発で「機能を削る」 10分で面白さが伝わるゲームを目指す
前回の記事では、Twitchで !join した視聴者の惑星がUnity上に生成され、その惑星へ恒星jyoriのレーザーが飛ぶところまで進みました。
そこから数日、かなり大きく開発が進みました。現在は開発序盤の進捗が見えにくかったところから見た目がどんどん更新されることから作業量は変わっていませんが、記録の内容は大量となっています!
今回は複数惑星への対応から実戦闘、そしてContest Alphaの方針を大きく整理したところまでまとめていきます。
複数の視聴者が同じ宇宙に参加できるようになった
まず進めたのが、複数人が同時に !join したときの対応です。
一人だけのテストではなく、複数の惑星が恒星jyoriの周囲を同時に公転する、Mother Planets本来の姿へ少しずつ近づいてきました。
恒星jyoriのレーザーについても、特定の1惑星だけを狙うのではなく、生存している惑星の中から一定時間ごとにTargetを選んで攻撃する仕組みへ変更しました。
これによって、誰が次に狙われるか分からないという、配信ゲームらしい動きも出てきました。
惑星同士が重ならないように軌道も調整
複数Joinを進める中で問題になったのが、惑星同士の重なりです。
単純にJoin時の角度を変えるだけでは、すでに公転している惑星との重なりを防げないため、参加するたびに公転半径を少しずつ変える方式へ変更しました。
現在は空いている軌道半径を探して、新しい参加者をそこへ配置します。
見た目としても複数の軌道に惑星が並ぶようになり、宇宙全体がかなり賑やかになってきました。
Twitchから !ray が撃てるようになった
次に、視聴者が自分でゲームへ介入するためのコマンドを進めました。
実際のTwitchチャットから !ray を入力すると、自分の惑星が攻撃を行うところまで接続しています。
ただボタンを押せば無制限に撃てるわけではなく、Cooldownや攻撃Creditなども含めてゲーム側で管理しています。これは、!rayを連打して撃っているプレイヤーが有利になることを防止し、介入せず眺めていたいプレイヤーへの不公平感をなくすことを目的としています。
!status コマンドも追加し、現在のHP、属性、軌道、攻撃状態などをTwitchチャット上で確認できるようになりました。
自動戦闘と恒星レーザーも実際のダメージへ
惑星同士のAuto Combatもつながりました。
参加した惑星たちは公転しているだけではなく、自動で戦闘を行い、そこへ視聴者自身の !ray が加わる形になっています。
恒星jyoriのレーザーについても、単なる演出ではなく実際に惑星のHPへダメージを与えるところまで接続しました。
レーザーを受け続けてHPが0になれば惑星は死亡し、一定時間後に再び !join できる再参加Cooldownも動いています。
実Twitchで最終スモークテスト
ここまでつながったところで、実際のTwitch環境を使って一連の動作確認を行いました。
!join → !status → !ray、Auto Combat、恒星jyoriレーザー、ダメージ、死亡、再参加までを通して確認しています。
Unity Consoleも最終的にWarning 0、Error 0。
ひとまず
「Twitchから参加して、ゲーム内で戦って、攻撃されて、死亡する」
という一本のゲームループが実環境で通りました。
ここはUnity版Mother Planetsにとって、かなり大きな一区切りです。
まだまだイベント系の実装など追加項目はありますが、コアループができたことでかなりMother Planetsとしてのゲームの実感が湧いてきています。

そしてContest Alphaの設計をもう一度考え直した
実際にゲームの根っこが動き始めたので、ここでContest Alphaについてもう一度かなり細かく考え直しました。いままでの開発を元に、Contest Alphaに向けてプライオリティーを整理しなおし、開発のロードマップを微修正しました。
以前は「どの機能をHTML版から持ってくるか」という考え方がまだ強かったのですが、現在はもっとシンプルな基準にしています。
Contest Alphaのコンセプトを
・Windows 11のStandalone版を第三者が起動し、Twitch認証なしでDEMO MODEへ入り、説明をほとんど受けずに10分遊べること。
・その10分でMother Planetsの肝を直感的に理解し、このゲームならではの体験を実際に味わえること。
この2つに決めました。
Alphaから思い切って削るものも決定
この基準で考えると、以前Alphaへ入れようとしていたものの中にも、今は必要ないものがかなりありました。
永続PPやPersonal Best、Leaderboard、CPU AutoFill、大量のPlanet Event、CP EVENT、能力を3種類以上入れること、Channel Points Reward Managerの完全版などは、Contest Alpha後へ回します。
これらは製品版では面白くなる要素ですが、10分でMother Planetsを理解してもらうために必須ではありません。
種類を増やすより、まず一つ一つのコア体験をちゃんと完成させます。
逆にAlphaへ前倒ししたもの
その代わり、審査員が実際に遊ぶことを考えて優先順位を上げた機能もあります。
共通入力モデル、ModeSelect、入力エラー表示、Demo Restart、短時間でも見せ場が発生する仕組み、!join 時の惑星生成演出、最低限のSEなどです。
機能の数というより、「初めて触った人が迷わないこと」と「何をしたいゲームなのか伝わること」を重視する方向へ変わりました。直観的に理解できる構造を強く意識した修正としました。
12月以降は原則として新機能追加を止め、すでにある機能のUI、演出、音、安定性、バランスを磨く期間にする予定です。
DEMO MODEはただ眺めるモードにしない
Contest Alphaで特に大きく方針を変えたのがDEMO MODEです。
最初は疑似視聴者を自動生成してゲームを動かす方式をAIが計画していましたが、それだけでは実際のMother Planetsを遊んだ感覚が伝わりません。
そこで、ゲーム画面上に疑似Twitchチャットをオーバーレイ表示し、審査員本人にコマンドを入力してもらう方式をオーダーして、計画を修正してもらいました。
PCの小さなウィンドウのように、ドラッグして好きな場所へ移動できるオーバーレイにする予定です。
審査員自身が !join して惑星になる
DEMO MODEでは、オーバーレイにまず名前を入力して、
!join
とチャット欄へ入力します。
すると、その名前を持った惑星がMother Planetsの宇宙へ誕生します。さらに !ray や !guard なども同じチャット欄から入力できるようにします。
横ではDemoViewerBotたちも逐次参加して、複数視聴者がいる実際のTwitch配信に近い状態を作ります。
「コメントしたら自分が宇宙の一部になった」
という瞬間は、Mother Planetsのかなり大事な体験なので、ここはしっかり見せたいところです。
疑似Channel Pointsも触れるようにする
さらにオーバーレイには、chatだけでなくchannel pointsのタブも作る予定です。ゲーム内で疑似的にtwitchのチャット欄の機能を実現します。
Contest AlphaではChannel Pointsの機能を大量に移植するのではなく、「3公転契約」と「タイマン契約」の2つに絞ります。すべての契約は実装せず、契約によるゲーム体験を最低限に絞ります。コンテストαでは、多機能性より機能を絞ってゲーム性の理解をとにかく重視します。
Channel Pointsを使ってゲームへリスクを持ち込み、そのあとチャットコマンドで自分の惑星を操作するところまで体験できれば、Mother Planetsの特徴がかなり伝わると思っています。
実TwitchとDEMOを別ゲームにしない
そして今回、Contest Alpha全体の設計原則として一つ決めたことがあります。
「実TwitchとDEMOの二重入力を常に維持する」
ことです。
DEMO用に別の簡易ゲームを作るのではありません。実際のTwitchチャットから入力しても、ゲーム内の疑似チャットから入力しても、その先では同じゲーム処理を使います。
提出動画では、本物のTwitchコメントから !join や !ray を使い、実際にTwitchと接続して動いているところも見せる予定です。一方、審査員が実際に触るときにはTwitch認証なしで全く同じ内容のゲームを体験できます。
そのための内部構造を大改修
そして10月1日は、この二重入力を実現するための内部構造をかなり大きく変更しました。
これまでゲーム内部でもTwitchのUser IDを直接使っていましたが、新しく ParticipantId という共通の参加者IDを作りました。
これによって、
Twitchから参加した人なら Twitch:xxxxx
DEMOから参加した人なら Demo:demo-user-01
のように、参加元を区別しながら同じ参加者システムへ乗せられます。
PlayerCommandRequestとCommand Router
チャットコマンドについても、Twitchのメッセージをそのままゲームロジックへ渡す方式から変更しました。
現在は一度 PlayerCommandRequest という共通の命令データへ変換し、それを PlayerCommandRouter が !join、!ray、!status、将来の !guard などへ振り分ける構造になっています。
つまり、
Twitch → PlayerCommandRequest
DEMO → PlayerCommandRequest
と、入口だけが違います。
その先は同じMother Planetsです。入り口が異なるのにゲーム体験は全く同じという構造が肝要です。
共通Join処理も完成
!join についてはさらに一歩進めて、参加登録、再参加Cooldown、空いている軌道の決定、惑星生成までを共通のJoin処理として切り出しました。
実Twitchから !join しても、DEMOから !join しても、同じ処理を通ります。ここまで変更したあと、もちろん実Twitchが壊れていないか何度もスモークテストをしています。
実際のTwitchから !join して正常に惑星が生成され、Warning 0、Error 0を確認しました。
ついにTwitchを偽装しないDemo惑星が誕生
そしてついに、大きなCheckpointを一つ通過しました。
これまでテストユーザーを作るときは、内部で「偽物のTwitchメッセージ」を作って参加させていました。今回はそれをやめて、本当に ParticipantSource.Demo を持つDemoユーザーを生成しました。
DemoUser01、DemoUser02、DemoUser03 が、本物のTwitch参加者と同じJoin処理を通って惑星として生成されました。しかも表示されるだけではなく、そのまま公転し、恒星jyoriのレーザー対象になり、Auto Combatにも参加しています。
TwitchとDEMOが同じMother Planetsへつながった
現在の構造はかなりシンプルになりました。
Twitchから来ても、DEMOから来ても、
PlayerCommandRequest
↓
PlayerCommandRouter
↓
共通Join処理
↓
惑星生成
という同じ道を通ります。
DEMO専用のゲームロジックは作っていません。これは今後 !ray、!guard、3公転契約、タイマン契約、Channel Pointsを実装するときにもかなり効いてくるはずです。大変でしたが後に効く設計となっています。
ただし「Twitchなしで起動」はまだこれから
現時点では、一つ区別しておかなければならないことがあります。
Demoユーザー自体はTwitchを偽装せず参加できるようになりましたが、ゲーム起動時にはまだTwitch認証処理そのものが動いています。
最終的なContest DEMO MODEでは、ModeSelectでDEMO MODEを選んだ場合はTwitch認証処理自体を起動しないようにします。
つまり今は、
「Twitchなしの入力をゲームへ入れる基盤」が完成した段階です。ここから本当の審査用DEMO画面を作っていきます。
Contest Alphaは現在45%くらい
今回、現在のContest Alpha進捗も改めて計算しました。
ざっくり 45%前後です。
Twitch接続や基本戦闘、恒星レーザーといった内部基盤はかなり進んでいますが、ModeSelect、DEMO Overlay、!guard、契約、疑似Channel Points、Join生成演出、SEなど、審査員が実際に触るための部分はこれからです。
内部の地味な基礎工事がかなり終わってきたので、これからは作業するたびに画面上でもより変化が見えやすくなってくると思います。
次はいよいよDEMOを操作できるようにする
次の作業では、まず現在残っている移行用コードを整理します。
そこからDemo側の !ray、!guard、ModeSelect、そしてドラッグできる疑似TwitchチャットOverlayへ進む予定です。
最終的には、審査員がゲームを起動して、
名前を入力
→ !join と打つ。
→ 自分の惑星が宇宙に誕生する。
→ !ray や !guard で介入する。
→ Channel Pointsから契約を開始する。
そんな10分間を作ります。
ようやく「審査員が遊ぶMother Planets」が見えてきた
前回の記事を書いた時点では、「Twitchで参加した惑星へレーザーが飛んだ!」というところでした。
数日後の今は、本物のTwitch参加者と、まだ画面UIすらないDemo参加者が、同じMother Planetsのゲームシステムの中で一緒に公転して戦えるところまで来ています。Contest Alphaを作るうえではかなり重要な期間になりました。
ここからは、この土台の上に実際に審査員が触れるUIや演出を乗せていきます。まずは12月19日のContest Alpha完成を目標に、引き続き少しずつ進めていきます!
いよいよ開発をしているという実感を伴って、楽しく作業できています!Contest Alpha完成の絵は見えているので、地道に進めていきたいです。