Slide 1

Slide 1 text

©MIXI ゲーム開発でUE を使い始めた 初級者の経験談が聞こえてくる25分間 デジタルエンターテインメント事業本部 インキュベーション事業部 Asymグループ エンジニアチーム 角 龍徳

Slide 2

Slide 2 text

©MIXI 2 自己紹介

Slide 3

Slide 3 text

©MIXI ゲームを作っていないと死ぬ男 3

Slide 4

Slide 4 text

©MIXI 手短に教えて欲しい ● クライアントエンジニア ○ 主にインゲーム担当、アウトもやってた ● モンストチームに5年以上所属していた ○ 色々作ってました ● 3Dゲーム制作の経験を積みたい ○ 個人で Unreal Engine を触りはじめた ● 業務レベルの力が欲しい ○ 居心地の良い場所を離れて、冷たい風に触れよう 4

Slide 5

Slide 5 text

©MIXI 5 Unreal Engine

Slide 6

Slide 6 text

©MIXI Unreal Engine とは? 世界で最もオープンで 高度なリアルタイム3D制作ツール 今この時の 最新のバージョンは 5.1.1 6

Slide 7

Slide 7 text

©MIXI 用途 ● ゲーム ● 映画&テレビ ● 建築 ● 自動車&輸送 ● 放送&ライブイベント ● シミュレーション ● (その他いろいろ) Unreal Engine とは? 7

Slide 8

Slide 8 text

©MIXI Unreal Engine とは? 触る前の所感 ● とても美麗な3Dグラフィック、フォトリアル ● 言語がC++ ● オープンソース ● 大規模タイトルでの採用事例が増えている ● 基本無料 ● 日本語のサンプルが少なめ ● ちょっと扱うの難しそう‥‥ ○ でも使いこなせたら強そう 8

Slide 9

Slide 9 text

©MIXI ちょっと どころ じゃない 9

Slide 10

Slide 10 text

©MIXI 10 Asym Altered Axis

Slide 11

Slide 11 text

©MIXI Asym Altered Axis Steamのストアページ Asym Altered Axis on Steam 11

Slide 12

Slide 12 text

©MIXI Asym Altered Axis ● UEを採用した主な理由 ○ オンラインに関する機能が標準サポート ○ Gameplay Ability System ○ 新しいことへの挑戦 ● 社内にUEの知見はほぼゼロ ○ よく会社が許した ○ 特に角の場合、業務で扱うのは初 ○ アドバイザー ● 切磋琢磨 ○ 調査や研究から始まる ○ 実装しながら挙動確認 ○ 知見の共有 12

Slide 13

Slide 13 text

©MIXI Integrated Development Environment (IDE) ● Visual Studio (2019 → 2022) ○ 単体での使用は厳しい ■ IntelliSenseが暴れる ■ マクロの補間が出たり出なかったり ● Visual Studio 拡張機能 ○ UnrealVS ○ ReSharper C++ ■ VS起動時にだいぶ重くなる ○ (Visual Assist) 13

Slide 14

Slide 14 text

©MIXI Integrated Development Environment (IDE) ● Rider ○ 一部のメンバーで試用中 ○ ReSharperが標準搭載 ■ VSほど重くない ○ UEとの親和性が高い ■ UE独自のマクロもサポート ■ BPでの使用箇所も教えてくれる ■ Unreal Editor 側のログも出る ○ マウスorキーボードのショートカットにVSとの違いがある ■ 設定でなんともならない箇所もある ● Visual Studio Code ○ 未検証 14

Slide 15

Slide 15 text

©MIXI Version Control System (VCS) ● Git LFS (Large File Storage) ● Subversion (SVN) ● Plastic SCM ● Helix Core (Perforce) 15

Slide 16

Slide 16 text

©MIXI 16 UE の機能

Slide 17

Slide 17 text

©MIXI Blueprint 17

Slide 18

Slide 18 text

©MIXI Blueprint 経験前 ● コードを書かなくても挙動を実装できる ○ エンジニアじゃなくても実装できる ● 処理フローが目で追えるので分かりやすい ○ ビジュアルスクリプティングの良さ ● ブレークポイントもある ● 変数の中身も見れる ● シンプルな処理を書くのに最適 ● 挙動確認までのイテレーションが短い 18

Slide 19

Slide 19 text

©MIXI 19

Slide 20

Slide 20 text

©MIXI Blueprint 経験後 ● 規模が大きくなるほどスパゲッティ化が急速に進む ○ チームで開発するなら尚更 ● 結局エンジニアが管理しないと最適化のコストは上がる ● シンプルな処理を書くのに最適なのは間違いない ● 挙動確認までのイテレーションが短い ● BPだけでゲームを作れる ≠ 簡単 20

Slide 21

Slide 21 text

©MIXI C++ 21

Slide 22

Slide 22 text

©MIXI C++ 経験前 ● 特に無し ● バージョンいくつかなー 22

Slide 23

Slide 23 text

©MIXI C++ 経験後 ● バージョンを気にする前に覚えることがいっぱい ○ モジュール ○ ディレクトリ構造 ○ ファイル名とクラス名 ○ クラス名の接頭辞ルール ○ デリゲート宣言 ○ インターフェースの概念 ○ 必須レベルのUE独自のマクロが沢山 ○ etc… 23

Slide 24

Slide 24 text

©MIXI C++とBlueprint 24

Slide 25

Slide 25 text

©MIXI C++とBlueprint 経験前 ● 同じ処理でもC++の方が軽いのかな ● なるべくC++の方が良いのかな ● C++なら差分が見やすそう 25

Slide 26

Slide 26 text

©MIXI C++とBlueprint 経験後 ● BPはイテレーションが短い、C++はランタイム処理が軽い ● C++とBPのバランス迷子になる ○ C++で実装した関数をBPで呼べる ○ C++で実装した関数をBPでoverrideできる ○ C++で宣言だけした関数をBPで実装できる ○ Latentな処理はBPに分がある ○ ランタイム処理にはC++に分がある ● Unreal Editor の起動が遅い ○ 挙動確認までのイテレーションが長い(早くても1分以上かかる) ○ Live Coding 機能である程度緩和 26

Slide 27

Slide 27 text

©MIXI 公式リファレンス ● 無論、英語 ● 残念ながら日本語訳は鵜呑みにできない ○ 致命的な誤訳も少なくない ● 実装例が少ない ○ 機能の説明だけが多い 故に‥‥ ● 必然的に英語を読む機会が多くなる ● 能動的な研究、調査が必要 ● 有志の日本語サイトもあるので活用する リファレンス関連 27

Slide 28

Slide 28 text

©MIXI 有料のサポートフォーラム ● Epic Games の専門スタッフが回答してくれる ● 解答の精度は高め 使ってみると ● フォーラムサイトが激重 ● (もちろん)回答までに時間がかかる ○ 経験上、最初の返答までに最短2日、最長17日 ○ その後にも解決まで複数回のやり取りが必要 ● 自分で調べる以上のコストがかかることもある Unreal Developer Network (UDN) 28

Slide 29

Slide 29 text

©MIXI 経験前 ● GitHub で公開されている ● 不具合を修正してPRを投げることができる ● 世界中の人が改善に寄与している オープンソース 29

Slide 30

Slide 30 text

©MIXI 経験後 ● PRは既に1800件あるので、いつ採用されるか不明 ○ 世界中の人が改善したい気持ちの表れでもある ● Source Build 環境を用意しないとデバッグしづらい ○ カスタムエンジン側を用意すべき時がやがて来る ● UE側のコードは最適化されていて内部処理が見づらい ○ 手間だが、最適化を抑制する方法はある ● エンジン側の処理を追う力を求められる オープンソース 30

Slide 31

Slide 31 text

©MIXI Online Multiplayer 関連の機能 ● 変数のReplicate ● オブジェクトのReplicate ● Remote Procedure Call (RPC) ○ Server ○ Client 31

Slide 32

Slide 32 text

©MIXI Online Multiplayer 関連の機能 UPROPERTY(Replicated) or UPROPERTY(ReplicatedUsing = OnRep_CollisionHoppingEnable) 32

Slide 33

Slide 33 text

©MIXI Online Multiplayer 関連の機能 ● Number of Players ● Net Mode ○ Play As Listen Server ○ Play As Client 33

Slide 34

Slide 34 text

©MIXI Online Multiplayer 関連の機能 34

Slide 35

Slide 35 text

©MIXI Gameplay Ability System ● 多岐に渡るアクションの切り分けに便利 ● 特定のアクション中に他のアクションを開始したり、開始できなくしたり できる。 ○ しゃがみ中にジャンプさせない ○ ノックバック中にジャンプさせない ○ ジャンプ中にしゃがめない ● キャラクターごとの特殊能力の実装フロー 35

Slide 36

Slide 36 text

©MIXI Gameplay Ability System 他にも ● キャラクターが持つ各種パラメーターの管理 ○ HP、MP、移動速度、ジャンプ力などなど ○ 状態異常による値の一時的or恒久的な変動 ● 近接武器や遠距離武器によるダメージ処理枠 ● 火や氷などの特殊ダメージ処理枠 ● VFXの生成 ● etc… 何よりも ● オンラインでのレプリケーションに対応している ● 予測処理もしてくれる(一部は非対応) 36

Slide 37

Slide 37 text

©MIXI Gameplay Ability System ● Gameplay Ability ○ 攻撃、防御、ダッシュ、スプリント、隕石落とす‥‥などなど ● Gameplay Effect ○ ダメージ、ヒール、DoTダメージ、移動速度低下‥‥とか ● Gameplay Cue ○ パーティクルとかのVFX ● Gameplay Tag ○ 付けたり外したり ● Attribute Set ○ HP、MP、Staminaなどの値 37

Slide 38

Slide 38 text

©MIXI Gameplay Ability System 良いんじゃないか点 ● ゼロからアクションシステムを構築しなくて済む ● UE5の公式サンプル『Lyra』で積極的に使われている 思うところもある点 ● C++が使えないと利用できない ● 開発途中からの導入、除外はとても大変(破壊的作業) ● C++との配分迷子 ● 新しめの機能なので、不備や不具合も少なくない ● これらを鑑みても検討の余地有り 38

Slide 39

Slide 39 text

©MIXI 39 締め

Slide 40

Slide 40 text

©MIXI 締め 現在の総合所感 ● UEはやっぱり難しい、覚えることいっぱい ● 非常に強力なポテンシャルを感じる ● オープンソース ● オンライン機能の標準サポート ● Gameplay Ability System などの強力なツール ● (リアルな表現に拘る必要は無い) ● (3Dだけでなく2Dゲーム制作用の機能もある) 40

Slide 41

Slide 41 text

©MIXI 41 終

Slide 42

Slide 42 text

©MIXI