【Unity】ゲーム操作の結果をプレイヤーに伝えるフィードバック
todoでございます。
ゲームをプレイしていると、自分が操作した結果が画面に表示されたり、効果音として表現されることが多いです。
ゲームもコンピュータによるプログラムだと考えれば、人間にその中身や内部状態を伝えるための仕組みが必要になります。特にゲームでは操作した結果がプレイヤーの次の操作にも影響するので、何が起こったのか、今どうなっているのかを伝えるのは大切です。
そこで操作結果をプレイヤーに伝える「フィードバック」について考えてみたいと思います。
なお、ゲームをリリースした後などに感想やレビューをもらうこともフィードバックではありますが、このページでは対象にせず、ゲーム内の操作結果を伝えることに注目します。
フィードバックとは
フィードバック(feedback)とは、何かしらの結果を返すことで、「帰還」や「反応」が訳語としてあてられています。「フィードバック」とそのまま使うことも多いかもしれません。
ゲーム開発では大きく分けて2つの場面で「フィードバック」という言葉が出てきます。
ひとつはシステム的なフィードバックで、プレイヤーの操作の結果を画面または効果音として返すものです。例えばプレイヤーが敵を攻撃した際に敵キャラを赤くしたり、エフェクトを表示したり、効果音を再生したりするものです。ゲーム内での結果を返す方で、このページで対象としているフィードバックはこちらのものです。
もう一方のフィードバックはビジネス的な視点からのもので、リリースしたゲームに対する感想や評価、レビューなどを受け取るものです。受け取った評価などを元にゲームをアップデートしていくことを指し、どちらかというとゲーム開発者がやった結果に対してユーザーさんから情報を返してもらう意味合いが強いです。こちらはこちらでとても重要なので、またいずれまとめておきたいと思います。(ほら、思うだけならタダですから)
フィードバックの種類
さて、ゲームシステム内でのフィードバックに関してはいくつかの種類があります。ここではゲームプレイ時に使用する五感のうち、視覚、聴覚、触覚に分けて考えてみます。メインは視覚と聴覚で、デバイス連動のゲームで触覚が使われることもあります。
嗅覚、味覚については今のところ対象の物質そのものがないと再現するのは難しいですから、フィードバックについては今回対象外にしています。そのうちゲーム内でケーキを作ったらケーキを味わえる、みたいな未来のテクノロジーが出てくるかもしれませんので、その時に考えましょうか(笑)
さまざまな理由で直接ケーキを食べることはできないけど、味だけ再現することができる、なんてことができたら幸せになる人も増えるかもしれませんね。
……おっと、話が逸れたのでフィードバックに戻ります。
視覚で受け取るフィードバック
視覚で受け取るフィードバックは多く、主にエフェクトの形で表現されます。上でも少し触れましたが、敵を攻撃した際に赤くしたり点滅させるのもそうですし、ダメージエフェクトとして斬撃や弓矢が当たったエフェクトも再生されるかもしれませんし、画面自体が光ることもあるかもしれません。
ゲームの特性上、視覚に頼る部分も大きいため、視覚で受け取るフィードバックとしてプレイヤーにある程度多くの情報を伝えることも必要です。
例えば個人的にどハマりしたゲーム『ホライゾン: ゼロドーン』だと敵の機械を攻撃すると、ダメージを受けたパーツ部分が紫っぽく光るので「今ここにヒットしたんだな」と分かりやすくなっています。また、ダメージが積み重なると部位破壊できてその部分の武装を剥がしてこちらが使えるようになったりと、プレイヤーの操作との相互作用が大きくなっています。
昔のゲームを考えると、ファミコン時代のドラクエでもフィードバックが入っていたように思います。
ドラクエではメラなどの呪文を唱えれば画面が赤く光りますし、敵を攻撃すれば敵のスプライトが点滅していました。こちらが攻撃を受ければ画面が揺れたりなど、RPGで動きが少ないながらもこうしたフィードバックは取り入れられていました。(思い出しながら書いているので記憶違いがあったらすみませぬ)
ゲームの場合は状況に応じて選択肢が変わるので、遊んでいる際に今何が起きているのか分かるとプレイヤーとしても状況を掴みやすくなります。フィードバックは状況判断の材料としてとても大切なんです。
また、「手応え」という観点からも分かりやすいフィードバックが必要になります。敵を攻撃したのに、システム内ではHPが減っているけど画面上で何も起きていない、なんて状態だと「今の操作は何が起きたのか……コレガワカラナイ」とどうしていいのか分からなくなってしまいますからね。例えばバスで降車ボタンを押したのに光らない、音も鳴らない、だと本当に運転手さんに伝わっているのか分からないですもんね。
なので、操作した結果敵を攻撃したなら、敵が攻撃を受けている状態をきちんと伝える必要があります。その方法としてダメージエフェクトを再生したり、画面を光らせたりなどの方法が有効です。強い攻撃をしたらより派手なエフェクトを表現するようにすると、「今のは強い攻撃だったな」とプレイヤー自身の楽しさを増幅させることができます。
聴覚で受け取るフィードバック
聴覚で受け取るフィードバックも重要です。コンシューマ機やPCゲームだと音を鳴らしてプレイすることが多いかと思いますが、その場合には視覚と連動して聴覚のフィードバックも入れるとより深みが出てきます。スマホゲームだと音を消した状態でプレイすることもありますが、そうは言っても音を鳴らして遊んでくれる人もいることを思えば聴覚のフィードバックを入れなくて良い訳でもないので、ここはしっかりと入れておくことをおすすめします。
ゲームだと視覚優位とは言われつつも、私たちは聴覚からも多くの情報を読み取っています。
多くの場合、現実では何らかのアクションを行うと音が聞こえます。歩けばパタパタと足音が聞こえますし、物を落としたらコトンと音がします。ガラスを割ってしまったらガシャンと大きな音が鳴るかもしれません。
ゲームでも同じように、宝箱を開けたらギィギィと効果音を鳴らしたり、敵を攻撃したらヒットした効果音を鳴らすことで、より現実と結びついた体験になります。攻撃をミスしたら「スカッ」と空振りする効果音、強い攻撃がヒットしたら重い効果音など、アクションの種類に応じて効果音を切り替えるとより印象が伝わりやすくなります。
また、現実のような音響についても表現を取り入れるとよりプレイヤーの普段の生活に紐付いた体験が提供できます。例えば街を歩いている時には左後方から車の音が聞こえてくれば「あ、車が近づいてきたな」と判断できます。音から方向を読み取ることができるので、これをゲーム内で再現することもできます。Unityの場合はAudioSourceの3DSettingsで距離に応じた減衰やドップラー効果の設定ができるため、現実世界のような音の表現ができます。
そこでフィードバックとして、右にいる敵を攻撃したら攻撃音を再生すると同時に右方向で再生するようにすると、より臨場感が生まれてきます。特に3Dのゲームであれば現実世界の経験は大きなヒントになります。
効果音については、音の種類、音の大きさ、音の方向、あるいはタイミングなど、多くの選択肢があるので選び方がちょっと大変ですが、フィードバックという観点では「どの効果音をどのように再生すればプレイヤーに伝わりやすいか」という軸で選ぶと良いかもしれません。
触覚で受け取るフィードバック
視覚、聴覚に比べると触覚によるフィードバックを受ける機会は少ないかもしれません。コントローラを使うゲームやキーボードを使うゲームでは、その機構事態に対してフィードバックを行うことはあまりありません。どちらかというとゲームセンターのゲームでマシンとゲームが連動するような形式だと触覚のフィードバックが使われます。
例えばレースゲームでコースアウトしたらハンドルが切れなくなる、アクセルが踏めなくなる、みたいな感じですね。遊んでいる時は友達とワーワー言いながら遊んでいてうろ覚えだけで書いているので、本当にそうだったかは確かではないですけど(笑)
コントローラではなく現実の車の操作などをシミュレーションする場合に触覚のフィードバックが使われることがあるかもしれません。機械との連動が必要になることから家庭用ゲーム機だと実現が難しいかもしれませんが、そのうち出てくるかもしれませんね。
Tシャツ型のデバイスがあって、敵から攻撃されたら殴られた痛みを再現する……いや、これは書いていてすごい嫌なデバイスだなと思いましたが、もう少しライトな感じ、例えば陶芸のゲームで土の感覚を表現するとかは面白そうですね。
コンピュータゲームの場合はあまり意識することは少ないかもしれませんが、物理的なデバイスを使う場合はこちらも検討しておくと良いと思います。
フィードバックの実装案
ここまでは感覚に応じたフィードバックの概要に触れました。これらを実装する場合の案についてUnityを例に紹介したいと思います。
なお、「やろうと思うことには大体先人がおんねん」の法則の通り、アセットストアにはフィードバックの実装に特化したアセット「Feel」があります。
こちらはTopDown EngineやCorgi Engineでお馴染みのMoreMountainsさんのアセットで、フィードバックの作成に便利なアセットです。TopDownEngineを使っていると既に「MMFeedback」という形でいくつかコンポーネントが含まれていますが、その機能拡大版のような位置付けです。
自力実装するもよし、こうしたアセットを使ってお手軽にいい感じのフィードバックを作るもよし、なので作りたいゲームに合わせて選択してみると良いと思います。
敵を赤くする
敵を赤くする場合は、2DならSpriteRendererのコンポーネント、3Dならマテリアルの操作を行います。3Dでもマテリアルを直接操作するのは影響範囲が大きいので、シェーダーを作ってコンポーネントから動的に色を変更できる仕組みを用意するのも良いと思います。
攻撃の属性に応じて画像の色を赤以外に変更するのもグッド。氷系の魔法なら青くなるとイメージが伝わりやすいですし、雷系なら黄色くなるとこちらもイメージしやすくなります。赤は炎の色だったり、物理攻撃による血の色だったりなので、一番イメージしやすいかもしれません。露骨に血飛沫が出てくるゲームだと赤は結構どぎつい感じになりますが、そこは対象年齢やゲームの雰囲気に合わせて調整すると良さそうです。
ある程度シェーダーをいじれるなら、3Dのゲームならダメージ時の敵オブジェクトについては色々と表現方法があります。頂点をずらしてウニョウニョと衝撃が伝わるようにしてもいいですし、ダメージを受けた部位が半透明になったりしても面白いです。ホライゾン・ゼロドーンだと敵の機械の弱点部位を攻撃したりすると紫っぽい半透明のシェーダーになったりして綺麗でした。敵がダメージを受けていることが分かりやすいのも利点です。
エフェクトを再生する
例えばRPGなどで攻撃を行ったタイミングでエフェクトを再生することもあります。あります、というかほぼ再生していますね(笑)
開発初期だとエフェクトの作成が進んでいない状態でシステムを組むことがあり、その時にはなんとも味気ない雰囲気になる……なんてのは経験があるかもしれません。実際、ユーザーが何らかのアクションを行なった場合はエフェクトという形でフィードバックを返すのはとても大切です。その分かりやすさの部分だと攻撃エフェクトは重要です。
余談ですがRPGツクール2000を使っていた時代、友達を競うようにかっこいいエフェクトを作っていました。エフェクトだけかっこよくて、肝心のゲームがバカゲーだったので別の友達から「素材が泣いている」と笑われたこともありました。
Unityでゲームを作り始めた時は、自分でエフェクトを作ろうとしてParticle Systemを使ってみて「これ時間がかかるな」と半ば諦め状態でしたが、アセットストアでも無料で使えるエフェクト素材などがあるので、まずはこうした素材から使っていくと良いと思います。エフェクトを少し調整してみたりしてパラメータを覚えると、自分で作る時にも役立ちますからね。
UnityだとParticle SystemだったりVisual Effect Graphを使って自分で作っていくのも楽しいので、ゲーム作りに慣れてきたらエフェクト作成で自分の色を出していくのも面白いです。
ちなみにこれはVisual Effect Graphで遊んでいる時に5分くらいで作ったエフェクトです。「胎動」なんて厨二病まっ盛りな名前で保存されていました。元々のイメージだとFFのフレアを想像していた気がします(ずっと前に作ったので記憶が曖昧)。ゲーム内で何かが起こったことを伝えやすいのがこうしたVFX(視覚エフェクト)だったりします。
画面を揺らす
こちらが敵を攻撃したタイミング、あるいは敵がこちらを攻撃したタイミングで画面を揺らすのもありです。カメラはゲームを遊んでいるユーザーの目となるもので、カメラ自体が揺れることでゲーム内のキャラクターと一体感を持つことができます。
カメラを揺らすならCinemachineのImpulseの機能を使うのが便利です。CinemachineはUnityのカメラ機能を大幅に強化したパッケージで、スクリプトによるコーディングをあまりしなくてもいい感じにカメラを制御することができます。Cinemachineではカメラを揺らすための機能としてImpulse(インパルス: 衝撃)の機能があり、任意のタイミングで画面を揺らすことができます。タイミングの制御はTimelineなどを使うとさらに制御しやすくなるかと思います。
Cinemachineについてはざっくりと以下の記事でも書いています。Impulseについてもそのうち書きたいです(願望)
画面を一瞬光らせる
1フレームか2フレームだけ画面に白いマスク画像を表示することで、一瞬だけ光る演出ができます。ゲーム内で明るくするとなると、「白」が一番明るい色になるため、これを一瞬だけ表示するわけですね。
やりすぎるとユーザーの目への負担がかかるため、あまり多用しないのが得策ですが、ここぞというときに入れると演出面が強化されます。特にエフェクトとの組み合わせが有効です。
ファミコンのドラクエやFFでも魔法を使ったタイミングでその魔法に合わせた色を画面全体に表示していました。例えばメラ系やファイア系だったら画面を赤(オレンジ)に、ヒャド系やブリザド系なら画面を青に、といった感じで属性のイメージに合わせて一瞬光らせていたんですよね。サブリミナル的な形で印象を伝えるのに便利な方法です。
DOTweenなどのTween系アセットを使用してアルファの値を変化させるとそれっぽく見えます。
効果音の再生
上のフィードバックは主に目に訴える方法で表現していきました。この効果音は聴覚に訴える方法になっています。単純に今PCやスマホの画面をデコピンしてもらったら音が鳴るのが分かるかと思います。
ダメージを与えたら効果音を再生したいところ。RPGだったら武器の種別に合わせて効果音を選択していきましょう。
音というのは不思議なもので、聞いたことのある音だとそのイメージを脳内で再生してくれるんですよね。例えば生活音や環境音なら音を聞けばどのような状況なのか分かります。剣で戦っている効果音は現代だと実際に経験した人は少ないかと思いますが、戦国時代のドラマや他のゲームで剣の効果音を聞いている機会も多いと思うので、そうした経験からイメージが再生されます。
ファンタジーなゲームやSFなゲームだと現実には存在しない魔法や道具が出てきます。こうした時には、現実に存在する音と似ているけどやっぱりちょっと違う、なんて感じで異質な雰囲気を感じ取れる効果音を選ぶと良いかもしれません。
ちなみに遠くの敵を倒す場合などは、エフェクトを先に再生して効果音をちょっとだけ遅らせると現実の物理的な音の雰囲気が出てきます。FPSなどで遠くの敵を狙撃した場合は音速を考慮してディレイをかけるのも手です。
音の方向を表現する
音速の話に関連して、音の方向に関しても力を入れることができます。UnityのAudioSourceだと「Stereo Pan」の項目で左耳側で音を鳴らす、あるいは右耳側で音を鳴らすといった設定が可能です。普段の生活を思い出してもらうと、多くの人は音が鳴っている方向を聞き分けています。これをゲームでも取り入れることで、普段の生活に近い形でゲームをプレイすることができます。
FPSやホラーゲームなどでは特に音のしている方向はゲームプレイのヒントになるため、余力があれば音の鳴る方向も設定できると良い感じです。この項目を直接いじるのも良いですが、実は下の方に「3D Settings」などもあったりします。「Spatial Blend」の項目で3Dの方にスライダーを動かすと、AudioSourceとAudioListener(多くの場合はカメラ)の距離や位置関係に応じて立体的に音を再生してくれます。(Spatialは「特別(スペシャル)」ではなくて、Spaceから派生した「空間的な」という単語です)
右の方向から敵が歩いてきたら足音が右から聞こえてくる、なんてことも表現できます。ユーザーの操作の結果に加えて、ゲーム内の他のキャラクターが動いた結果を足音として方向を加えて再生するというのもフィードバックのひとつです。
まとめ
ゲームプレイ時にプレイヤーが操作した結果をプレイヤー自身に伝えるフィードバックについて3つの観点から考えました。それぞれ具体的にどのように実装するかはまた別途個別に書くとして、ここでは概要を紹介しました。
プレイヤーの操作した結果はちゃんとプレイヤーに伝えないと何が起きているのか把握するのが難しくなります。ボタンを押したのに何も起きていないように見えるのはプレイヤーが不安になるため、なるべくゲーム内で今何が起きているのか伝えていくようにするとグッド。
状況把握の他に「手応え」などを表現してゲームの楽しさを引き出すことにもつながるので、ぜひ入れていきましょう。
ゲーム開発の攻略チャートを作りました!
-
前の記事
【ゲーム開発】素材から作り始めない方が良い理由〜個人の経験を添えて 2021.08.23
-
次の記事
Minable&Create/ミナクリのデモ版(体験版)がリリースされたので全人類遊んで! 2021.09.01
コメントを書く