SlideShare uma empresa Scribd logo
1 de 132
Baixar para ler offline
「Press Button, Drink Coffee」
UE4における
ビルドパイプラインとメンテナンスの全体像
#UE4 | @UNREALENGINE
自己紹介
Axel Riffard アクセル リファール
Epic Games Japan / Support Engineer
● Twitter : @AxRiff
● 趣味はPerfume、ベイスターズ、ウイスキー
● 今プレイしてるゲーム: Control (Remedy大好き)
#UE4 | @UNREALENGINE
序文
ゲームを作るのはもちろん楽しいですが、自動化と最適化はさらに楽しいと思い
ます。
幸せといえば、書いたスクリプトのロードバーの進行を見ることです。(変なフェチかも)
UE4における、毎日の作業を楽にする機能を紹介します。
#UE4 | @UNREALENGINE
免責条項
完璧なパイプラインなんて存在しない。
会社の文化、チームのスキル、社内のインフラ、プロジェクトの予算、使いたい
技術、ターゲットプラットフォームによって、一番良い選択が変わってしまう。
一番頼れるのは、今までの経験です。これから紹介する技術と伝えるアドバイス
は、個人の経験のまとめとエピック内のワークフローだけです。自分の経験を信
用するのが一番です。
#UE4 | @UNREALENGINE
目次
●CIとは
●UnrealAutomationTool
●エンジンとプロジェクトビルドの作業
●その他のビルド作業
●The Unreal Way
#UE4 | @UNREALENGINE
目次
●CIとは
●UnrealAutomationTool
●エンジンとプロジェクトビルドの作業
●その他のビルド作業
●The Unreal Way
#UE4 | @UNREALENGINE
#UE4 | @UNREALENGINE
どうしてこんな恐ろしいことが起きるのか
Dev
2
Dev
1
Dev
3
バージョン管理
しすてむ
#UE4 | @UNREALENGINE
● 更新したら、ローカルでエラーが出ていてビルド出来ない
● そのエラーを解決しようとしたら、遡りづらい
● 喧嘩したり、チーム内のコミュニケーションが複雑になる
● コミットすることでビルドを壊すかどうか不安になる
● ゲームのビルドを作ろうとしたら、時間かかって、その間は仕事できない
どうしてこんな恐ろしいことが起きるのか
#UE4 | @UNREALENGINE
CIソフトウェア
CI = Continuous Integration、継続実装
ソフトウエアとハードウエアの組み合わせで、
毎日のソースとアセットの実装と更新を管理してくれるソリューション
#UE4 | @UNREALENGINE
どうしてこんな恐ろしいことが起きるのか
Dev
2
Dev
1
Dev
3
バージョン管理
しすてむ
#UE4 | @UNREALENGINE
ソフトウェア
#UE4 | @UNREALENGINE
CIソフトウェア
今の世代で、悪い選択がないでしょう。
過去に、TeamCityとJenkinsも利用したことがあって、どっちも満足しました。
#UE4 | @UNREALENGINE
CIソフトウェア
Jenkins TeamCity
#UE4 | @UNREALENGINE
Jenkins
#UE4 | @UNREALENGINE
Jenkins
メリット:
● Free Open Source
● ドキュメンテーションとプラグインがいっぱい
● コミュニティーがデカい
デメリット:
● 公式サポートがない
● プラグインのクオリティはバラバラ
#UE4 | @UNREALENGINE
TeamCity
#UE4 | @UNREALENGINE
TeamCity
メリット
● パイプラインを作るの速い
● 公式サポートがある
デメリット
● 無料版だと機能が限られている
#UE4 | @UNREALENGINE
CIソフトウエア
日本のゲーム業界でジェンキンスが一番人気があると思うから、これからの話は
ジェンキンス中心になる。
ただ、全アドバイスとコマンドはどんなCIソフトウエアでも使える。
似てるから、ジェンキンスおじさんの変わりに、この猫を使わせていただきます。
#UE4 | @UNREALENGINE
ハードウェア
#UE4 | @UNREALENGINE
ビルドマシン
マスター → 作業を管理しているマシン、サーバー
スレーブ → 実際の作業を行うマシン
#UE4 | @UNREALENGINE
ビルドマシン
バージョン
管理DEV PC
CI Server
Master
Slack
Commit
Slave 1 Slave 2 Slave 3
Company
Server
Poll
Distribute
バージョン
管理
#UE4 | @UNREALENGINE
ビルドマシン - マシン数
プロトタイプ中:
マスターのみに1台
開発中:
マスター1台
リリースプラットフォームごとにスレーブが1台
#UE4 | @UNREALENGINE
ビルドマシン - OS
マスター:Win64かLinux
スレーブ:Win64(プラットフォームのSDKのため)、りんご系の場合はMacOS
#UE4 | @UNREALENGINE
ビルドマシン - Windows
ストレージ:SSD
メモリ:32GB~
CPU:AMD Threadripperはライセンシーにおすすめされた。
15分でフルリコンパイルできる。
#UE4 | @UNREALENGINE
ビルドマシン - MacOS
Macでコンパイルの分散が出来ないので、
シェーダーのコンパイルを考えると、
できるだけCPUのコアを多く。そろそろ発売するMacプロがいいかもしれない。
予算があまりなければ、個人的には6コアのMacミニで行けると思います。
#UE4 | @UNREALENGINE
目次
●CIとは
●UnrealAutomationTool
●エンジンとプロジェクトビルドの作業
●その他のビルド作業
●The Unreal Way
#UE4 | @UNREALENGINE
UE4のビルド
● エンジンとエンジンエディター
● ゲームのソース
● ゲームのアセット(ライト、シェーダー、etc)
● ツール
#UE4 | @UNREALENGINE
ビルドコマンド
これからCI用のビルドコマンドをいくつか紹介する。
メモしづらいと思うから、gitHubでも公開するぞ!
https://github.com/AxRiff/UnrealEngineJenkins
#UE4 | @UNREALENGINE
UnrealAutomationTool
UnrealAutomationToolは、ゲームのテストやビルドなどのプロセスを自動化す
るために使用される一般的なシステム。
UE4は主にC++で作られているが、UnrealAutomationToolは主にC#。
UnrealAutomationToolを使って、CIソフトウエアでコマンドラインをビルドす
ることができる。
#UE4 | @UNREALENGINE
UnrealAutomationTool
会社、プロジェクトの種類、そしてワークフローによって、ビルドする選択肢が
三つある。
● BuildGraphのカスタムスクリプト
● BuildGraphのInstalledBuildScript
● BuildCookRunのコマンドラインツール
#UE4 | @UNREALENGINE
BuildGraph
#UE4 | @UNREALENGINE
BuildGraph
BuildGraphはUnrealAutomationToolの中のスクリプトベースのビルド自動化シ
ステム。
● XMLでビルドスクリプトを書く
● 日本語のドキュメンテーションがちゃんとしてる
● エピックのプロジェクトのためにエピックが作ったツール。今でもよく使って
おる
● 他のビルド ツールとは異なり、BuildGraphはmakefileのようなスクリプティン
グ言語とビルドマシンのコンフィギュレーション スクリプトとを合わせたアプ
ローチ
#UE4 | @UNREALENGINE
BuildGraph
サンプルコードがいっぱいで、分かりやすい
Engine/Build/Graph/Examples/
#UE4 | @UNREALENGINE
BuildGraph
メリット
● CIフレームワークへの依存を減らす。
● ローカルでテストと編集可能 → CI達人に頼らなくてもいい
● XMLベースなので読みやすい
● プラットフォームに不可知的
● いろんなプロジェクトで共有できる
デメリット
● なれるまで時間がかかる
#UE4 | @UNREALENGINE
BuildGraph
● Agents: 同じマシンで実行される複数のノードのグループ
● Nodes: タスクのシーケンス
● Tasks: ビルド プロセスの一部として実行されるアクション (コンパイル、
クックなど)
#UE4 | @UNREALENGINE
BuildGraph
<Agent Name="Default Agent" Type="CompileWin64">
<!-- Update the engine version files -->
<Node Name="Update Version Files">
<SetVersion Change="$(Change)" Branch="$(EscapedBranch)" Licensee="$(Licensee)" If="$(Versioned)"/>
</Node>
<!-- Compile the tool executables -->
<Node Name="Compile Tools Win64" Requires="Update Version Files" Produces="#ToolBinaries">
<Compile Target="UnrealHeaderTool" Platform="Win64" Configuration="Development" Tag="#ToolBinaries"/>
</Node>
<!-- Compile the editor executable -->
<Node Name="Compile $(EditorTarget) Win64" Requires="Compile Tools Win64" Produces="#EditorBinaries">
<Compile Target="$(EditorTarget)" Platform="Win64" Configuration="Development" Tag="#EditorBinaries"/>
</Node>
<!-- Compile the game targets -->
<Property Name="GameBinaries" Value=""/>
<ForEach Name="GameTarget" Values="$(GameTargets)">
<ForEach Name="TargetPlatform" Values="$(TargetPlatforms)">
<Node Name="Compile $(GameTarget) $(TargetPlatform)" Requires="Compile Tools Win64" Produces="#GameBinaries_$(GameTarget)_$(TargetPlatform)">
<Compile Target="$(GameTarget)" Platform="$(TargetPlatform)" Configuration="Development" Tag="#GameBinaries_$(GameTarget)_$(TargetPlatform)"/>
</Node>
<Property Name="GameBinaries" Value="$(GameBinaries)#GameBinaries_$(GameTarget)_$(TargetPlatform);"/>
</ForEach>
</ForEach>
</Agent>
#UE4 | @UNREALENGINE
BuildGraph
<Agent Name="Default Agent" Type="CompileWin64">
<!-- Update the engine version files -->
<Node Name="Update Version Files">
<SetVersion Change="$(Change)" Branch="$(EscapedBranch)" Licensee="$(Licensee)" If="$(Versioned)"/>
</Node>
<!-- Compile the tool executables -->
<Node Name="Compile Tools Win64" Requires="Update Version Files" Produces="#ToolBinaries">
<Compile Target="UnrealHeaderTool" Platform="Win64" Configuration="Development" Tag="#ToolBinaries"/>
</Node>
<!-- Compile the editor executable -->
<Node Name="Compile $(EditorTarget) Win64" Requires="Compile Tools Win64" Produces="#EditorBinaries">
<Compile Target="$(EditorTarget)" Platform="Win64" Configuration="Development" Tag="#EditorBinaries"/>
</Node>
<!-- Compile the game targets -->
<Property Name="GameBinaries" Value=""/>
<ForEach Name="GameTarget" Values="$(GameTargets)">
<ForEach Name="TargetPlatform" Values="$(TargetPlatforms)">
<Node Name="Compile $(GameTarget) $(TargetPlatform)" Requires="Compile Tools Win64"
Produces="#GameBinaries_$(GameTarget)_$(TargetPlatform)">
<Compile Target="$(GameTarget)" Platform="$(TargetPlatform)"
Configuration="Development" Tag="#GameBinaries_$(GameTarget)_$(TargetPlatform)"/>
</Node>
<Property Name="GameBinaries" Value="$(GameBinaries)#GameBinaries_$(GameTarget)_$(TargetPlatform);"/>
</ForEach>
</ForEach>
</Agent>
<Agent Name="Default Agent" Type="CompileWin64">
#UE4 | @UNREALENGINE
BuildGraph
<Agent Name="Default Agent" Type="CompileWin64">
<!-- Update the engine version files -->
<Node Name="Update Version Files">
<SetVersion Change="$(Change)" Branch="$(EscapedBranch)" Licensee="$(Licensee)" If="$(Versioned)"/>
</Node>
<!-- Compile the tool executables -->
<Node Name="Compile Tools Win64" Requires="Update Version Files" Produces="#ToolBinaries">
<Compile Target="UnrealHeaderTool" Platform="Win64" Configuration="Development" Tag="#ToolBinaries"/>
</Node>
<!-- Compile the editor executable -->
<Node Name="Compile $(EditorTarget) Win64" Requires="Compile Tools Win64" Produces="#EditorBinaries">
<Compile Target="$(EditorTarget)" Platform="Win64" Configuration="Development" Tag="#EditorBinaries"/>
</Node>
<!-- Compile the game targets -->
<Property Name="GameBinaries" Value=""/>
<ForEach Name="GameTarget" Values="$(GameTargets)">
<ForEach Name="TargetPlatform" Values="$(TargetPlatforms)">
<Node Name="Compile $(GameTarget) $(TargetPlatform)" Requires="Compile Tools Win64"
Produces="#GameBinaries_$(GameTarget)_$(TargetPlatform)">
<Compile Target="$(GameTarget)" Platform="$(TargetPlatform)"
Configuration="Development" Tag="#GameBinaries_$(GameTarget)_$(TargetPlatform)"/>
</Node>
<Property Name="GameBinaries" Value="$(GameBinaries)#GameBinaries_$(GameTarget)_$(TargetPlatform);"/>
</ForEach>
</ForEach>
</Agent>
<!-- Update the engine version files -->
<Node Name="Update Version Files">
<SetVersion Change="$(Change)" Branch="$(EscapedBranch)"
Licensee="$(Licensee)" If="$(Versioned)"/>
</Node>
#UE4 | @UNREALENGINE
BuildGraph
<Agent Name="Default Agent" Type="CompileWin64">
<!-- Update the engine version files -->
<Node Name="Update Version Files">
<SetVersion Change="$(Change)" Branch="$(EscapedBranch)" Licensee="$(Licensee)" If="$(Versioned)"/>
</Node>
<!-- Compile the tool executables -->
<Node Name="Compile Tools Win64" Requires="Update Version Files" Produces="#ToolBinaries">
<Compile Target="UnrealHeaderTool" Platform="Win64" Configuration="Development" Tag="#ToolBinaries"/>
</Node>
<!-- Compile the editor executable -->
<Node Name="Compile $(EditorTarget) Win64" Requires="Compile Tools Win64" Produces="#EditorBinaries">
<Compile Target="$(EditorTarget)" Platform="Win64" Configuration="Development" Tag="#EditorBinaries"/>
</Node>
<!-- Compile the game targets -->
<Property Name="GameBinaries" Value=""/>
<ForEach Name="GameTarget" Values="$(GameTargets)">
<ForEach Name="TargetPlatform" Values="$(TargetPlatforms)">
<Node Name="Compile $(GameTarget) $(TargetPlatform)" Requires="Compile Tools Win64"
Produces="#GameBinaries_$(GameTarget)_$(TargetPlatform)">
<Compile Target="$(GameTarget)" Platform="$(TargetPlatform)"
Configuration="Development" Tag="#GameBinaries_$(GameTarget)_$(TargetPlatform)"/>
</Node>
<Property Name="GameBinaries" Value="$(GameBinaries)#GameBinaries_$(GameTarget)_$(TargetPlatform);"/>
</ForEach>
</ForEach>
</Agent>
<!-- Compile the tool executables -->
<Node Name="Compile Tools Win64" Requires="Update Version Files"
Produces="#ToolBinaries">
<Compile Target="UnrealHeaderTool" Platform="Win64"
Configuration="Development" Tag="#ToolBinaries"/>
</Node>
#UE4 | @UNREALENGINE
BuildGraph
<Agent Name="Default Agent" Type="CompileWin64">
<!-- Update the engine version files -->
<Node Name="Update Version Files">
<SetVersion Change="$(Change)" Branch="$(EscapedBranch)" Licensee="$(Licensee)" If="$(Versioned)"/>
</Node>
<!-- Compile the tool executables -->
<Node Name="Compile Tools Win64" Requires="Update Version Files" Produces="#ToolBinaries">
<Compile Target="UnrealHeaderTool" Platform="Win64" Configuration="Development" Tag="#ToolBinaries"/>
</Node>
<!-- Compile the editor executable -->
<Node Name="Compile $(EditorTarget) Win64" Requires="Compile Tools Win64" Produces="#EditorBinaries">
<Compile Target="$(EditorTarget)" Platform="Win64" Configuration="Development" Tag="#EditorBinaries"/>
</Node>
<!-- Compile the game targets -->
<Property Name="GameBinaries" Value=""/>
<ForEach Name="GameTarget" Values="$(GameTargets)">
<ForEach Name="TargetPlatform" Values="$(TargetPlatforms)">
<Node Name="Compile $(GameTarget) $(TargetPlatform)" Requires="Compile Tools Win64"
Produces="#GameBinaries_$(GameTarget)_$(TargetPlatform)">
<Compile Target="$(GameTarget)" Platform="$(TargetPlatform)"
Configuration="Development" Tag="#GameBinaries_$(GameTarget)_$(TargetPlatform)"/>
</Node>
<Property Name="GameBinaries" Value="$(GameBinaries)#GameBinaries_$(GameTarget)_$(TargetPlatform);"/>
</ForEach>
</ForEach>
</Agent>
<!-- Compile the editor executable -->
<Node Name="Compile $(EditorTarget) Win64" Requires="Compile Tools Win64"
Produces="#EditorBinaries">
<Compile Target="$(EditorTarget)" Platform="Win64"
Configuration="Development" Tag="#EditorBinaries"/>
</Node>
#UE4 | @UNREALENGINE
BuildGraph
<Agent Name="Default Agent" Type="CompileWin64">
<!-- Update the engine version files -->
<Node Name="Update Version Files">
<SetVersion Change="$(Change)" Branch="$(EscapedBranch)" Licensee="$(Licensee)" If="$(Versioned)"/>
</Node>
<!-- Compile the tool executables -->
<Node Name="Compile Tools Win64" Requires="Update Version Files" Produces="#ToolBinaries">
<Compile Target="UnrealHeaderTool" Platform="Win64" Configuration="Development" Tag="#ToolBinaries"/>
</Node>
<!-- Compile the editor executable -->
<Node Name="Compile $(EditorTarget) Win64" Requires="Compile Tools Win64" Produces="#EditorBinaries">
<Compile Target="$(EditorTarget)" Platform="Win64" Configuration="Development" Tag="#EditorBinaries"/>
</Node>
<!-- Compile the game targets -->
<Property Name="GameBinaries" Value=""/>
<ForEach Name="GameTarget" Values="$(GameTargets)">
<ForEach Name="TargetPlatform" Values="$(TargetPlatforms)">
<Node Name="Compile $(GameTarget) $(TargetPlatform)" Requires="Compile Tools Win64"
Produces="#GameBinaries_$(GameTarget)_$(TargetPlatform)">
<Compile Target="$(GameTarget)" Platform="$(TargetPlatform)"
Configuration="Development" Tag="#GameBinaries_$(GameTarget)_$(TargetPlatform)"/>
</Node>
<Property Name="GameBinaries" Value="$(GameBinaries)#GameBinaries_$(GameTarget)_$(TargetPlatform);"/>
</ForEach>
</ForEach>
</Agent>
<!-- Compile the game targets -->
<Property Name="GameBinaries" Value=""/>
<ForEach Name="GameTarget" Values="$(GameTargets)">
<ForEach Name="TargetPlatform" Values="$(TargetPlatforms)">
<Node Name="Compile $(GameTarget) $(TargetPlatform)"
Requires="Compile Tools Win64"
Produces="#GameBinaries_$(GameTarget)_$(TargetPlatform)">
<Compile Target="$(GameTarget)" Platform="$(TargetPlatform)"
Configuration="Development"
Tag="#GameBinaries_$(GameTarget)_$(TargetPlatform)"/>
</Node>
<Property Name="GameBinaries"
Value="$(GameBinaries)#GameBinaries_$(GameTarget)_$(TargetPlatform);"/>
</ForEach>
</ForEach>
#UE4 | @UNREALENGINE
InstalledBuild
#UE4 | @UNREALENGINE
InstalledBuild
● 皆様の会社のアンリアルランチャーだと思って下さい
● エンジンを提供するためエピックが作ったBuildGraphのスクリプト
Engine/Build/InstalledEngineBuild.xml
● デザイナーとアーティストに優しい
● エンジンビルドのみ。プロジェクトをビルドしない
#UE4 | @UNREALENGINE
Installed Build
Installed Buildの主なステップ
1. Update Version File
2. Compile UnrealHeaderTool Win64
3. Compile UE4Editor Win64
4. Compile UE4Game Win64
5. Compile UE4Game (Platform)
6. Build Tools Win64
7. Build Tools CS
8. Make Feature Packs
9. Build DDC Win64
#UE4 | @UNREALENGINE
InstalledBuild
Engine/Build/BatchFiles/RunUAT.bat BuildGraph
-target”Make Installed Build Win64”
-script=/Engine/Build/InstalledEngineBuild.xml
-clean
#UE4 | @UNREALENGINE
InstalledBuild
Engine/Build/BatchFiles/RunUAT.bat BuildGraph
-target”Make Installed Build Win64”
-script=/Engine/Build/InstalledEngineBuild.xml
-clean
#UE4 | @UNREALENGINE
InstalledBuild
Engine/Build/BatchFiles/RunUAT.bat BuildGraph
-target”Make Installed Build Win64”
-script=/Engine/Build/InstalledEngineBuild.xml
-clean
#UE4 | @UNREALENGINE
InstalledBuild
Engine/Build/BatchFiles/RunUAT.bat BuildGraph
-target”Make Installed Build Win64”
-script=/Engine/Build/InstalledEngineBuild.xml
-clean
#UE4 | @UNREALENGINE
BuildCookRun
#UE4 | @UNREALENGINE
BuildCookRun
#UE4 | @UNREALENGINE
BuildCookRun
● /Engine/Build/BatchFiles/ にあるスクリプト
● ビルドから、パッケージまで、何でもできる
● カスタムしやすい
● 使用の際にLinux/UNIX感の懐かしくて温かい気持ちになる
#UE4 | @UNREALENGINE
BuildCookRun, BuildGraph, InstalledBuild
● 状況によって、一番合ってるやり方が変わる
● 個人的に、ゲーム開発の場合は、柔軟性と変更可能な技術が重要かと思うか
ら、BuildCookRunが一番仕事しやすい
● これから紹介するコマンドラインでBuildCookRunで実行する。でも全ての
コマンドがBuildGraphでもできる
#UE4 | @UNREALENGINE
目次
●CIとは
●UnrealAutomationTool
●エンジンとプロジェクトビルドの作業
●その他のビルド作業
●The Unreal Way
#UE4 | @UNREALENGINE
コマンドライン
#UE4 | @UNREALENGINE
エンジンDLLビルド
エンジンの編集が少なかったら、手動でビルドするCIの作業
多かったら、一日一回でいいと思います。ただそれは夜ではなく、朝か昼にす
るのがおすすめ
#UE4 | @UNREALENGINE
ビルドマシン
Jenkins Build
Commit to
Source Control
Update
Notify
#UE4 | @UNREALENGINE
ビルドコマンド
%ENGINE_ROOT%/Engine/Build/BatchFiles/RunUAT.bat BuildCookRun -
project=Samples/StarterContent/StarterContent.uproject -
platform=%ENGINE_PLATFORM_TARGET% -
clientconfig=%ENGINE_COMPILATION_TARGET% -build
ENGINE_ROOT=EngineRoot
ENGINE_COMPILATION_TARGET=Development
ENGINE_PLATFORM_TARGET=Win64
大分読みづらいにゃ、ちょっと読
みやすくしよう
#UE4 | @UNREALENGINE
ビルドコマンド
Engine/Build/BatchFiles/RunUAT.bat BuildCookRun
-project=Samples/StarterContent/StarterContent.uproject
-platform=Win64
-clientconfig=Development
-build
#UE4 | @UNREALENGINE
ビルドコマンド
Engine/Build/BatchFiles/RunUAT.bat BuildCookRun
-project=Samples/StarterContent/StarterContent.uproject
-platform=Win64
-clientconfig=Development
-build
RunUATを使うには、uprojectファイルが必要
なので、テンプレートか空っぽのプロジェクト
にしにゃしょう。
#UE4 | @UNREALENGINE
ビルドコマンド
Engine/Build/BatchFiles/RunUAT.bat BuildCookRun
-project=Samples/StarterContent/StarterContent.uproject
-platform=Win64
-clientconfig=Development
-build
#UE4 | @UNREALENGINE
ビルドコマンド
Engine/Build/BatchFiles/RunUAT.bat BuildCookRun
-project=Samples/StarterContent/StarterContent.uproject
-platform=Win64
-clientconfig=Development
-build
#UE4 | @UNREALENGINE
ビルドコマンド
Engine/Build/BatchFiles/RunUAT.bat BuildCookRun
-project=Samples/StarterContent/StarterContent.uproject
-platform=Win64
-clientconfig=Development
-build
#UE4 | @UNREALENGINE
プロジェクトDLLビルド
10分ごとにバージョン管理しすてむを確認して、自動でビルド。
Jenkins Build
Commit to
Source Control
Update
Notify
#UE4 | @UNREALENGINE
ビルドコマンド
%ENGINE_ROOT%/Engine/Build/BatchFiles/RunUAT.bat BuildCookRun
-project= project=%GAME_SUB_PATH%/%GAME_NAME%.uproject -
platform=%ENGINE_PLATFORM_TARGET% -
clientconfig=%ENGINE_COMPILATION_TARGET% -build
ENGINE_ROOT=EngineRoot
ENGINE_COMPILATION_TARGET=Development
ENGINE_PLATFORM_TARGET=Win64
GAME_SUB_PATH=C:/GamePath
GAME_NAME=GameName
#UE4 | @UNREALENGINE
ビルドコマンド
Engine/Build/BatchFiles/RunUAT.bat BuildCookRun
-project=C:/PathToTheGame/GameName.uproject
-platform=Win64
-clientconfig=Development
-build
#UE4 | @UNREALENGINE
#UE4 | @UNREALENGINE
パッケージ
#UE4 | @UNREALENGINE
Nightly Build
● 毎晩走らせるパッケージ
● Development、Test(プロファイルとるため)、そしてShipping (販売版に近い
バージョン)、ターゲットごとに作る
時間がかかっても大丈夫なので、クリーン、フルリビルドがおすすめ
#UE4 | @UNREALENGINE
Nightly Build フロー
ZipJenkins Build
Copy to
Shared Folder
Update
Notify
#UE4 | @UNREALENGINE
ビルドコマンド
%ENGINE_ROOT%/Engine/Build/BatchFiles/RunUAT.bat BuildCookRun -
project=%GAME_SUB_PATH%/%GAME_NAME%.uproject -noP4 -
platform=%ENGINE_PLATFORM_TARGET% -
clientconfig=%ENGINE_COMPILATION_TARGET% -cook -allmaps -build -stage
-pak -archive -archivedirectory=%TEMP_DIR%
ENGINE_ROOT=PathToYourEngine
GAME_SUB_PATH=PathToYourProject
GAME_NAME=UprojectFileWithoutTheExtension
ENGINE_COMPILATION_TARGET=Development|Shipping|etc
ENGINE_PLATFORM_TARGET=Win64|etc
#UE4 | @UNREALENGINE
ビルドコマンド
Engine/Build/BatchFiles/RunUAT.bat BuildCookRun
-project=GamePath/GameName.uproject
-noP4
-platform=Win64
-clientconfig=Development
-cook
-allmaps
-build
-stage
-pak
-archive
-archivedirectory=C:/TempDirectory/
#UE4 | @UNREALENGINE
ビルドコマンド
Engine/Build/BatchFiles/RunUAT.bat BuildCookRun
-project=GamePath/GameName.uproject
-noP4
-platform=Win64
-clientconfig=Development
-cook
-allmaps
-build
-stage
-pak
-archive
-archivedirectory=C:/TempDirectory/
#UE4 | @UNREALENGINE
ビルドコマンド
Engine/Build/BatchFiles/RunUAT.bat BuildCookRun
-project=GamePath/GameName.uproject
-noP4
-platform=Win64
-clientconfig=Development
-cook
-allmaps
-build
-stage
-pak
-archive
-archivedirectory=C:/TempDirectory/
#UE4 | @UNREALENGINE
ビルドコマンド
Engine/Build/BatchFiles/RunUAT.bat BuildCookRun
-project=GamePath/GameName.uproject
-noP4
-platform=Win64
-clientconfig=Development
-cook
-allmaps
-build
-stage
-pak
-archive
-archivedirectory=C:/TempDirectory/
#UE4 | @UNREALENGINE
ビルドコマンド
Engine/Build/BatchFiles/RunUAT.bat BuildCookRun
-project=GamePath/GameName.uproject
-noP4
-platform=Win64
-clientconfig=Development
-cook
-allmaps
-build
-stage
-pak
-archive
-archivedirectory=C:/TempDirectory/
#UE4 | @UNREALENGINE
ビルドコマンド
Engine/Build/BatchFiles/RunUAT.bat BuildCookRun
-project=GamePath/GameName.uproject
-noP4
-platform=Win64
-clientconfig=Development
-cook
-allmaps
-build
-stage
-pak
-archive
-archivedirectory=C:/TempDirectory/
#UE4 | @UNREALENGINE
ビルドコマンド
Engine/Build/BatchFiles/RunUAT.bat BuildCookRun
-project=GamePath/GameName.uproject
-noP4
-platform=Win64
-clientconfig=Development
-cook
-allmaps
-build
-stage
-pak
-archive
-archivedirectory=C:/TempDirectory/
#UE4 | @UNREALENGINE
ビルドコマンド
Engine/Build/BatchFiles/RunUAT.bat BuildCookRun
-project=GamePath/GameName.uproject
-noP4
-platform=Win64
-clientconfig=Development
-cook
-allmaps
-build
-stage
-pak
-archive
-archivedirectory=C:/TempDirectory/
#UE4 | @UNREALENGINE
ビルドコマンド
Engine/Build/BatchFiles/RunUAT.bat BuildCookRun
-project=GamePath/GameName.uproject
-noP4
-platform=Win64
-clientconfig=Development
-cook
-allmaps
-build
-stage
-pak
-archive
-archivedirectory=C:/TempDirectory/
#UE4 | @UNREALENGINE
ビルドコマンド
Engine/Build/BatchFiles/RunUAT.bat BuildCookRun
-project=GamePath/GameName.uproject
-noP4
-platform=Win64
-clientconfig=Development
-cook
-allmaps
-build
-stage
-pak
-archive
-archivedirectory=C:/TempDirectory/
各ファイル全てをコピーする代わりに、全アセットを単一「.pak」フ
ァイルに格納する。プロジェクトにたくさんのアセットファイルがあ
る場合、Pak ファイルを使用した方が配布が容易になる場合がある。
#UE4 | @UNREALENGINE
ビルドコマンド
Engine/Build/BatchFiles/RunUAT.bat BuildCookRun
-project=GamePath/GameName.uproject
-noP4
-platform=Win64
-clientconfig=Development
-cook
-allmaps
-build
-stage
-pak
-archive
-archivedirectory=C:/TempDirectory/
#UE4 | @UNREALENGINE
ビルドコマンド
Engine/Build/BatchFiles/RunUAT.bat BuildCookRun
-project=GamePath/GameName.uproject
-noP4
-platform=Win64
-clientconfig=Development
-cook
-allmaps
-build
-stage
-pak
-archive
-archivedirectory=C:/TempDirectory/
#UE4 | @UNREALENGINE
ビルドコマンド
robocopy %ARCHIVE_DIR%/latest %ARCHIVE_DIR%/%ENGINE_PLATF
ORM_TARGET%/archive /E /IS /MOV
set PATH=%PATH%;C:/Program Files/7-Zip/
7z.exe a -tzip -mmt -
mx1 %ARCHIVE_DIR%/latest/%BUILD_NUMBER%.zip %TEMP_DIR%/
exit 0
#UE4 | @UNREALENGINE
ビルドコマンド
ちょっと待ったにゃ!!
#UE4 | @UNREALENGINE
ビルドコマンド
https://github.com/electronicarts/EACopy
Twitter : @honk_dice
EAさんのhigh endスタジオ、DICEが、robocopyよりさらに速い、ビルドマ
シン用のコピーツールをオープンソースにした!
EACopy
ちょっとしか試していないけど、凄く速いです!
#UE4 | @UNREALENGINE
#UE4 | @UNREALENGINE
Incremental Build
● 手動起動
● 「ごめん、一時間後パブリッシャー/社長に会議でビルドを見せなきゃいけな
いから、何とかして」というときに
● Nightly Buildと違って、時間がないから…
● -partialgcを付ける
● クリーンビルドじゃなくてもいい
#UE4 | @UNREALENGINE
Incremental Build フロー
Jenkins Build
Send to
DevKit
Update
Notify
開発機までの接続は、各メーカーのSDKを確認してください。
また、エディターからdeployするときにエンジン内でも同じことするので、
/Engine/Source/Programs/AutomationTool/PlatformName/PlatformNamePlatfo
rm.Automation.csを見てね
#UE4 | @UNREALENGINE
ビルドコマンド
Engine/Build/BatchFiles/RunUAT.bat BuildCookRun
-project=GamePath/GameName.uproject
-noP4
-platform=Win64
-clientconfig=Development
-cook
-allmaps
-build
-stage
-pak
-archive
-partialgc
-archivedirectory=C:/TempDirectory/
クック中に、メモリがなくなったときにすべてをクリーンするのではなく、
パッケージで完了したときにクリーンアップする。
#UE4 | @UNREALENGINE
#UE4 | @UNREALENGINE
Jenkins Plugins
#UE4 | @UNREALENGINE
Plugins
Build Pipeline Plugin
https://wiki.jenkins.io/display/JENKINS/Build+Pipeline+Plugin
#UE4 | @UNREALENGINE
Plugins
Jenkins Slack Plugin
https://github.com/jenkinsci/slack-plugin
#UE4 | @UNREALENGINE
Plugins
Retaliation
https://github.com/codedance/Retaliation
#UE4 | @UNREALENGINE
目次
●CIとは
●UnrealAutomationTool
●エンジンとプロジェクトビルドの作業
●その他のビルド作業
●The Unreal Way
#UE4 | @UNREALENGINE
その他のビルドCI Jobs
#UE4 | @UNREALENGINE
Commandlet
Command Line Applet → コマンドレットとは、Unreal Engineの環境内で
作動するコマンドラインプログラム
#UE4 | @UNREALENGINE
Shared DDC
Derived Data Cache (DDC) は、エンジンとターゲットプラットフォームが使
用するフォーマットでアセットのバージョンを保存する機能
簡単にいうと、みんなが利用しているアセットをキャッシュする
#UE4 | @UNREALENGINE
Shared DDC
Shared
FolderDev PC 1
Copy Built Asset
Build Assets on
1st launch
#UE4 | @UNREALENGINE
Shared DDC
Shared
Folder
Dev PC 5Dev PC 4
Dev PC 3Dev PC 2
Copy Built Asset
#UE4 | @UNREALENGINE
Shared DDC
Shared
FolderDev PC 4
Modify / Add
Asset
Copy Built Asset
#UE4 | @UNREALENGINE
Shared DDC
https://docs.unrealengine.com/en-
US/Engine/Basics/DerivedDataCache/index.html
BaseEngine.ini
[InstalledDerivedDataBackendGraph]
MinimumDaysToKeepFile=7
Root=(Type=KeyLength, Length=120, Inner=AsyncPut)
AsyncPut=(Type=AsyncPut, Inner=Hierarchy)
Hierarchy=(Type=Hierarchical, Inner=Boot, Inner=Pak, Inner=EnginePak, Inner=Local, Inner=Shared)
Boot=(Type=Boot, Filename=%GAMEDIR%DerivedDataCache/Boot.ddc, MaxCacheSize=256)
Local=(Type=FileSystem, ReadOnly=false, Clean=false, Flush=false, PurgeTransient=true, DeleteUnused=true,
UnusedFileAge=17, FoldersToClean=-1, Path=../../../Engine/DerivedDataCache)
Shared=(Type=FileSystem, ReadOnly=false, Clean=false, Flush=false, DeleteUnused=true, UnusedFileAge=19,
FoldersToClean=-1, Path=//mystudio.net/DDC, EnvPathOverride=UE-SharedDataCachePath)
AltShared=(Type=FileSystem, ReadOnly=true, Clean=false, Flush=false, DeleteUnused=true, UnusedFileAge=19,
FoldersToClean=-1, Path=//mystudio.net/DDC2, EnvPathOverride=UE-SharedDataCachePath2)
Pak=(Type=ReadPak, Filename=%GAMEDIR%DerivedDataCache/DDC.ddp)
EnginePak=(Type=ReadPak, Filename=../../../Engine/DerivedDataCache/DDC.ddp)
#UE4 | @UNREALENGINE
Shared DDC
#UE4 | @UNREALENGINE
Shared DDC
// Flush and Clean argument DerivedDataBackends.cpp:553
if( bFlush )
{
IFileManager::Get().DeleteDirectory( *(Path / TEXT(“”)), false, true );
}
else if( bClean )
{
DeleteOldFiles( *Path );
}
/** Delete the old files in a directory **/
void DeleteOldFiles(const TCHAR* Directory)
{
float MinimumDaysToKeepFile = 7;
GConfig->GetFloat( *GraphName, TEXT("MinimumDaysToKeepFile"), MinimumDaysToKeepFile, GEngineIni );
check(MinimumDaysToKeepFile > 0.0f); // sanity
//@todo
}
#UE4 | @UNREALENGINE
Shared DDC
//@todo
#UE4 | @UNREALENGINE
Shared DDC
UE4Editor-cmd.exe ProjectName –run=DerivedDataCache -fill
del /s /q c:/ServerShareDDCPath/*
#UE4 | @UNREALENGINE
Lighting Build
● リアルタイムライト以外の照明は、クックしなきゃいけない。
● もちろん、エピックがクックするためのツールを提供している。
ただ…
#UE4 | @UNREALENGINE
Lighting Build
#UE4 | @UNREALENGINE
遅い。とても
なので夜間にCIソフトウエアに任せるのが正しい
毎晩、自動で、このJobを走らせましょう
Lighting Build
#UE4 | @UNREALENGINE
Lighting Build
UE4Editor-cmd.exe ProjectName -run=resavepackages
-buildlighting -allowcommandletrendering
#UE4 | @UNREALENGINE
Lighting Build
Editorで作業して、ライトを確認したいときに、
ローカルでライトビルドするのは現実的
そのプロセスを早くするため、Swarmがある
#UE4 | @UNREALENGINE
Lighting Build - Swarm
Swarmは、UE4の高品質なスタティック グローバル イ
ルミネーション ソルバである Unreal のライトマスを
含むタスク分散システム
Coordinatorは、ジェンキンスマスターでいいと思う
https://wiki.unrealengine.com/Swarm_Agent_Trou
bleshooting
#UE4 | @UNREALENGINE
Lighting Build - Swarm
Engine/Binaries/DotNET/SwarmCoordinator.exe
Engine/Binaries/DotNET/SwarmAgent.exe
Startupに追加する :
ショートカットを作成して、
%APPDATA%/Microsoft/Windows/Start Menu/Programs/Startupまでコピーする
#UE4 | @UNREALENGINE
Lighting Build - Swarm
#UE4 | @UNREALENGINE
Redirectors
● Redirectorは、UE4 でアセットを移動したり名前の変更をするとき、変更先を検
出するためのもので、元の位置に‘Redirector’が残される
● 残し方によっては、バグりやすくなるから、綺麗にする必要がある
● 大体、月一回でいいと思います。危ないとき(エンジンのマージあと、アルファ版
かベータ版のリリースの後)、週一回にしましょう!
https://docs.unrealengine.com/en-US/Engine/Basics/Redirectors/index.html
#UE4 | @UNREALENGINE
Redirectors
UE4Editor-cmd.exe ProjectName -run=fixupredirects
#UE4 | @UNREALENGINE
目次
●CIとは
●UnrealAutomationTool
●エンジンとプロジェクトビルドの作業
●その他のビルド作業
●The Unreal Way
#UE4 | @UNREALENGINE
The Unreal Way :
Fortnite
#UE4 | @UNREALENGINE
Fortnite
● エンジニアしかVisualStudioを持たない
● ElectricCommanderとBuildGraphを利用している
● UnrealGameSyncを使用している
#UE4 | @UNREALENGINE
イテレーション
VSがなかったら、難しそうですね?
実は、そうでもない。覚悟が必要ですけど
● PIEを出来るだけ使おう
● CIソフトウエアのビルドを上手く使おう
#UE4 | @UNREALENGINE
デバイスで今のレベルを試したいときに…
キャラクターの髪の毛の色を変更して、コミットする前に端末のディスプレイ
で確認したいけど、VSがないから、ビルド出来ないというシナリオだと…
まずは、
CIソフトウエアでincremental buildの作業を作って、
Project/Binaries/各プラットフォームのフォルダーでビルドマシンにコミット
させる
#UE4 | @UNREALENGINE
Custom Launch Profile
そしてエディターのLaunchボタンの右の三角形
をクリック、
Project LauncherのCustom Launch Profileが
追加されたファイルを編集する
プロファイルはプロジェクト側ではなく、
/Engine/Programs/UnrealFrontend/Profiles
に保存される
プロファイルからBuildのステップを外してパソ
コンに繋がっているデバイスにdeployしたら、
誰でもいつでも、VisualStudioを持たずに、タ
ーゲットプラットフォームでプレイが出来る
#UE4 | @UNREALENGINE
ビルドマシンまとめ
UE4のパイプラインにあるはずのJobs :
● エンジンビルド
● プロジェクトビルド
● 夜プロジェクトパッケージ
● Incrementalプロジェクトパッケージ
● InstalledBuildを使わない場合は、Project Launcher用ビルド
● ライトマップビルド
● Fixup Redirectorsコマンドレット
● SharedDDCクリーンアップ
● SharedDDCのfill
#UE4 | @UNREALENGINE
バージョン管理しすてむ
● エピックはPerforceを使用しているため、使ったらエピック環境に一番近く
なるが、有料ソフトウエアである
● SVNがちょっとだけ遅いかもしれないが、長く使われていて頼れる
● GITは無料で、モバイルとソシャゲで良く使われている
SVNとPerforceはエディターでサポートします!GITにも対応しているけど、ま
だExperimental!
#UE4 | @UNREALENGINE
UnrealGameSync
Fortniteなどのエピック内のプロジェクトのためにエピックが作ったツール
Perforceのみだが、P4Vの代わりに使えるUI。ノンテクニカルの開発者におすすめ
#UE4 | @UNREALENGINE
UnrealGameSync
#UE4 | @UNREALENGINE
UnrealGameSync
P4サーバー
Sync
Get
Engine
(コードあり)
Local Builds
(Binary Engine)
生成
ビルドマシン
#UE4 | @UNREALENGINE
UnrealGameSync
最新版はPerforceとGitHubでいつでも。
UE4と関係がないので、エンジンのバージョンにロックをかけていてもUGSの最
新版をゲットしよう
https://docs.unrealengine.com/latest/ja/Programming/Deployment/Unrea
lGameSync/Reference/
#UE4 | @UNREALENGINE
https://github.com/gpageot/JenkinsUE4
Twitter : @GregoryPAGEOT
https://github.com/AxRiff/UnrealEngineJenkins
Twitter : @AxRiff
https://github.com/electronicarts/EACopy
Twitter : @honk_dice
Manga by @shiba_zushi。まいど!
Links
#UE4 | @UNREALENGINE
Unreal Fes t Eas t 2019
2019 / 10 / 6
パシフィコ横浜
#UE4 | @UNREALENGINE
Merci !

Mais conteúdo relacionado

Mais procurados

目指せ脱UE4初心者!?知ってると開発が楽になる便利機能を紹介 - DataAsset, Subsystem, GameplayAbility編 -
目指せ脱UE4初心者!?知ってると開発が楽になる便利機能を紹介 - DataAsset, Subsystem, GameplayAbility編 -目指せ脱UE4初心者!?知ってると開発が楽になる便利機能を紹介 - DataAsset, Subsystem, GameplayAbility編 -
目指せ脱UE4初心者!?知ってると開発が楽になる便利機能を紹介 - DataAsset, Subsystem, GameplayAbility編 -
historia_Inc
 

Mais procurados (20)

UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動についてUE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
 
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 2
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 2Unreal Engine 5 早期アクセスの注目機能総おさらい Part 2
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 2
 
メカアクションゲーム『DAEMON X MACHINA』 信念と血と鋼鉄の開発事例
メカアクションゲーム『DAEMON X MACHINA』 信念と血と鋼鉄の開発事例メカアクションゲーム『DAEMON X MACHINA』 信念と血と鋼鉄の開発事例
メカアクションゲーム『DAEMON X MACHINA』 信念と血と鋼鉄の開発事例
 
バイキング流UE4活用術 ~BPとお別れするまでの18ヶ月~
バイキング流UE4活用術 ~BPとお別れするまでの18ヶ月~バイキング流UE4活用術 ~BPとお別れするまでの18ヶ月~
バイキング流UE4活用術 ~BPとお別れするまでの18ヶ月~
 
UE4とUnrealC++について
UE4とUnrealC++についてUE4とUnrealC++について
UE4とUnrealC++について
 
UE4×Switchで60FPSの(ネットワーク)対戦アクションをなんとかして作る! | UNREAL FEST EXTREME 2020 WINTER
UE4×Switchで60FPSの(ネットワーク)対戦アクションをなんとかして作る!  | UNREAL FEST EXTREME 2020 WINTERUE4×Switchで60FPSの(ネットワーク)対戦アクションをなんとかして作る!  | UNREAL FEST EXTREME 2020 WINTER
UE4×Switchで60FPSの(ネットワーク)対戦アクションをなんとかして作る! | UNREAL FEST EXTREME 2020 WINTER
 
Nintendo Switch『OCTOPATH TRAVELER』はこうして作られた
Nintendo Switch『OCTOPATH TRAVELER』はこうして作られたNintendo Switch『OCTOPATH TRAVELER』はこうして作られた
Nintendo Switch『OCTOPATH TRAVELER』はこうして作られた
 
猫でも分かるUMG
猫でも分かるUMG猫でも分かるUMG
猫でも分かるUMG
 
UE4 MultiPlayer Online Deep Dive 基礎編1 -Getting Started- (historia様ご講演) #UE4DD
UE4 MultiPlayer Online Deep Dive 基礎編1 -Getting Started-  (historia様ご講演) #UE4DDUE4 MultiPlayer Online Deep Dive 基礎編1 -Getting Started-  (historia様ご講演) #UE4DD
UE4 MultiPlayer Online Deep Dive 基礎編1 -Getting Started- (historia様ご講演) #UE4DD
 
[4.20版] UE4におけるLoadingとGCのProfilingと最適化手法
[4.20版] UE4におけるLoadingとGCのProfilingと最適化手法[4.20版] UE4におけるLoadingとGCのProfilingと最適化手法
[4.20版] UE4におけるLoadingとGCのProfilingと最適化手法
 
UE4のローカライズ機能紹介 (UE4 Localization Deep Dive)
UE4のローカライズ機能紹介 (UE4 Localization Deep Dive)UE4のローカライズ機能紹介 (UE4 Localization Deep Dive)
UE4のローカライズ機能紹介 (UE4 Localization Deep Dive)
 
目指せ脱UE4初心者!?知ってると開発が楽になる便利機能を紹介 - DataAsset, Subsystem, GameplayAbility編 -
目指せ脱UE4初心者!?知ってると開発が楽になる便利機能を紹介 - DataAsset, Subsystem, GameplayAbility編 -目指せ脱UE4初心者!?知ってると開発が楽になる便利機能を紹介 - DataAsset, Subsystem, GameplayAbility編 -
目指せ脱UE4初心者!?知ってると開発が楽になる便利機能を紹介 - DataAsset, Subsystem, GameplayAbility編 -
 
UE4における大規模背景制作事例(コリジョン編)
UE4における大規模背景制作事例(コリジョン編) UE4における大規模背景制作事例(コリジョン編)
UE4における大規模背景制作事例(コリジョン編)
 
60fpsアクションを実現する秘訣を伝授 基礎編
60fpsアクションを実現する秘訣を伝授 基礎編60fpsアクションを実現する秘訣を伝授 基礎編
60fpsアクションを実現する秘訣を伝授 基礎編
 
UE4のライティング解体新書~効果的なNPRのためにライティングの仕組みを理解しよう~
UE4のライティング解体新書~効果的なNPRのためにライティングの仕組みを理解しよう~UE4のライティング解体新書~効果的なNPRのためにライティングの仕組みを理解しよう~
UE4のライティング解体新書~効果的なNPRのためにライティングの仕組みを理解しよう~
 
そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 2 <Texture Streaming, メモリプロ...
  そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 2 <Texture Streaming, メモリプロ...  そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 2 <Texture Streaming, メモリプロ...
そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 2 <Texture Streaming, メモリプロ...
 
UE4における大規模レベル実装ワークフローとブループリント活用事例
UE4における大規模レベル実装ワークフローとブループリント活用事例UE4における大規模レベル実装ワークフローとブループリント活用事例
UE4における大規模レベル実装ワークフローとブループリント活用事例
 
出張ヒストリア ブループリントを書くにあたって大切なこと
出張ヒストリア ブループリントを書くにあたって大切なこと出張ヒストリア ブループリントを書くにあたって大切なこと
出張ヒストリア ブループリントを書くにあたって大切なこと
 
UE4を用いたTPS制作事例 EDF:IR レベル構成について
UE4を用いたTPS制作事例 EDF:IR レベル構成についてUE4を用いたTPS制作事例 EDF:IR レベル構成について
UE4を用いたTPS制作事例 EDF:IR レベル構成について
 
聖剣伝説3でのUE4利用事例の紹介~Making of Mana | UNREAL FEST EXTREME 2020 WINTER
聖剣伝説3でのUE4利用事例の紹介~Making of Mana | UNREAL FEST EXTREME 2020 WINTER聖剣伝説3でのUE4利用事例の紹介~Making of Mana | UNREAL FEST EXTREME 2020 WINTER
聖剣伝説3でのUE4利用事例の紹介~Making of Mana | UNREAL FEST EXTREME 2020 WINTER
 

Semelhante a 「Press Button, Drink Coffee」 UE4における ビルドパイプラインとメンテナンスの全体像

ゲームエンジン導入セミナー【UDK編】
ゲームエンジン導入セミナー【UDK編】ゲームエンジン導入セミナー【UDK編】
ゲームエンジン導入セミナー【UDK編】
Junya "Jun" Shimoda
 

Semelhante a 「Press Button, Drink Coffee」 UE4における ビルドパイプラインとメンテナンスの全体像 (20)

エンタープライズ分野向けUE4最新機能のご紹介
エンタープライズ分野向けUE4最新機能のご紹介エンタープライズ分野向けUE4最新機能のご紹介
エンタープライズ分野向けUE4最新機能のご紹介
 
[CEDEC2017] 最新モバイルゲームの実例からみるUE4のモバイル向け機能・Tipsを全部まるっとご紹介!
[CEDEC2017] 最新モバイルゲームの実例からみるUE4のモバイル向け機能・Tipsを全部まるっとご紹介![CEDEC2017] 最新モバイルゲームの実例からみるUE4のモバイル向け機能・Tipsを全部まるっとご紹介!
[CEDEC2017] 最新モバイルゲームの実例からみるUE4のモバイル向け機能・Tipsを全部まるっとご紹介!
 
[CEDEC+KYUSHU 2017] 最新モバイルゲームの実例からみるUE4のモバイル向け機能・Tipsを全部まるっとご紹介! + UE4.18 モバイ...
[CEDEC+KYUSHU 2017] 最新モバイルゲームの実例からみるUE4のモバイル向け機能・Tipsを全部まるっとご紹介! + UE4.18 モバイ...[CEDEC+KYUSHU 2017] 最新モバイルゲームの実例からみるUE4のモバイル向け機能・Tipsを全部まるっとご紹介! + UE4.18 モバイ...
[CEDEC+KYUSHU 2017] 最新モバイルゲームの実例からみるUE4のモバイル向け機能・Tipsを全部まるっとご紹介! + UE4.18 モバイ...
 
非同期ロード画面 Asynchronous Loading Screen
非同期ロード画面 Asynchronous Loading Screen非同期ロード画面 Asynchronous Loading Screen
非同期ロード画面 Asynchronous Loading Screen
 
UE4でマルチプレイヤーゲームを作ろう
UE4でマルチプレイヤーゲームを作ろうUE4でマルチプレイヤーゲームを作ろう
UE4でマルチプレイヤーゲームを作ろう
 
Azure PlayFab トレーニング資料
Azure PlayFab トレーニング資料Azure PlayFab トレーニング資料
Azure PlayFab トレーニング資料
 
Unreal Engine 4のビジュアルスクリプトシステム”Blueprint”を使ったMod制作Tipsのご紹介
Unreal Engine 4のビジュアルスクリプトシステム”Blueprint”を使ったMod制作Tipsのご紹介Unreal Engine 4のビジュアルスクリプトシステム”Blueprint”を使ったMod制作Tipsのご紹介
Unreal Engine 4のビジュアルスクリプトシステム”Blueprint”を使ったMod制作Tipsのご紹介
 
UE4制作におけるゲームデザイナーのやれること
UE4制作におけるゲームデザイナーのやれることUE4制作におけるゲームデザイナーのやれること
UE4制作におけるゲームデザイナーのやれること
 
unityゲーム開発基礎講座
unityゲーム開発基礎講座unityゲーム開発基礎講座
unityゲーム開発基礎講座
 
ゲームエンジン導入セミナー【UDK編】
ゲームエンジン導入セミナー【UDK編】ゲームエンジン導入セミナー【UDK編】
ゲームエンジン導入セミナー【UDK編】
 
Build 番号の自動更新スクリプトについて #cocoa_kansai
Build 番号の自動更新スクリプトについて #cocoa_kansaiBuild 番号の自動更新スクリプトについて #cocoa_kansai
Build 番号の自動更新スクリプトについて #cocoa_kansai
 
UE4のモバイル向け機能や最新情報などを改めて紹介!2019
UE4のモバイル向け機能や最新情報などを改めて紹介!2019UE4のモバイル向け機能や最新情報などを改めて紹介!2019
UE4のモバイル向け機能や最新情報などを改めて紹介!2019
 
Titanium勉強会
Titanium勉強会Titanium勉強会
Titanium勉強会
 
あるゲームアプリケーションの構成とアップデートサイクル
あるゲームアプリケーションの構成とアップデートサイクルあるゲームアプリケーションの構成とアップデートサイクル
あるゲームアプリケーションの構成とアップデートサイクル
 
Tips and Tricks for developing Windows APO drivers
Tips and Tricks for developing Windows APO driversTips and Tricks for developing Windows APO drivers
Tips and Tricks for developing Windows APO drivers
 
Delphi Community Edition Meet up !
Delphi Community Edition Meet up !Delphi Community Edition Meet up !
Delphi Community Edition Meet up !
 
Unreal Engine 4 Powering Independent Game Developers
Unreal Engine 4 Powering Independent Game DevelopersUnreal Engine 4 Powering Independent Game Developers
Unreal Engine 4 Powering Independent Game Developers
 
Epic Online Services でできること
Epic Online Services でできることEpic Online Services でできること
Epic Online Services でできること
 
GMOアプリクラウドではじめる Photon Server v4 (2016/4/20 発表資料)
GMOアプリクラウドではじめる Photon Server v4 (2016/4/20 発表資料)GMOアプリクラウドではじめる Photon Server v4 (2016/4/20 発表資料)
GMOアプリクラウドではじめる Photon Server v4 (2016/4/20 発表資料)
 
Unreal Studio 最新情報
Unreal Studio 最新情報Unreal Studio 最新情報
Unreal Studio 最新情報
 

Mais de エピック・ゲームズ・ジャパン Epic Games Japan

Mais de エピック・ゲームズ・ジャパン Epic Games Japan (20)

初心者向け UE4 映像制作での シーケンサー と Movie Render Queue の使い方
初心者向け UE4 映像制作での シーケンサー と Movie Render Queue の使い方初心者向け UE4 映像制作での シーケンサー と Movie Render Queue の使い方
初心者向け UE4 映像制作での シーケンサー と Movie Render Queue の使い方
 
猫でも分かるUE4を使った VRコンテンツ開発 超入門編 2021
猫でも分かるUE4を使った VRコンテンツ開発 超入門編 2021猫でも分かるUE4を使った VRコンテンツ開発 超入門編 2021
猫でも分かるUE4を使った VRコンテンツ開発 超入門編 2021
 
Unreal Engine 4.27 ノンゲーム向け新機能まとめ
Unreal Engine 4.27 ノンゲーム向け新機能まとめUnreal Engine 4.27 ノンゲーム向け新機能まとめ
Unreal Engine 4.27 ノンゲーム向け新機能まとめ
 
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 1
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 1Unreal Engine 5 早期アクセスの注目機能総おさらい Part 1
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 1
 
UE4 Hair & Groomでのリアルタイムファーレンダリング (UE4 Character Art Dive Online)
UE4 Hair & Groomでのリアルタイムファーレンダリング (UE4 Character Art Dive Online)UE4 Hair & Groomでのリアルタイムファーレンダリング (UE4 Character Art Dive Online)
UE4 Hair & Groomでのリアルタイムファーレンダリング (UE4 Character Art Dive Online)
 
UE4を使った映像制作 (UE4 Character Art Dive Online)
UE4を使った映像制作 (UE4 Character Art Dive Online)UE4を使った映像制作 (UE4 Character Art Dive Online)
UE4を使った映像制作 (UE4 Character Art Dive Online)
 
Hair Groom入門 (UE4 Character Art Dive Online)
Hair Groom入門 (UE4 Character Art Dive Online)Hair Groom入門 (UE4 Character Art Dive Online)
Hair Groom入門 (UE4 Character Art Dive Online)
 
UE4で”MetaHumanを使わずに”耳なし芳一になる10の方法 | UE4 Character Art Dive Online
UE4で”MetaHumanを使わずに”耳なし芳一になる10の方法 | UE4 Character Art Dive OnlineUE4で”MetaHumanを使わずに”耳なし芳一になる10の方法 | UE4 Character Art Dive Online
UE4で”MetaHumanを使わずに”耳なし芳一になる10の方法 | UE4 Character Art Dive Online
 
『バランワンダーワールド』でのマルチプラットフォーム対応について UNREAL FEST EXTREME 2021 SUMMER
『バランワンダーワールド』でのマルチプラットフォーム対応について  UNREAL FEST EXTREME 2021 SUMMER『バランワンダーワールド』でのマルチプラットフォーム対応について  UNREAL FEST EXTREME 2021 SUMMER
『バランワンダーワールド』でのマルチプラットフォーム対応について UNREAL FEST EXTREME 2021 SUMMER
 
Visual Dataprepで建築データを美味しく下ごしらえ UNREAL FEST EXTREME 2021 SUMMER
Visual Dataprepで建築データを美味しく下ごしらえ UNREAL FEST EXTREME 2021 SUMMERVisual Dataprepで建築データを美味しく下ごしらえ UNREAL FEST EXTREME 2021 SUMMER
Visual Dataprepで建築データを美味しく下ごしらえ UNREAL FEST EXTREME 2021 SUMMER
 
Unreal Engineでのコンフィギュレーター制作と映像制作 UNREAL FEST EXTREME 2021 SUMMER
Unreal Engineでのコンフィギュレーター制作と映像制作  UNREAL FEST EXTREME 2021 SUMMERUnreal Engineでのコンフィギュレーター制作と映像制作  UNREAL FEST EXTREME 2021 SUMMER
Unreal Engineでのコンフィギュレーター制作と映像制作 UNREAL FEST EXTREME 2021 SUMMER
 
バレンシアガ『Afterworld: The Age of Tomorrow』の舞台裏 UNREAL FEST EXTREME 2021 SUMMER
バレンシアガ『Afterworld: The Age of Tomorrow』の舞台裏  UNREAL FEST EXTREME 2021 SUMMERバレンシアガ『Afterworld: The Age of Tomorrow』の舞台裏  UNREAL FEST EXTREME 2021 SUMMER
バレンシアガ『Afterworld: The Age of Tomorrow』の舞台裏 UNREAL FEST EXTREME 2021 SUMMER
 
『FINAL FANTASY VII REMAKE』におけるプロファイリングと最適化事例 UNREAL FEST EXTREME 2021 SUMMER
『FINAL FANTASY VII REMAKE』におけるプロファイリングと最適化事例 UNREAL FEST EXTREME 2021 SUMMER『FINAL FANTASY VII REMAKE』におけるプロファイリングと最適化事例 UNREAL FEST EXTREME 2021 SUMMER
『FINAL FANTASY VII REMAKE』におけるプロファイリングと最適化事例 UNREAL FEST EXTREME 2021 SUMMER
 
SAMURAI JACK開発事例:海外むけアクションゲームをオーソドックスに作ってみた UNREAL FEST EXTREME 2021 SUMMER
SAMURAI JACK開発事例:海外むけアクションゲームをオーソドックスに作ってみた UNREAL FEST EXTREME 2021 SUMMERSAMURAI JACK開発事例:海外むけアクションゲームをオーソドックスに作ってみた UNREAL FEST EXTREME 2021 SUMMER
SAMURAI JACK開発事例:海外むけアクションゲームをオーソドックスに作ってみた UNREAL FEST EXTREME 2021 SUMMER
 
『ガールズ&パンツァー 最終章』第3話 アニメとゲームエンジンの融合(ジャングル完結編) UNREAL FEST EXTREME 2021 SUMMER
『ガールズ&パンツァー 最終章』第3話 アニメとゲームエンジンの融合(ジャングル完結編)  UNREAL FEST EXTREME 2021 SUMMER『ガールズ&パンツァー 最終章』第3話 アニメとゲームエンジンの融合(ジャングル完結編)  UNREAL FEST EXTREME 2021 SUMMER
『ガールズ&パンツァー 最終章』第3話 アニメとゲームエンジンの融合(ジャングル完結編) UNREAL FEST EXTREME 2021 SUMMER
 
UE4を使用したバーチャルヒューマンの映像制作 UNREAL FEST EXTREME 2021 SUMMER
UE4を使用したバーチャルヒューマンの映像制作  UNREAL FEST EXTREME 2021 SUMMERUE4を使用したバーチャルヒューマンの映像制作  UNREAL FEST EXTREME 2021 SUMMER
UE4を使用したバーチャルヒューマンの映像制作 UNREAL FEST EXTREME 2021 SUMMER
 
オンラインで同期した100体の巨大生物から地球を衛る方法 UNREAL FEST EXTREME 2021 SUMMER
オンラインで同期した100体の巨大生物から地球を衛る方法  UNREAL FEST EXTREME 2021 SUMMERオンラインで同期した100体の巨大生物から地球を衛る方法  UNREAL FEST EXTREME 2021 SUMMER
オンラインで同期した100体の巨大生物から地球を衛る方法 UNREAL FEST EXTREME 2021 SUMMER
 
MetaHumanサンプル解体新書 UNREAL FEST EXTREME 2021 SUMMER
MetaHumanサンプル解体新書  UNREAL FEST EXTREME 2021 SUMMERMetaHumanサンプル解体新書  UNREAL FEST EXTREME 2021 SUMMER
MetaHumanサンプル解体新書 UNREAL FEST EXTREME 2021 SUMMER
 
Twinmotion 2021とAEC分野向けソリューションのご紹介
Twinmotion 2021とAEC分野向けソリューションのご紹介Twinmotion 2021とAEC分野向けソリューションのご紹介
Twinmotion 2021とAEC分野向けソリューションのご紹介
 
UE4.26 レンダリング新機能(CEDEC+KYUSHU 2020)
UE4.26 レンダリング新機能(CEDEC+KYUSHU 2020)UE4.26 レンダリング新機能(CEDEC+KYUSHU 2020)
UE4.26 レンダリング新機能(CEDEC+KYUSHU 2020)
 

Último

Último (11)

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 

「Press Button, Drink Coffee」 UE4における ビルドパイプラインとメンテナンスの全体像