sam113のアクションゲーム研究室

おもにフリーや同人、インディーズなどでアクションゲームを作っている方に向けて、アクションゲームを作るヒントになるような情報を発信していきたいと思います。

はじめに

このブログの主旨について

主にフリーや同人、インディーズなどでアクションゲームを作っている方や、これから作ろうとしている方に向けて、アクションゲームを作る上でのヒントになるような情報を発信していきたいと思います。プログラミングの話題ではなく、ゲームデザインの話題が中心です。

このブログの筆者について

過去20年近く、自作のアクションゲームをネット上に公開し続けてきました。プロではなくアマチュアです。代表作は「おばけの行進曲」。

ネット上での作品の公開はすでに終了していますが、個人的な創作活動は今でも続けています。これを書いている直近でハマったゲームはスーパーマリオメーカー2。自分のこれまでの経験を発信する場を設けたいと思い、このブログを立ち上げました。

 

記事リンク

 

アクションゲームと物理エンジン ~物理エンジンの有意義な使い方~

身近になった物理エンジン

今や、物理エンジンは身近なものとなりました。Unityなどのツールには物理エンジンが搭載されているため、プログラミングの知識がほとんどなくても物理エンジンを扱うことができます。

しかし、物理エンジンも万能ではありません。

 

操作感の謎 ~究極のジャンプを求めて~ - sam113のアクションゲーム研究室

上記の記事でも述べたように、アクションゲームにおいては物理的に正確な動きが必ずしも良い操作性を生み出すとは限りません。時には物理法則を無視した方が良い操作性が生み出される場合もあります。

それでもなお、物理エンジンは強力なツールです。物理エンジンを正しく使えば、ゲームの表現力を飛躍的に向上させることが可能です。それらを踏まえた上で、アクションゲームにおける物理エンジンの有意義な使い方を考えてみたいと思います。

物理エンジンの扱いの難しさ

まず最初に書いておきたいのは、物理エンジンを使ってアクションゲームを作るのは案外難しいということです。物理的挙動に忠実に動けば簡単にアクションゲームが作れるかというと、そうはいかないものです。

2Dの物理エンジンを使用する場合でも、たとえばキャラクターの足元の床が傾いている時、キャラクターを左右に動かすには移動方向を足元の傾斜に合わせてあげる必要があります。傾斜の角度が途中で変わったら、それに沿うように移動方向も調整する必要があります。
足元のオブジェクトが移動や回転をしたら?振り子のように動いたら?などなど、様々なことを考えれば考えるほど、物理エンジンをゲームに落とし込むのは簡単ではないことが分かります。これらはいずれも物理エンジンを使わなくても発生する問題ですが、物理エンジンを使っても同じ問題に直面します。

これらの本質的な原因は、アクションゲームのキャラクターが物理的に正しい動きをしていないためです。ゲームを作るうえで、どうしても物理的に嘘をつく必要が出てくるのです。そのため物理エンジンを使ってアクションゲームを作るには、物理エンジンの計算結果をそのまま使用するのではなく、計算結果をカスタマイズする必要が出てきます。

それでも魅力的な物理エンジンの表現力

しかし、それでもなお物理エンジンには魅力があります。私は物理エンジンの魅力は、作り手が予期しないオブジェクト同士の相互作用を生み出すことだと思います。

物体Aが転がって物体Bに衝突し、それが倒れて物体Cを動かして物体Dを破壊する…といった複数のオブジェクトが絡み合う複雑な相互作用は、物理エンジンでなければ実現が難しいものです。このようなドミノ倒しやピタゴラ装置のような動きは、プレイヤーの創意工夫を呼び起こします。ゲームの中で「物理実験」が可能になるのです。

もしボーリングのピンとボールがあったら、プレイヤーは喜んでボールをピンに向かって投げるでしょう。そこでボールに衝突して引き起こされるピンの動きは、ゲームの作者さえ予期しないものとなります。倒れたピンが転がり、さらに別のピンを倒すかもしれないし、まったく別の方向に飛んで行って敵キャラを下敷きにしてしまうかもしれません。

ゲームの作り手の想定を超えた現象が起こることで、ゲームは作り手の掌から飛び出て、真に創造性に溢れたものとなるのです。


ここでのポイントは、せっかく物理エンジンを使うのであれば、プレイヤーが自由に投げられるボーリングの玉を用意してあげるべきだということです。ボーリングの玉というのはもちろん比喩ですが、要はプレイヤーが物理エンジンに干渉する余地を与えるべきだということです。
もし物理現象を見ているだけで干渉できないのであれば、創意工夫を発揮することはできません。どうせなら、自由に投げられるボールやブロックを配置するなど、創意工夫を最大限発揮できる環境を整えてあげるのが良いと思います。それによって、物理エンジンの魅力が引き出されるのです。

アクションゲームとAI ~AIの活用方法を考える~

アクションゲームにAIが活用される局面とは

コンピュータゲームは、AIが幅広く活用されてきた分野の一つです。とりわけアクションゲームにAIは欠かせないものです。現代のアクションゲームでAIをまったく使っていないものは、ほぼ存在しないといっていいでしょう。古くはパックマンでAIが活用されていたことが知られています。

AIはゲーム内の様々な局面で使われています。NPCキャラクターの行動の制御、弾道の予測、空間上の経路探索、ゲームバランスの自動調整、ステージの自動生成などです。
AI技術の世界では、「キャラクターAI」「ナビゲーションAI」「メタAI」が現代のゲームを支える3つのAIとされています。
このブログでは、これらの技術的な内容には立ち入りません。ただプログラマでなくてもゲームデザインをする立場の人であれば、これらのAIによって何ができるかを知って損はありません。

今回は、これらの中でも特に「NPCキャラクターの行動の制御」「ゲームバランスの自動調整」「ステージの自動生成」の3つの分野に絞って、上手にAIを活用するための方法を考察したいと思います。

NPCキャラクターの行動の制御に使われるAI

AIの活用例として誰もが真っ先に思い浮かべるのが、NPCキャラクターの行動の制御でしょう。対人対戦型のゲームに一人用モードを付ける場合などは、対戦相手の行動の制御にAIが欠かせません。

古典的な2Dアクションゲームに登場する「ただ往復するだけ」の敵キャラの行動ロジックなどはあまりAIとは呼ばれませんが、状況によって臨機応変に行動パターンを変えるようであれば、AIと呼べるでしょう。たとえば敵キャラにとって有利な時はこちらに積極的に攻撃してきて、不利になったら逃げだすようなロジックであれば、十分にAIの範疇です。

 

敵キャラクターの設計 ~ゲーム世界の住人たち~ - sam113のアクションゲーム研究室

上記の記事でも述べましたが、キャラクター制御のAIは特に3D作品で必要とされるもので、2D作品の場合は「ただ往復するだけ」のような敵キャラばかりでも、それはそれでゲームを成り立たせることができます。
3D空間を歩き回る作品の場合は、キャラクターにある程度知性のある行動を取らせないとゲームの表現と馴染まないため、AIがより重要となります。特に空間が複雑な場合は、キャラクターが地形に引っ掛かって進まなくなる問題を解消するため、経路探索が欠かせません。

 

キャラクターが高度な知性を持って自律的に行動すると、まるでそのキャラクターがゲーム世界の中で生きているように感じられてきます。生きている感覚を生み出すというのはAIが目指すものの一つで、これによりホラーゲームは恐怖の度合が増し、対戦ゲームは本物の人間と対戦しているような感覚が増します。
そして十分に成熟したAIは、AIとの駆け引きを楽しむという遊び方を生み出します。2D作品であっても「ただ往復するだけ」の敵キャラばかりではなく、作品の目指すテーマによってはAIの導入を検討して良いでしょう。

ゲームバランスの自動調整

いわゆるメタAIと呼ばれる分野の中でも、比較的古典的な領域の一つなのですが、プレイヤーの目に見えないところでゲームバランスを自動調整することが古くから行われてきました。
プレイヤーが有利になったら敵キャラの数を増やし、不利になったら敵キャラの数を減らす、などといったことです。特に対戦型のゲームでは、上級者へのハンディキャップとして目に見えにくい形でこれらが行われてきました。

私自身が開発した作品でも、たとえばボスキャラとの戦闘時にプレイヤーが不利になったら回復アイテムの生成量を増やすなどの手法を取っています。

 

こうした手法は比較的シンプルな仕組みでも実装可能で、その割に効果が大きいことが特徴です。プレイヤーのゲームのスキルには個人差がありますが、この個人差をなるべく埋めるための手法といえます。

より一段踏み込むなら、単にゲームバランスを調整するだけでなく、プレイヤーの心理状態に応じてゲームの難易度の「ゆらぎ」を生成することで、ゲームにおける緊張→緩和→緊張→緩和…の波をも自動生成するというアプローチがあります。

緊張と緩和の波を作ることはゲームのステージ設計の基本技術の一つですが、周囲に敵キャラがいなくなったら敵キャラを新たに生成し、敵キャラが増え過ぎたら新たな敵キャラの生成を止める、などとすることで緊張と緩和の波を自動的に生み出すことが可能となります。ここまで来ると、ステージの自動生成の一歩手前まで来ています。

比較的AIを導入しやすい分野なので、導入を検討してみるのも良いかと思います。

ステージの自動生成

これもいわゆるメタAIと呼ばれる分野の中の一領域になります。

ステージの自動生成といえばローグライクと呼ばれるゲームジャンルが有名ですが、現代ではローグライクに限らず、オープンワールド型のゲームの膨大なフィールドを自動生成するアプローチが取られるようになってきています。
ステージの自動生成はプレイヤーと作り手の双方に恩恵があり、プレイヤーは実質無限のステージをいつまでも遊ぶことができて、作り手は膨大なステージデータを作る手間を省力化できるという利点があります。

しかしステージの自動生成技術は、敵キャラが「ただ往復するだけ」のような古典的な2Dアクションとは相性が悪いというのが私の考えです。このタイプのゲームは、地形や敵キャラの1マス単位の細やかな配置がゲームの面白さに直接影響しますが、AIによる自動生成ではそこまでのきめ細かい配置がまだ難しいからです。

それよりは、地形や敵キャラの配置が少しずれても問題ないようなタイプのゲームにこの手法は向いています。敵キャラが高度なAIで自律的に動き回るようなゲームであれば、初期配置の少しの違いはあまり問題になりません。

 

ステージの自動生成は、他のAI技術と組み合わせて効果が発揮されるものです。敵キャラは地形を読み取り経路探索を行い自律的に動き回る必要がありますし、敵キャラの出現数の調整にはゲームバランスの自動調整技術が役に立ちます。そういう意味で、このタイプのAIの導入はハードルが高いといえるでしょう。

 

余談ですが、無限に近いステージの生成をAIではなく人力で行ったのが、スーパーマリオメーカーだと言えます。

人間によって生み出されるステージのアイディアの豊富さには、AIはまだまだとても追いつきませんが、将来的には、スーパーマリオメーカーのような仕組みで生み出された膨大なステージデータをインプットとした学習により、人間が生み出すのと同等のアイディアを持つステージデータをコンピュータが生み出す日が来るのかもしれません。

そうなれば、ステージ制作はもはや人間の仕事ではなくなるのかもしれませんね。

ボスキャラを考える ~プレイヤーへの最終試験~

ボスキャラは何のためにいるのか

ゲームの最後を飾るのに欠かせない存在といえばボスキャラですが、今回はこのボスキャラについて考えたいと思います。そもそもボスキャラは何のためにいるのでしょうか。

ゲームの歴史を紐解くと、スペースインベーダーなどの最初期のゲームにはボスキャラがいないものが多く、ゲームの最後まで進んだらまた最初に戻る繰り返しの構造を持つものが多く見られました。今や定番となったボスキャラという存在も、一種の発明だったということです。

ゲーム内でのボスキャラの役割は、主に以下のようなものでしょう。

  • ゲームの難易度曲線のピーク
  • プレイヤーに与えられる目標
  • プレイヤーの技術と経験を問う「最終試験」
  • ストーリー上のクライマックス
  • 派手な演出などでインパクトを与える

裏を返せば、これらの要件を満たせばボスキャラというキャラクターは必ずしも必要ないのですが、代わりとなるアイディアがなかなか出てこない程度には優れた発明だといえます。

「最終試験」としてのボスキャラ

ここでは、ボスキャラの「最終試験」としての側面に着目してみたいと思います。

ステージクリア型のアクションゲームを想定した場合、ボスキャラに至るまでの過程でプレイヤーは様々なステージを解き、ゲームの腕前を磨くことになります。ボスキャラより前のステージが「練習問題」だとすれば、ボスキャラは「試験本番」にあたり、プレイヤーは「練習問題」で得た技術と経験を総動員してボスキャラに挑むことになります。

ここで重要なのは、「練習問題」で得た技術と経験が「試験本番」で役に立たなければ練習の意味がない、ということです。練習の意味がなかったら、プレイヤーは何のために腕前を磨いてきたのか分からなくなります。つまり過去のステージで培った技術と経験の応用でボスキャラを攻略できるのが望ましいのです。

このあたりが非常によくできているのがゼルダの伝説シリーズです。ゼルダの伝説シリーズでは、ダンジョンごとに攻略のキーとなるアイテムが登場しますが、ダンジョンの最後を締めくくるボスキャラは、ほぼ必ずそのキーアイテムを使って攻略するようになっています。ダンジョンの攻略が、そのままボスキャラの攻略の練習にもなっているのです。

作り手から見たボスキャラ

ボスキャラを設計するのは、ステージの設計とは別種の難しさがあります。通常の敵キャラとは見た目で差別化する必要があるためまずグラフィックを用意するのが難しく、プレイヤーにどのように攻略させるかを考えるゲームデザイン上の難しさもあります。
さらにボスキャラの動きを生み出すプログラムも複雑なものとなりがちなため、ボスキャラの開発作業はグラフィック・ゲームデザイン・プログラムが結びついた大変難易度の高いものとなります。

ちゃんとしたボスキャラを何体も用意するとなると、開発コストのかなりの割合がボスキャラの開発に取られることになるでしょう。

 

個人開発などでどうしてもボスキャラにコストを割けない場合は、コストを下げるための工夫が必要となります。
見た目のサイズを小さくする、AIのベースを共通化する、同じキャラをパワーアップさせつつ何度も登場させるなどです。
こうした工夫は、うまくやらないとボスキャラのインパクトを弱めたり、飽きられたりといった弊害を招きますが、工夫次第ではそれらの弊害を最小化することができます。同じキャラを再登場させる方法などは、プレイヤー側にも「覚えることが少なくて済む」というメリットがあり、決して弊害ばかりではありません。

ボスキャラはゲームの華なので力を入れたいところですが、現実的に作れるかという問題もあるのでコストと相談して作っていくと良いと思います。ただ、冒頭でも述べたようにボスキャラは必ずしも必須のものではないとも付け加えておきます。

 

スーパーマリオメーカーからの学び ~レベルデザインの高速道路~

私とスーパーマリオメーカーシリーズ

スーパーマリオメーカーシリーズは、プレイヤーが自分でマリオのコースを作成・投稿し、また他のプレイヤーが作ったコースを遊ぶことができるというサービスです。
私自身もスーパーマリオメーカーシリーズを良く遊び、これまでシリーズ累計で150以上のコースを投稿してきました。また、他のプレイヤーが作ったコースを5000以上は遊んできました。今回は、それらを通じて考えたことを述べたいと思います。
なおここでは、スーパーマリオメーカーの用語に従い、「ステージ」のことを「コース」と呼びます。

レベルデザインの高速道路

私から見たスーパーマリオメーカーの最大の魅力は、開発・公開の手軽さです。
自分で1からプログラムを組んでゲームを作る場合、開発には年単位の時間がかかります。しかしスーパーマリオメーカーの場合、ちょっとしたアイディアを試す程度なら開発・公開にわずか数時間しかかかりません。しかもこれをスーパーマリオという完成されたフォーマットの上で行えるので、作り手はただコースを作ることだけに集中できます。これはゲームクリエイターの視点で見れば驚異的なことです。

そしてスーパーマリオメーカーでは、凄まじい数のプレイヤーが、日々ものすごい数のコースを投稿しています。その中からはごく一部ですがクリエイターとしての能力に開花し、良質なコースを数多く投稿するプレイヤーが出てきます。スーパーマリオメーカーに類似したコンストラクションツールは他にもありますが、最大の違いはプレイヤー層の厚さです。
まさにレベルデザインの高速道路と呼ぶべき、切磋琢磨の激しい世界です。私自身も、ゲーム開発の新たな知見を得たり、他のプレイヤーから学ぶところがたくさんありました。

これらの体験を経て私が感じたのは、クリエイターとしてのアウトプットの回数を増やさないと現代ではすぐ周囲に追い抜かれてしまうということです。
時間をかけてより良い作品を目指すのもいいですが、それよりも試行回数を増やしたほうが結果として上達が早くなると感じました。

プレイヤーが本当に求めるもの

ところでスーパーマリオメーカーで特徴的だったのは、いわゆるスタンダードなスーパーマリオのコースではなく、スタンダードから大きく外れたコースが人気を集めていたことです。
自由な音階を鳴らす仕掛けを使って音楽を演奏することに特化したコース、何もせずとも自動でゴールまで運ばれるコース、立ち止まらず常に全力で走ることを前提としたコースなどです。
そうしたコースでも人気上位のものはやはり完成度が高く、たとえスーパーマリオのスタンダードから外れても、人を楽しませることにおいては目を見張るコースが多くありました。

どちらかというと、アクションゲームが苦手な人でも手軽に爽快感や達成感を味わえるコースの人気が高い傾向があったと思います。単に難易度が低ければいいというものではなく、簡単ながら爽快感を味わえるというのがポイントです。

スーパーマリオメーカーの主要プレイヤー層は小学生あたりだと思われますが、スタンダードなスーパーマリオのコースは、注意深く作らないと主要プレイヤー層にはやはり難しすぎるのだと伺えます。手軽に爽快感を味わえるコースが人気を博していたのは、その裏返しでしょう。

そうしたコースは、スーパーマリオメーカーの枠組の中でこそ存在しえるものだと思いますが、しかしスーパーマリオ以外のゲームを作る場合でも、現代のプレイヤー層が何を求めているかのヒントにはなります。

それを知ることが出来たという点でも、スーパーマリオメーカーは学ぶところの多いゲームでした。願わくば、レベルデザインの高速道路という場を切り開いたこのシリーズが今後も続くことを望みます。

ゲーム全体の難易度曲線 ~無理なくゲームの難易度を引き上げるには~

プレイヤーの習熟度を測る

アクションゲームは、プレイヤーの腕前の差が現れやすいゲームジャンルです。ゲームを作る側としては、どんな腕前のプレイヤー層を想定するかは戦略の分かれ目ですが、いずれの層を狙うにせよ、狙ったプレイヤー層にちょうど良い難易度のゲームを作ることが重要です。

ゲームの最初の方は難易度を低めに、後半になるに従い難易度を高めていくのが基本ですが、この時の難易度曲線がプレイヤーの習熟度の上昇とよくマッチすることが肝心です。どうすれば、適切な難易度曲線を設定できるでしょうか?

ゲームの難易度は、AIで自動的に設定する方法もありますが、ここでは作り手の手作業による難易度の設定方法を取り扱います。

誰もが最初は初心者

ゲームの難易度設定は、他人に勉強を教えるのに似ています。基礎を教えないうちに最初から応用を教えても相手は付いて来れません。基礎を教えるのにも順番があり、一番基本となる事項から順番に教えていく必要があります。
相手のペースに合わせて基礎から応用へと徐々にステップアップしていけば、やがて複雑な応用問題も解けるようになるでしょう。

たとえ上級者向けに作ったゲームでも、最初はすべてのプレイヤーが初心者です。どんなゲームであれ、ゲームのルールを覚えたりゲームに慣れたりするための時間は必要なものです。

そして良く出来たゲームは、ゲームに慣れる過程そのものを楽しく感じさせます。ゲームに慣れる過程が楽しいと、プレイヤーは自発的にゲームに挑戦するようになり、自然と腕前が上達していきます。

そのため、遊んでいて自然とゲームのコツが身に付くようなチュートリアルを作るのが理想です。失敗を繰り返して学んでいくタイプのゲームでも、その失敗の繰り返しがチュートリアルとして機能していれば良いのですが、失敗の繰り返しが楽しいことが大前提です。


アクションゲームの場合、ゲームにすぐ慣れる人と、なかなか慣れない人で大きく差が出てきます。これはゲームのルールを頭で覚えるだけではなく、運動神経や反射神経といったセンスが求められるためです。

この個人差をどうやって埋めていくかは重要です。個人差を埋める一つの方法は、プレイヤーが十分に上達するまで、何度も繰り返し練習ができるようなゲーム構造にすることです。

たとえば、すでにクリアしたステージを何度も繰り返し遊べるようにするなどの方法があります。ここでのポイントは、繰り返し遊んでも楽しいと思える構造にすることです。そうすることで、プレイヤーは自分から楽しんで練習を行い、難易度曲線が自然に調整されていきます。

そして応用問題へ

ゲームの基礎に十分慣れさせた後は、徐々に「応用問題」を出してゲームの難易度を高めていきます。この時注意すべきは、単に難しくするだけでなく、習得済の技術の延長線上で応用問題を出すことです。そうすることで、プレイヤーはそれまで習得した技術を無理なく生かすことができます。

応用問題の作成には、たとえば以下のような手法があります。

  1. 問題の単調増加
    (基礎)敵キャラ×1→(応用)敵キャラ×2

  2. 問題のレベルアップ
    (基礎)狭い落とし穴→(応用)広い落とし穴

  3. 複数の問題の組み合わせ
    (基礎1)落とし穴→(基礎2)敵キャラ→(応用)落とし穴+敵キャラ

それまで培った基礎を生かして応用問題を解けたとき、プレイヤーは確かに自分が成長したという実感を得ることができます。これはプレイヤーの自己肯定感に繋がり、ゲームを続けて遊ぼうという意欲の源泉となります。

問題が急激に難しくなり過ぎないように、徐々にステップアップするように問題を設定するのが重要ですが、そのさじ加減はテストプレイを繰り返して調整するしかありません。何度も試行錯誤を重ね、ベストな難易度曲線を設定していきましょう。

レベルデザイン論2 ~自由に遊べる運動場~

空を自由に飛びたいな

レベルデザイン論1では古典的な2Dアクションゲームのレベルデザインについて取り上げましたが、今回はまた違った視点からステージ設計について取り扱います。

良くできたゲームは、キャラクターを動かしているだけで楽しいものですが、ステージデザインがそれを許してくれない場合があります。自由に空を飛べるゲームなら、飛ぶための広大な空が欲しいし、乗り物を乗り回すゲームなら、走るための長い道が欲しくなります。たまにはそうした、ゲームの難易度など無視した自由になれる瞬間があっていいはずです。

ステージ設計の基本は「緊張」と「緩和」にある、と前回述べましたが、時にはそれを崩してみるのもいいものです。

自由に遊べる運動場としてのステージ設計

こうした自由に動ける空間は、いわば自由に遊べる運動場です。キャラクターを動かす楽しさを存分に味わえる場所を提供することでゲームの楽しさをより豊かに広げることができます。

古典的な2Dアクションゲームのステージの中にも、こうした空間を無理なく組み込むことは可能です。特別に自由度の高いステージを用意する方法もあれば、一つのステージの中に自由に動き回れる空間を併存させる方法もあります。

この空間の併存のさせ方が非常にうまいのがスーパーマリオブラザーズ3です。
このゲームではしっぽマリオになれば自由に空を飛ぶことができますが、そのための空はほとんどのステージの上空に広がっています。ただし空を飛ぶためには長い距離の助走が必要で、いつでも飛ぶわけにはいきません。しかし一旦離陸に成功すればどこでも自由に飛び回る楽しさを味わえるというわけです。

このゲームには他にも「滑り落ちるための長い坂道」のような、純粋にアクションの楽しさを味わうためのポイントが随所に出てきます。

そのゲームで本当に楽しませたいことは何か

キャラクターを動かす楽しさに主眼を置いたゲームであれば、そのための舞台を用意するべきです。こうした発想に基づくステージ設計は、「緊張」と「緩和」の考え方に基づく設計方法とは異質のものですが、両者は共存することが可能です。
ステージのどこのポイントでどんなアクションを楽しませるのかを考えて設計するのがよいでしょう。