Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

UE4に初めて触ってから半年で同人ゲームを作るまで

45.811 Aufrufe

Veröffentlicht am

2016/11/26登壇資料

Veröffentlicht in: Technologie
  • Als Erste(r) kommentieren

UE4に初めて触ってから半年で同人ゲームを作るまで

  1. 1. 2016/11/26 大福フューチャーラボ Daisuke Ohnuma
  2. 2. 自己紹介  Daisuke Ohnuma(@dfk_ohnuma)  名古屋の某専門学校に通う学生です。 2017年3月に 卒業予定  C++が好き  去年まではほぼ全部C++/DirectX9でゲームを作ってまし た  趣味は作曲
  3. 3. どんなゲームを作ってるの  DirectX9で「KAMIKAZE」という同人ゲームを作ってました  UE4を使った3DSTG「L.F.O.」 現在コミックマーケット91で完成版を頒布すべく鋭意開発中
  4. 4. 体験版を東京へ持っていったら  IGN Japanさんから取材して頂けました
  5. 5. ちょっとした宣伝  ゲームセンターで稼働中の 「初音ミクProject DIVA Arcade」 「SOUND VOLTEX」「MUSECA」にて、 楽曲が収録されてます。  よかったらプレイしてみてください
  6. 6. さて………
  7. 7. おおまかな内容  個人制作ゲーム「L.F.O.」の体験版を作るまでの話  実装した機能の説明  マテリアルとかの話もしたいですが、今日はサウンド周りの話  サウンド関係の単語がちらほら出てきます。
  8. 8. 個人的な目標  UE4を使い始めたばかりor使おうか迷っている人たちが、 気軽にUE4を使っていけそうな気持ちになって もらえたら……とても嬉しいです……  あと、サウンド周りで色々と機能を実装したので、 興味ある方がいらっしゃったら是非交流を……
  9. 9. お品書き  1.なぜUE4を選んだのか  予想してたことと、実際に起きたこと  当時の心のよりどころ  2.「L.F.O.」体験版ができるまで  何がしたいのか→どんな機能が必要か  いちばん重要で大変だったサウンド周り  今後の展望  3.最後に
  10. 10. 1.なぜUE4を選んだのか
  11. 11. なぜUE4を選んだのか  6月頃の自分 「学生のうちにもう一本しっかりした同人ゲームを作りたい」  さすがに夏コミはもう間に合わなかったので冬コミとデジゲー博を 狙う →それでも半年ぐらいしかないので、ゲームエンジンを使わないと無理そう と判断  (今話題の!)Epicのおかず さんの 「猫でもわかるUnreal Engine4」のスライドを見る (http://www.slideshare.net/pafuhana/unreal-engine4ue4-2014111)
  12. 12. これでいける!!!!!!!!!! 作ります!!!!!!!!!!!!
  13. 13. 予想してたことと実際に起きたこと.1  絵心がないしモデリングも上手くない自分でも、 見た目がリッチなゲームが作れる……!!  作 れ ま し た  Infinity Bladeのアセットが無料&とても高品質で便利  中身を見て勉強できるContent Example
  14. 14. 予想してたことと実際に起きたこと.2  C++なら触ったことあるし、いざとなったらコード書けば いいから、UnityじゃなくてUEにしよう!  L.F.O.の開発では一度もC++コードを書いてない……  ブループリントが予想以上に便利でした  正直BP依存症になりそう……
  15. 15. 予想してたことと実際に起きたこと.3 重そう。 エディタを開くと確かに重かったです。 でもパッケージ化したゲームは 快適にプレイできた
  16. 16. 心のよりどころ:1  通称「極め本」こと、 「Unreal Engine 4で極めるゲーム開発: サンプルデータと動画で学ぶUE4ゲーム制作プロジェクト」  UE4関連の書籍では真っ先に おすすめしたい一冊です  サンプルゲームを作りながら自然に UE4の様々な要素を勉強できた
  17. 17. 心のよりどころ:2  Epic Games Japanさん公式の ロブさんのチュートリアル「エンドレスランナー」 ( https://www.unrealengine.com/ja/blog/rob-gray-vid-tut-endless-runner )  動画で、しかも日本語で!UE4を使ったゲームの作り方を 学べる、とてもとてもありがたいチュートリアル
  18. 18. 心のよりどころ:3  ありがたい技術ブログ・入門サイトの数々  alwei さんの「 Let's Enjoy Unreal Engine」  株式会社ヒストリア さんの「UE4ブログ」  なつのや さんの「UE4の学び部屋」  もんしょ さんの「もんしょの巣穴blog」 などなど……(お世話になってます……)
  19. 19. 2.「L.F.O.」体験版ができるまで
  20. 20. 何がしたいのか→どんな機能が必要か  どんなゲームが作りたいのかをまず考えた  音楽に力が入ってると分かるゲームにしたい  音に意味があるゲームにする  Rezとか音ゲーとかも大好きなのでやっぱり音楽にはこだわりたかった  「ノリノリの音楽といえばやっぱりSTG」 (F/Aやグラディウス、CAVEシューの影響)  レースゲームは色々難しそうなのでNG  →ステージ遷移を、クラブミュージックのDJミックスに 見立てた、音楽とゲームプレイがシンクロするSTGを作ろう
  21. 21. 必要な機能を考える  効果音をBGMのテンポに合わせたい  BGMと効果音を常に管理できる仕組みを作る必要がある  BGMがステージ内の特定のタイミングでスムーズに繋がるよう にしたい  ステージ遷移の仕組みを工夫する必要がある  BGMの再生や停止を監視できるようにする必要がある  などなど……
  22. 22. BGMと効果音をシンクロさせる  効果音を鳴らすタイミングを、 BGMのテンポの4分 or 8分 or 16分音符のタイミングに 補正して発音させる  次のリズムのタイミングまでDelayをかける…?  それだと、同じタイミングで複数の敵を撃破した場合などに、効果音が 重複して鳴ってしまう→気持ちよくない  同じ種類の効果音が同時に重ならないようにしないといけない +次のリズムのタイミングまで発音を待たなければならない  →それなら、「効果音を鳴らす」という処理を「効果音を登録する」と いう処理に変えて、音を実際に鳴らすのはサウンド管理用のアクタだ けにすればいい
  23. 23. 鍵になるのは  Get Audio Time Seconds  これをBGM再生時とかに呼び出して変数にセットしたり、 フレームごとに呼び出したりすると色々捗ります  ポーズ中は自動的に止まってくれるありがたい機能付き
  24. 24. 実装してみる  AddSoundイベント  効果音を鳴らす代わりに 配列に効果音を登録  ここで登録した効果音は、 CleanUp関数で使われる
  25. 25. 実装してみる  GetMeasure関数  現在のn分音符の数を取得する関数を作る  →4分音符、8分音符、16分音符の数がそれぞれ、前フレームと異 なった場合はフラグを立ててCleanUp関数を呼び出す
  26. 26. 実装してみる  CleanUp関数  立っているタイミングのフラグに 応じた配列から 音を鳴らし、 配列を空っぽにする
  27. 27. ステージ間をスムーズに遷移させる  OpenLevelを使ったステージ遷移の場合  Stage1.umap  サウンド管理、スコア管理、自機、敵生産管理、地形管理…  Stage2.umap  サウンド管理、スコア管理、自機、敵生産管理、地形管理…  Stage3.umap  サウンド管理、スコア管理、自機、敵生産管理、地形管理…
  28. 28.  サウンド管理システムがレベル間で独立してるのに サウンドを上手く繋ぐなんて 無 理
  29. 29. 改善してみる  どのステージでも共通になるものをメイン用のレベルに設置 して、ステージごとに個別になるものだけを残し、サブレベル化  MainSystem.umap(パーシスタントレベル)  サウンド管理、スコア管理、自機  Stage1.umap(サブレベル)  敵生産管理、地形管理、背景  Stage2.umap(サブレベル)  敵生産管理、地形管理、背景
  30. 30. 改善してみる  バックグラウンドでサブレベルを読み込み、ステージが終わった ら裏で破棄するようにする  ChangeLevelイベント
  31. 31. サウンド管理の応用  ステージのBGMはだいたいこんな感じのはず  Stage1.wav Stage2.wav …  この構成だと、1曲まるまるのループor流しきりしかできない また、特定の部分のループをさせるのはミドルウェアでも使わないとむり  ミドルウェアの学習コストや利用規約の細かさを考えると、 L.F.O.を冬に完成させるならミドルウェアを使うのは無理 →サウンド管理アクタに実装した機能を応用して実現
  32. 32. BGMの構成を分けてみる  ステージ1のBGM  Stage1-A.wav(Aパート、流しきり)  Stage1-B.wav(Bパート、ループ)  Stage1-Outro.wav(ボス撃破後)  Stage1-Mix-A.wav(分岐先がAの場合)  Stage1-Mix-B.wav(分岐先がBの場合)  そして再生・停止を監視できるようにするため、 AudioComponentをサウンド管理アクタの中に PartA,B,Outro,Mix-A,Mix-Bの5つ用意する
  33. 33. 分割したBGMの情報を設定できるようにする  構造体をつくって(ファイル、テンポ、小節数)
  34. 34. 分割したBGMの情報を設定できるようにする  ステージごとに 登録しておく 登録した内容は サウンド管理システムの BeginPlayで 一括で読み込み、 配列に突っ込んでおく
  35. 35. 分割したBGMをきちんと繋ぐ  先ほどの構造体に登録された小節数に到達したら BGMチェンジ、同時に現在のモードも変更する  (BGM-Bパートはループするので別の処理を行います)
  36. 36. ループBGMからのスッキリした脱出  BパートBGMはボスを倒すまでループします。 ボスを倒すと… 次のキリのいい小節を 自動的に判定して そこでチェンジするように 変数を再設定します →あとは前ページと同じ
  37. 37. BGMをAudioComponentにSetするタイミング  Outroの後にステージ分岐が確定するので、 Mixの再生中に、次のステージのPartA、PartBをSetする  次のステージのPartAが再生された後にOutro,Mix-A、 Mix-BをSetする
  38. 38. 今後の展望  ステージ分岐の際に、自機の位置に応じて次ステージの BGMがフェードしてくるようにする  ボスを作る  ボリュームを5ステージ15エリアに増やす (アウトラン的な感じ)
  39. 39. 3.最後に
  40. 40. UE4は実際、やりやすいのか?  他のエンジンと比べて、複雑そうとか、重そうとか、思われる ことも多いとは思いますが、実際は 慣れてしまえばとてもわかり易いです。  処理の流れがよくわかる  どこを直したり、どこに追加したりすればいいかが分かりやすい  「スパゲッティ」を避けたくなる  視覚的にスパゲッティがスパゲッティたる所以がよくわかってしまう
  41. 41. まとめ  UE4は「やりたいこと」がはっきりしていれば スイスイ事が進みます  なので、まだ触ったことがないとか、ちょっと苦手な意識が あるとか、そんな方はとてももったいないと思うので、 ぜひ、一歩踏み出してみてください。
  42. 42. 以上です  ありがとうございました。

×