UE4でのサウンドの活用

※音を出すか、イヤホン推奨

どんなゲームでも必ずサウンドが入っています
人によってはゲームのサウンドが良いからという理由でゲームを購入する人も少なくありません
3Dのゲームにはより重要な要素で、音の方向や聞こえる範囲などでゲームから伝わる
臨場感は違ってきます

UE4には様々なサウンドに関しての機能が備わっています
今回はサウンドに関しての機能についての基本的な使い方や
テクニックのいる使い方などをちょっとだけ解説していきたいと思います

基本的な扱い方

レベル上に配置するだけで音が自動的に流れ始めます

図1

また、サウンドの再生するタイミングを決めたい場合は
サウンドを選択すると右側の「Detalis」の中に
「AutoActive」という項目があるので
チェックを外すと自動で再生されなくなります

図2

再生したいブループリント上(今回はレベルブループリント)で
レベル上にあるサウンドの名前を入力すると
「Create a Reference to ○○○(サウンドの名前)」が出てきます

図3

選択をすると次の画像のようなノードが出てくるので
再生したい場合はその下の画像の様に「PlaySound」ノードを使うと再生できます

図4
図5

キャラクターの足音

サウンドはBGMだけではなくSEなどの効果音もあります
今回はキャラクターに足音を付けていきたいと思います

ブループリントを編集する前に下準備をします
左上にある「Edit」を押して「Project Settings…」という項目を選択します
下のような画面が出てくるので左側にある一覧の中から「Physics」という項目を選択します
右側を下にスクロールしていくと「Physics SurfaceType」という項目が出てきます
今回はSurfaceTypeの1,2,3をそれぞれ「Grass」、「Sand」、「Concrete」に設定します

図23

Content Browserで「SoundAttenuation」と「SoundCue」を作っておきます

次にSoundCueを編集していきます
右側のPaletteから「Switch」と「Wave Player」を3つ作成します
それぞれのノードを画像の様に接続します
「Switch」のParameterNameを「SurfaceType」にしておきます
「Wave Player」には設定したい足音を入れておきます
最後に「Out put」のAttenuation Settingsに先ほど作った「SoundAttenuation」を設定しておきます

図16

足音を追加するために、「Content Browser」から「ThirdPersonRun」と「ThirdPersonCharacter」と「ThirdPerson_AnimBP」を開きます

まずは足音を鳴らすタイミングを取得するために「ThirdPersonRun」を編集します

「Notifies」という項目の下にあるTimeLineを右クリックします
「New Notify」という項目があるので選択をすると、TimeLine上にある様な
「FootSound」と同じようなものが出てきます

図7

ここで、「Play Sound」を選択してSEを再生することも可能ですが
今回は地面によって音を変えたいので今回は「New Notify」を
選択します

次は「ThirdPersonCharacter」を編集をします
先にViewportで必要なものを用意しておきます
左上にあるAdd Componentから「Static Mesh」を作成します
今回は足元から音を出したいので「Static Mesh」を足元に移動させます
名前をわかりやすいように「FootSoundPoint」と名付けておきます

図8

次にEventGraphでブループリントを作ります

まずはCustomEventを名前をわかりやすいように「FootSound」で作ります

キャラクターの足元の情報がほしいので「LineTraceByChannel」ノードを作ります
そして、「TryGetPawnOwner」ノードを作り、そこから「GetActorLocation」で位置を取得します
Startにはそのままの値を入れますが、EndにはZ軸を-100をして値を入れます

さらに地面の詳細な情報がほしいのでOut Hitから「Break Hit Result」ノードを作ります
「Break Hit Result」の一覧の中からPhys Matから「Surface Type」という変数を取得します
さらにそこから「Select」というノードを作っておきます

「Branch」から「SpawnSoundAttached」を作成しSoundには先ほど作った「FootSoundCue」を入れます
Attach to Componentには先ほど作った「FootSoundPoint」ノードをつなげます
最後に「SetIntegerParameter」でTargetは「SpawnSoundAttched」のReturn Valueを、
In NameにはSurfaceTypeを、in intには先ほどの「Select」のReturn Valueをつなげます
ThirdPersonCharacterは以上です

図22

最後に、先ほど「ThirdPersonRun」で作った「FootSound」を「ThirdPerson_AnimBP」でイベントとして作ります

図17

最後にマップ上の設定を行いたいと思います

まず、Content Browserで「Physics Material」を3つ作ります
それぞれの名前を「GrassPhysicsMaterial」、「SandPhysicsMaterial」、「ConcretePhysicsMaterial」にします

「Project Settings…」で設定したSurfaceTypeを対応したものに設定します

図20

マップ上に3つ「Cube」を設置し、Detailsの中にある「Collision」の「Phys Material Override」にSurfaceTypeに対応したものを設定します

図21

これでキャラクターに様々な種類の足音がつけれるようになりました

UE4でのAIの活用について

UE4ではブループリントのほかにBehaviorTree(ビヘイビアツリー)というものがあります。
このビヘイビアーツリーはAIの開発に特化していて、プレイヤーを追う追跡のAIやプレイヤーを見つけるまではステージを回る巡回のAIなどがあります。
今回は単純にプレイヤーを追う追跡のAIの作りかたおよび解説をしていきたいと思います。

まずはUE4でThirdPersonで新規プロジェクトの作成を行います。

追跡のAIで作るもの
・AI_Character ・・・ AIを実装するキャラクター
・AI_BehaviorTree ・・・ AIを実装するビヘイビアツリー
・AI_Track・・・追跡を実装するタスク
・AI_Controller・・・AI用のコントローラー

1.ブループリントクラスからAI用のキャラクターを作成する
キャラクターのMesh、Animationを自分好みに設定する。

2.ビヘイビアツリーを作成する
素材03
コンテンツブラウザー上で右クリック、「Artificial Intelligence」から「Behavior Tree」を選択する。
わかりやすいように「AI_BehaviorTree」などに変更しておくとよい。

3.Taskを作成する
素材04
先ほど作った「AI_BehaviorTree」を開き、ウィンドウの左上の「New Task」を選択する。
Taskを「AI_Track」という名前に変更しておく。

4.追跡するTaskを作成する
素材05
画像のようにノード同士をつなげる。
ここではAIのコントローラーを取得し、「Get PlayerPawn」で取得したPlayerPawnの位置まで移動させるということをしています。

5.ビヘイビアツリーを編集する
素材06
「Selecter」と先ほど作った「AI_Track」を作り画像のようにつなぐ。

6.AIControllerを作成する
素材07
コンテンツブラウザー上で右クリック、「Blueprint Class」を選択する。
ウィンドウ上の検索バーで「AIController」で検索し作成する。
「AI_Controller」という名前に変更しておく。
素材11
キャラクターのMesh、Animationを設定した後、画像のPawn部分のAI Controller Classを先ほど作った「AI_Controller」に設定します。

7.AIControllerの編集
素材08
画像のように「Event Tick」と「Run Behavior Tree」を作成しつなげます。
「Run Behavior Tree」の「BTAsset」で作成した「AI_Behaviortree」を選択します。

8.フィールド上の編集
素材09
画像の左側のクラスの検索バーで「Nav Mesh Bounds Volume」を検索しフィールドに出す。
画面左上にある「Show」をクリックし、「Navigation」のチェックに入れると、先ほど作ったMeshに入っているボックスの上に緑のエリアが表示されます。
これはAIが歩くことのできる範囲で、この中に追跡対象のキャラクターがいれば常についていくことができる。

素材10
このようにフィールド全体を囲う。

実行すると操作キャラクターについていくようになる。

スタート地点を設置する

ゲームが始まるとき、プレイヤーキャラが出発する地点を設定できなければ、マップのデザインを始めることはできません。
UE4では「プレイヤースタート」と呼ばれる、特殊なアクタをマップ上に配置して、スタート地点を設定します。

1.先ほど「ボックス」ブラシを置いた時と同じ要領で、「モード」パネルの「基本」>「プレイヤースタート」をビューポートにドラッグ&ドロップします。
2.さらに、移動ツールを使い、このアクタを土台の真ん中あたりまで移動させます。
3.ゲームをテストプレイしてみましょう。「プレイ」ボタンの右脇にある「▼」ボタンをクリックし、サブメニューから「新規エディタウィンドウ」を選択します。
4.床の真ん中からゲームが始まっていれば配置は成功です。「ESC」キーを押して、ゲームのテストプレイを終了してください。

制作するマップを計画する

ここまでの作業で、足場を作り、視界を確保し、ゲームのスタート地点を追加することができました。ここからは、どういうマップを作っていくかを考え、短い期間でそれを組み立てて、ゲームを動かして試行錯誤する、苦しいながらも楽しい時間が始まります。

プレイヤーはスタート地点にいて、ゴールは目につくところにありますが、実際には一段うえにあるため、すぐにたどり着くことはできません。
壁を潜れるトンネルがあることに気づけば、上の段に上るためのスロープを上ってゴールにたどりつけるという、「ステージ1らしい簡単なマップです」

とてもシンプルなマップですが、短い期間で完成させることができ、BSPブラシの基本的な使い方を理解することもできます。
3つのブラシを使い、壁を床の上に配置しましょう。

1.移動ツールを使って、「プレイヤースタート」を移動させます。
2.「モード」パネルから、「BSP」>「ボックス」をドラッグ&ドロップし、このボックスに名前を付けます。
3.作成したボックスをのサイズ変更し位置にあった大きさに変えます。
4.配置したボックスを複製移動させるなどをして床に壁を配置して、位置にあった大きさに変えます。
5.3つ目のボックスを追加してスロープを追加していきます。

BSPでレベルをデザインする

ここからは「ペーパーニンジャ」プロジェクトでプレイヤーが最初に遊ぶことになるマップ「ステージ1」のレベルデザインを開始します。

ブラックボックスブラシで床を配置する

「空のレベル」で制作をはじめたこのマップは、文字通りの空っぽで、本当に何もありません。まずは、この世界に床を作りましょう。

1.パースペクティブビューの視界をはっきり確保するために、ライティングモデルを変更しましょう。ビューポートの左上にある表示モードの変更ボタンを押して、「非ライティング(Unlit)」を選択します。
2.「モード」パネルの「BSP」カテゴリをクリックし、「ボックス」をビューポートへドラッグ&ドロップします。
3.配置した「ボックス」ブラシには、デフォルトで「Boxブラシ」という名前がついています。「詳細」パネルで、このブラシの名前を「PlatformBrash」に変更します。
4.「詳細」パネルで、配置したボックスの大きさを変更し、10メートル四方で厚み20センチ(1000100020)の形に変更します。「Brash Settings」カテゴリの「X」、「Y」、「Z」に値を入力してください。
移動ツールを使用して、「X=0,Y=0,Z=0」の位置へ移動させます。

ライトを配置して視界を確保する

空っぽの空間に床を敷くことができました。次に最低限の視界を確保するためにライトを一つ設置します。ライトがなければ、ゲームを始めたときに画面が真っ暗になりますので、特殊な場合を除いて、レベルデザインに取り掛かるときはまず一つ以上の光源を置く必要があります。

1.「モード」パネルの「ライト」>「平行光源」をマップ上にドラッグ&ドロップします。
2.平行光源は、どこに置いても機能しますが、向きを調整しやすいように、編集している床の近場に置くようにしましょう。
移動ツールを使うか、「詳細」パネルの「トランスフォーム(変換)」>「位置」プロパティに直接値を入力する方法で、「X=0,Y=0,Z=500」あたりの位置へ移動させます。
ライトを置いたので、これ以降は表示モードを「非ライティング」から「ライティング」に切り替えても構いません。

グレーボクシングの概要

グレーボクシングはプロトタイプ用のアセットを何でも使って、ゲーム要素をすべて完成させる試行錯誤の工程を指します。
この工程は本来、最低限のゲームメカニクスが組みあがってから着手されるものですが、最低限のメカニクスを作るには、UE4でグレーボックスが作れるようにしなければなりません。

BSP
BSPとはBinary Space Partitioning(バイナリ空間分割)の略で、3Dゲームの創世記に3Dに弱いPCで3Dマップを扱うために導入された手法の名前です。
ゲームデザイナやレベルデザイナといった、ゲームの面白さ、楽しさにあまりかかわっていない人の中にもAutodesk Mayaなど3Dツールが使えない人は多くいます。
購入していなかったり、使い方を習得していない人もいます。ですが、BSPは丸や四角を配置する程度の簡単な作業で、さらにゲームエンジンに組み込まれているということもあり、誰でも使うことができる非常に良いツールです。

プロジェクトとマップを準備する

新しいプロジェクト「PaperNinja」を作成しましょう。
1.「エピックゲームズランチャー」を立ち上げ、UE4を起動する。
2.「アンリアルプロジェクトブラウザ」で「新規プロジェクト」のタブをクリックします。
3.プロジェクトのテンプレートに「ブループリント」>「ブランク」を選択します。
4.プロジェクトの名前を「PaperNinja」と入力します。
5.「プロジェクトを作成」ボタンをクリックして、「PaperNinja」プロジェクトを読み込んだUE4のエディタが起動するのを待ちます。

新しいレベルを作る

普段テストマップを作るときは「Default」テンプレートから始めたほうが手っ取り早いのですが、ここではラーニングのためにあえて「空のレベル」から開始します。
1.メニューバーから「ファイル」>「新規レベル」を選択します。
2.新規レベルのダイアログが開いたら、「空のレベル」を選択します。
3.ここで一旦マップを保存しておきます。ツールバーの「保存」ボタンをクリックします。
今回は新しくマップを作っているためファイル名と保存場所を指定します。
4.ダイアログ上でもフォルダを追加することができます。「コンテンツ>Maps」のフォルダの上で右クリックし、「新規フォルダ」を選択したあと、新しくできたフォルダに「Stage01」と名付けます。
5.左のツリー構造で、「コンテンツ>Maps>Stage01」のフォルダを選択し、「PNStage01_Top」という名前を付けて「保存」ボタンをクリックします。

ライティング

ライティング

メッシングが終わったらライティングの工程に入ります。
ライティングアーティストによるライトの配置や調整のほかマテリアルも改善していきます。
この工程は本ライトの作業になりますが、グレーボックスの段階でも仮ライトを当てておかなければ真っ暗になってしまいます。
仮ライトは本職の手で早めに直しておくのがよいでしょう。

ポリッシュ

ポリッシュ(polish)とは「磨き上げる」や「洗練する」などの意味があります。
アート工程における作りこみを指す言葉ですが、リテイクやリドローを行って絵作り全般を作りこむのではなく、
メッシュの形状や配置はそのままで全体の品質を底上げするニュアンスを含んでいます。
「作りこみ」と言ってしまうとこのニュアンスからかけ離れてしまうので、専門用語として「ポリッシュ」のまま使っている開発チームもあります。

ワークフローは二度回せ

プロップやコンセプトアートを使って作るものをはっきりさせ、グレーボクシングで遊びを完成させ、メッシングでコンセプトアートを再現。ライティングとポリッシュで音やエフェクトも入りました。
いざゲームを動かしてみると、背景の密度や完成度が目標に達していなかったり、追加のリソースがほしくなったりします。
ここでは、関係者やリーダー、責任者にチェックする期間を作ります。
ただし、ほんの数時間ではなく1~3週間の期間をしっかりとりゲーム中の不足点、問題点を洗い出しながら、すぐに解決できるものはこのチェック期間の間に終わらせてしまいます。
その場での解決が難しい問題は作業計画に追加し、もう一度メッシング以下の工程を繰り返します。

最適化

ゲーム開発の現場ではどの職種の人もゲームの処理負荷のことを常に気にしながら作っています。
ですが、ゲームがある程度できていない状態で最適化について気にしすぎも考え物です。
「良いものを探り当てた後で」「最適化」するということもできます。

メッシング

メッシング

メッシングはグレーボックスのの次の工程になります。
グレーボックスでステージ中に置かれた簡易ジオメトリを、本番のアセットで置き換える工程で、いわゆる背景配置工程です。
見た目が一気に完成版のゲームらしくなる工程ですが、ジオメトリが大きく変わることからグレーボックスで完成させた遊びがしばしば壊れてしまうことがあります。

モノコックとレゴブロック

大昔のゲーム制作では3D性能の高いハードやPCがなかったため、できるだけ少ないポリゴン数で一気に描画を行う必要がありました。
そこで床、壁、天井、柱などを一体化したモノコック構造のオブジェクトを作っていました。

ですが、今このつくり方をしますと、部屋を拡張したいや新しいステージを作りたいといったときに作業工程が大変なことになってしまいます。
そこで、モノコック方式に代わって主流になっているのは、レゴブロックというものです。
背景物を細かいパーツやブロックに分けてレゴブロックのようにステージ上で組み立てつつ配置するという方法です。
この方法であれば先ほどの部屋の拡張をしたいやステージを作りたいなどの要望にも応えられることができます。

レゴブロック構造とレギュレーション

レゴブロック構造をうまく活かすためには、レベルデザイナと環境アーティストの間で、さまざまなレギュレーションを決めておく必要があります。
※レギュレーションとは規制、規則という意味
アセット側がレゴ化していても、レベルデザイナがグレーボックスを適当に作ってしまうときれいにはめ込むことができません。
まず床や壁といった空間を構成する基本的なマップパーツの大きさと端数の規則を決めると良いでしょう。

ゲームメカニクスによっては、レベルデザイナだけでなく、アニメーターとも行う必要があります。
たとえば、スニーキングのゲームによくある柱や壁の曲がり角にキャラクターを隠す「立ちカバー」の操作や花壇や机などの1メートルほどの高さに身をかがめる「しゃがみカバー」を行うことができます。
しゃがんで身を隠せるようにするにはキャラクターのしゃがむアニメーションや遮蔽物の大きさのレギュレーションを先に作ります。

グレーボックスの一部を残す

グレーボックスで確定させた遊びがメッシングで壊れてしまいます。
グレーボックスのジオメトリと本番のアセットを入れ替えていくと少し通路の幅が狭かったり、段差ができてしまったりとヒットが変化します。
そこでグレーボックスを削除せずに「目に見えないヒット判定」として残しておき、その内側に本番のアセットを配置するという方法がつかわれることがあります。

ステージ制作ワークフローの一例

ゲームジャンルによってどのように、どういった手順で制作していくかは異なります。
例えば、FPSのゲームではステージのバランスが大事になります。
なので、レベルデザイナがワークフローの上流に存在します。

コンセプト決定

プロット

初めに、ステージのプロット(構想)が制作されます。
ユーザーがこのステージで何を見聞きして、何を体験するかを決めます。
たとえば、RPGの冒険の始まりのように「町の人から剣をもらい最初の雑魚敵のスライムを倒す」やオンラインゲームなどでたとえると
「操作を覚えてもらうために前後左右の移動やジャンプ、攻撃方法などを指南する」といったものです。
RPGなどではストーリーがあるので、そのステージの中で語られるストーリーの配分についても割り当てが行われます。

コンセプトアート

プロットに基づきコンセプトアートの制作が行われます。
コンセプトアートとは映画、コンピュータゲーム、アニメーション、漫画などで使用するデザイン・アイデア・雰囲気などを最終製品として仕上げる前に視覚化して
伝えることを主目的としたイラストレーションの一形態である。(Wikipediaから一部抜粋)
RPGの町といえど城がある大きな町や民家しかない小さな町があり、同じ「町」でもイメージするものが異なってきます。

その町は広いか?どれだけの人がいるのか?どんな建物が存在しているのか?などの情報をコンセプトアーティストが手早く視覚化します。
また、コンセプトアートにはもう一つメリットがあり、ゲームの舞台が早い段階で視覚化されるので、レベルデザイナの作業と並行してアートアセットの制作を進めたりすることができます。

プレイ可能なプロトタイプ制作

上流で示された情報をもとに、レベルデザイナが完全にプレイ可能なステージを制作します。
テクスチャなしの直方体や円柱などの単純なメッシュを使用してステージの形を作ります。
その見た目からこの状態のレベルデータをグレーボックスと呼ばれています。
また、グレーボックスを作りながらゲームの遊びを完成させるこの工程をグレーボクシングといいます。
重要なのはグレーボックスの段階で「ゲームの遊びを完全に完成させる」ところです。
ビジュアル要素、サウンド要素がの積み込みが始まってしまうと、編集のし直しができないからです。

イテレーションについて

良いものを作り出すにはどうすればよいでしょうか?
一発で作り上げてしまう良いセンスの持ち主もいますが、みんながそうではありません。
なので、イテレーションという手法を使います。

イテレーション

各工程で作るものを一度形にし、改善点を見つけ、また作るという反復のことを言います。
イテレーションがより高速に回るようにできればより良いものができます。
イテレーションを高速に回すためには、良いツールなども必要不可欠ですが、スタッフが新しい知識を身に着けイテレーションにかかわる関係者の数を減らすことも大切です。

ゲーム開発のフェーズについて

現代のコンシューマーのゲームはかなりの規模になり、スマートフォンの開発でも大規模になりつつあります。
もちろん大規模になるにつれ人やお金が必要になります。
計画をせずに開発を始めてしまうと失敗した際に大きな痛手になります。

ではどのように計画をし開発を始めればよいのでしょうか?
製造業からのヒントを得て答えを出していました。
まず、作るものに価値があるかどうかを確認する「試作」を行う(プロトタイプ
それを製品レベルのクオリティに仕上げるための「予行練習」を行う(プリプロダクション
そして最後に「本番制作」に移行する(プロダクション
この3段階にゲーム開発を分けるというものです。先ほどの3段階を具体的にわかりやすくまとめると
フェーズ1:いけると思うゲームを簡単に作ってみる(プロトタイプ)
フェーズ2:いけると思ったゲームのフェーズ1の部分を完璧に作ってみる(プリプロダクション)
フェーズ3:フェーズ2で学習したやり方で、残りの部分も全部作る(プロダクション)

各フェーズの目的が達成するまでは次のフェーズに移ることはしません。
フェーズ1でまったく面白くないゲームを作ってフェーズ2、フェーズ3に移行しても面白いゲームにはなりません。
もし計画していた日程を終えても各フェーズの目的を達成できない場合は、フェーズの延長もしくはプロジェクトを白紙に戻してしまいます。
では、各フェーズについてみていきましょう。

プロトタイプ段階

プロトタイプとは、必要最低限のものを備えた試作品のことです。
ゲームでいえば最低限ゲームとして見れるもの、絵や音はなくてもゲームのルールがあるものです。
ゲームの新規のアイデアは仮説で成り立っています。
「○○をすると、××になるから、面白い」というようなものです。

しかし、たくさんのお金をかけてプロジェクトを進めている最中に「まったく面白くなかったです」となるのは困ります。
こうならないようにゲームの本質的な部分(ルール)を少ない人数、、短い期間で試作をして検証をします。
ここで「手直しをすればいける」などのことがないと次のフェーズには進んではいけないということです。

このプロトタイプ段階では仮説を立証したり、立て直したり、もしくは作ったものをすべて捨てて新しい仮説にいくという勢いで臨んだほうが良いです。

プリプロダクション段階

プロトタイプが「面白さ」を、プロダクションで「本試作」になります。
人手を集め、最終的な「品質」、「物量」に対応していくことになります。
ですが、プロトタイプとプロダクションの間にもう一つの段階の「プリプロダクション」を挟み込むべきです。

プリプロダクション段階で作るものとして、多くの開発会社が「パーティカルスライス」という概念を採用しています。
ゲームの主要機能がすべて入った1ステージを、最終品質と同じ品質、本番に近い体制で作り上げるというものです。

プロダクション段階

プロダクション段階ではゲーム開発の規模を広げることができます。
あとは完成までゲームを作り上げるだけです。