SlideShare uma empresa Scribd logo
1 de 27
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
Unityで本格戦国
シュミレーションRPG開発
第6回DeNAゲーム開発勉強会
株式会社ディー・エヌ・エー
Japanリージョンゲーム事業本部
技術・編成部 開発基盤グループ
西野 剛平 kohei.nishino@dena.com
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
自己紹介
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
 入社前
⁃ 電話機の基地局制御装置のプロトコル開発
⁃ デバイスドライバの開発
⁃ メーカー研究室で画像認識アプリケーション
開発
 DeNA入社後
⁃ mobageでのONE PIECE グランドコレクシ
ョンの立ち上げ
⁃ エンジニア研修講師
⁃ 入力支援 ジェスチャー認識 エンジン開発
⁃ 戦魂 リードエンジニア
C, C++, Java, C#, Perl, ActionScript3など実務で幅広くプログラミング言語を使用。個
人的にはC# 3.0以降が最も好き。比較的後発にあたるだけあって言語設計がしっか
りしている。また、クラスを継承のみで拡張していく事への限界を危惧して導入さ
れたジェネリックや拡張メソッドの機構など、Strict言語の堅牢性とスクリプトライ
クの手軽さの両立を実現しているのも好きなポイント。
プログラミング歴
西野 剛平
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
どんなゲームか?
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
 戦魂 –SENTAMA-
戦国時代がモチーフの戦略シミュレーションR
PG。プレイヤーは城主となり、武将達を率いて
戦国の乱世の統一を目指す。
https://www.youtube.com/watch?v=JHXZoIm5gxQ
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
戦場、武将ガチャ、訓練を
繰り返すことで部隊が強化され、
ゲームが進行。
戦場
訓練
武将ガチャ
武将をゲット! 金をゲット!
レベルアップ!
訓練した武将を
編成して、戦場へ
ゲットした武将や
強化姫を訓練で合成
手に入れた金で
武将ガチャをまわす
ゲームの進め方
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
開発概要
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
戦魂の開発
 mobage連携なしの iOS/Android アプリ
 Unity4.6 を使った初の内製大型タイトル
 サーバーサイドはSakashoを利用しクライアント開発に重力を置く
 メンバーはネイティブアプリ開発経験者、mobageサーバー開発経験者
、コンソール開発経験者、Unity開発経験者、テクニカルデザイナー、未
経験新卒の混成チーム
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
Native Plugin
アーキテクチャ
Unity 4.6.X
DeAL Sakasho
SDK
Game
Sakasho
クライアント
サーバー
DnSystemNGUI
WebView, MoviePalayer, その他
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
サーバーはSakasho
Sakasho 、Sakasho SDK、Sakasho GM Tool で構成される
Sakasho
Ruby 製の Game Backend as a Service (汎用ゲームサーバー)
Sakasho SDK
ゲームクライアントは、Sakasho SDK の API を利用して
Sakasho と対話する。
Sakasho GM Tool
サーバーの設定や運用のオペレーションは Web 管理ツールから行う
Sakasho について詳しくは、
・第4回ゲーム開発勉強会 Ruby で作る Game Backend as a Service
http://www.slideshare.net/dena_study/game-baas
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
 非同期処理の画一化
 アセットバンドル管理
 サウンドインテグレート
 グラフィック
技術的なところ・・・
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
非同期処理の画一化
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
Unityにおける非同期処理 1/2
Unityで重い処理を行うとき、概ね2つの手段が考えられる。
 コルーチン
⁃ IEnumeratorを使い処理全体を複数フレームに跨って行われるよう
分割する方法。
⁃ Unityメインスレッドで処理されるので、UnityのAPIが使える。
 スレッド
⁃ 別のスレッドなのでUnityメインスレッドが直接ブロッキングされる
事はない。
⁃ UnityのAPIは使えない。
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
 処理の単位をさらに小分けにし、複数コルーチンの組み合わせで処理全
体を構成する場合もある
Unityにおける非同期処理 2/2
処理 A
処理 B
処理 C
処理 A 処理 B
処理 C
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
非同期処理を実行する Jobクラス
 コルーチン型のJobクラス
• IEnumeratorを返すコルーチンをラップしたJobクラス。コルーチンが終了するとJobがDoneとなる。
 スレッド型のJobクラス
• ThreadPoolで実行させる関数をラップしたJobクラス。関数の実行が終了するとJobがDoneとなる。
 結果ありのJobクラス
• 結果を指定することができるJobクラス。関数の実行が終了するとJobがDoneとなる。
IJob job = new AsyncThreadJob(AsyncAction);
void AsyncAction()
{
// 処理
}
IJob job = new Job(Coroutine());
IEnumerator Coroutine()
{
yield return null;
}
IJob job = new ResultfulJob<MyResult>(AsyncAction());
MyResult AsyncAction()
{
// 処理
}
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
コンテナ型 Jobクラス
 Jobを直列に実行するJobクラス
• Addされた順番でJobを実行する。全てのJobが終了した時点で、このJob自身がDoneとなる。
 Jobを並列に実行するJobクラス
• AddされたJobを同時に実行する。全てのJobが終了した時点で、このJob自身がDoneとなる。
SerializeJob job = new SerializeJob();
job.Add( jobA);
job.Add( jobB);
job.Add( jobC);
// jobの実行
JobManager.Run(job);
ParallelJob job = new ParallelJob();
job.Add( jobA);
job.Add( jobB);
job.Add( jobC);
// jobの実行
JobManager.Run(job);
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
アセットバンドル管理
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
アセットバンドルのバージョン管理
 AssetBundleのバージョン管理
⁃ 各AssetBundleの情報はバージョン管理専用のアセットバンドルに
格納。
⁃ バージョン管理専用アセットバンドルでは各AssetBundleの以下の
情報を保持。
⁃ アセットバンドルの名前
⁃ アセットバンドルに含まれる有効なアセットパス
⁃ アセットバンドルの圧縮の有無
⁃ チェックサム(破損のチェックに利用)
⁃ これらの情報とストレージ(キャッシュ)の状態をチェックする事で
ダウロードが必要かを判断
⁃ アセットバンドル生成の過程でアセットパスをユニーク化する事で
格納元アセットバンドル名を意識しないロードが可能
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
アセットバンドル名を意識しないロード
 Character001.unity3d
⁃ A.png
⁃ B.png
⁃ C.png
 Character002.unity3d
⁃ D.png
⁃ E.png
 Character003.unity3d
⁃ F.png
⁃ G.png
⁃ H.png
⁃ I.png
 Character004.unity3d
⁃ J.png
 Resources
⁃ A.png
⁃ B.png
⁃ C.png
⁃ D.png
⁃ E.png
⁃ F.png
⁃ G.png
⁃ H.png
⁃ I.png
⁃ J.png
① Resourceフォルダ配下に
アセットバンドル化するファイルを格納。
② アセットバンドルが
ほぼ同じサイズになるように
ファイル数を調整しながら自動生成
③ AssetBundleLoader.Load<Texture>(“G.png”);
といった具合に格納元のアセットバンドル名は意識せずにロードが可能。
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
サウンドインテグレート
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
内製のサウンドエンジンDeALを採用
 Unityサウンドシステムを使わなかった理由
⁃ Unityにはミキサーなどの概念はなく、戦魂の豪華なサウンド演出を
実現するには機能が足りていない。
⁃ Unityサウンドシステムでサポートされている圧縮フォーマットは
mp3のみのためOggファイルを再生する事ができない。
 DeALを使う理由
⁃ Oggフォーマットに対応しており、ストリームやオンメモリなどの
再生方法が選択可能。
⁃ 内製ゲームエンジンのLiftEngineで利用されており、「パズル戦隊
デナレンジャー」としての実績あり。
⁃ ミキサーの音量設定や再生チャネルなどは、ゲームロジックとは分
離されたDeALプロジェクトファイルとして管理されている。そのた
め、サウンドデザイナとエンジニアで作業領域を明確に分けること
が可能。
※ Unity5ではサポートされています。
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
DeALのネイティブプラグイン化
 DeALをネイティブプラグインとして組込むための準備
⁃ 「マネージコードからアンマネージコードの呼び出しは、iOS 上で
は高負荷です。フレーム毎に複数のネイティブプラグインを呼び出
さないでください。」(Unityマニュアルより引用)
⁃ 各GameObjectがDeALのサウンド再生関数を直接コールするよう
なアーキテクチャを取る場合ネイティブコールの制御は不可能とな
ってしまう。
⁃ DeALへの関数コールは一旦スタックした後、それらを束ねてマーシ
ャルコピーしネイティブコールを行うようなPluginBundlerを作成
。
マーシャリングコストを削減する必要がある。
そこで・・・
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
PluginBundlerの概要
Plugin Bundler
GameObject 2GameObject 1 GameObject 3
① SE1再生命令をスタック
Dispatcher
Unity層
(Managed層)
Native層
(UnManaged層)
DeAL
② Voice1再生命令を
スタック
③ SE2再生命令を
スタック
Result Pool
④ 3つの命令を束ねてネイティブコール
⑤ SE1, Voice1, SE2 の各再生命令
⑥ SE1, Voice1, SE2 の再生結果を
Result Poolに格納
⑦ Result Poolにデータがある場合は取得して
コール元のGameObjectに通知する。
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
グラフィック
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
 2D Sprite と 法線 + 鏡面強度のmapを組み合わせて、ポイントライ
トによるディティール調整
2D Sprite
法線 + 鏡面強度 map
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
 ラジアルブラー、カメラシェイクと
いった臨場感あるバトル表現
 ブルーム、リムライティングなどの
光の表現
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
ご静聴ありがとうございました!!
今後とも戦魂を
よろしくお願いします!

Mais conteúdo relacionado

Mais procurados

Unity ネイティブプラグインの作成について
Unity ネイティブプラグインの作成についてUnity ネイティブプラグインの作成について
Unity ネイティブプラグインの作成について
Tatsuhiko Yamamura
 

Mais procurados (20)

大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化
 
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
 
Unity ネイティブプラグインの作成について
Unity ネイティブプラグインの作成についてUnity ネイティブプラグインの作成について
Unity ネイティブプラグインの作成について
 
モバイルオンラインゲームについて
モバイルオンラインゲームについてモバイルオンラインゲームについて
モバイルオンラインゲームについて
 
12 分くらいで知るLuaVM
12 分くらいで知るLuaVM12 分くらいで知るLuaVM
12 分くらいで知るLuaVM
 
CEDEC 2018 バーチャルキャラクターをリアルイベントへ召還する技術
CEDEC 2018 バーチャルキャラクターをリアルイベントへ召還する技術CEDEC 2018 バーチャルキャラクターをリアルイベントへ召還する技術
CEDEC 2018 バーチャルキャラクターをリアルイベントへ召還する技術
 
Unity In App Purchase (IAP)の使い方
Unity In App Purchase (IAP)の使い方Unity In App Purchase (IAP)の使い方
Unity In App Purchase (IAP)の使い方
 
メタバースのビジネスモデルと技術限界
メタバースのビジネスモデルと技術限界メタバースのビジネスモデルと技術限界
メタバースのビジネスモデルと技術限界
 
リクルートのWebサービスを支える「RAFTEL」
リクルートのWebサービスを支える「RAFTEL」リクルートのWebサービスを支える「RAFTEL」
リクルートのWebサービスを支える「RAFTEL」
 
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
 
Unityで始めるバージョン管理 Git LFS 入門編
Unityで始めるバージョン管理 Git LFS 入門編Unityで始めるバージョン管理 Git LFS 入門編
Unityで始めるバージョン管理 Git LFS 入門編
 
【Unite 2018 Tokyo】そろそろ楽がしたい!新アセットバンドルワークフロー&リソースマネージャー詳細解説
【Unite 2018 Tokyo】そろそろ楽がしたい!新アセットバンドルワークフロー&リソースマネージャー詳細解説【Unite 2018 Tokyo】そろそろ楽がしたい!新アセットバンドルワークフロー&リソースマネージャー詳細解説
【Unite 2018 Tokyo】そろそろ楽がしたい!新アセットバンドルワークフロー&リソースマネージャー詳細解説
 
Swagger ではない OpenAPI Specification 3.0 による API サーバー開発
Swagger ではない OpenAPI Specification 3.0 による API サーバー開発Swagger ではない OpenAPI Specification 3.0 による API サーバー開発
Swagger ではない OpenAPI Specification 3.0 による API サーバー開発
 
「原神」におけるコンソールプラットフォーム開発
「原神」におけるコンソールプラットフォーム開発「原神」におけるコンソールプラットフォーム開発
「原神」におけるコンソールプラットフォーム開発
 
ワタシはSingletonがキライだ
ワタシはSingletonがキライだワタシはSingletonがキライだ
ワタシはSingletonがキライだ
 
【CEDEC2018】Scriptable Render Pipelineを使ってみよう
【CEDEC2018】Scriptable Render Pipelineを使ってみよう【CEDEC2018】Scriptable Render Pipelineを使ってみよう
【CEDEC2018】Scriptable Render Pipelineを使ってみよう
 
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
 
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
 
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
 
Unityではじめるオープンワールド制作 エンジニア編
Unityではじめるオープンワールド制作 エンジニア編Unityではじめるオープンワールド制作 エンジニア編
Unityではじめるオープンワールド制作 エンジニア編
 

Destaque

DeNA の新しいネイティブ開発(パズル戦隊デナレンジャー)
DeNA の新しいネイティブ開発(パズル戦隊デナレンジャー)DeNA の新しいネイティブ開発(パズル戦隊デナレンジャー)
DeNA の新しいネイティブ開発(パズル戦隊デナレンジャー)
dena_study
 

Destaque (11)

DeNAのゲーム開発を支える Game Backend as a Service
DeNAのゲーム開発を支える Game Backend as a ServiceDeNAのゲーム開発を支える Game Backend as a Service
DeNAのゲーム開発を支える Game Backend as a Service
 
FINAL FANTASY
 Record Keeper 演出データについて
FINAL FANTASY
 Record Keeper 演出データについてFINAL FANTASY
 Record Keeper 演出データについて
FINAL FANTASY
 Record Keeper 演出データについて
 
Game BaaS Implemented in Ruby
Game BaaS Implemented in RubyGame BaaS Implemented in Ruby
Game BaaS Implemented in Ruby
 
FFRKを支えるWebアプリケーションフレームワークの技術
FFRKを支えるWebアプリケーションフレームワークの技術FFRKを支えるWebアプリケーションフレームワークの技術
FFRKを支えるWebアプリケーションフレームワークの技術
 
ガールアックス:リアルタイム通信処理の効率的な実装
ガールアックス:リアルタイム通信処理の効率的な実装ガールアックス:リアルタイム通信処理の効率的な実装
ガールアックス:リアルタイム通信処理の効率的な実装
 
制作を支えたツール達 (パズル戦隊デナレンジャー)
制作を支えたツール達 (パズル戦隊デナレンジャー)制作を支えたツール達 (パズル戦隊デナレンジャー)
制作を支えたツール達 (パズル戦隊デナレンジャー)
 
DeNAオリジナル ゲーム専用プラットフォーム Sakashoについて
DeNAオリジナル ゲーム専用プラットフォーム SakashoについてDeNAオリジナル ゲーム専用プラットフォーム Sakashoについて
DeNAオリジナル ゲーム専用プラットフォーム Sakashoについて
 
DeNA の新しいネイティブ開発(パズル戦隊デナレンジャー)
DeNA の新しいネイティブ開発(パズル戦隊デナレンジャー)DeNA の新しいネイティブ開発(パズル戦隊デナレンジャー)
DeNA の新しいネイティブ開発(パズル戦隊デナレンジャー)
 
ゲームエンジニアのためのデータベース設計
ゲームエンジニアのためのデータベース設計ゲームエンジニアのためのデータベース設計
ゲームエンジニアのためのデータベース設計
 
ガールアックス マルチプレイのリアルタイム通信ゲーム開発入門
ガールアックス マルチプレイのリアルタイム通信ゲーム開発入門ガールアックス マルチプレイのリアルタイム通信ゲーム開発入門
ガールアックス マルチプレイのリアルタイム通信ゲーム開発入門
 
DeNA流cocos2d xとの付き合い方
DeNA流cocos2d xとの付き合い方DeNA流cocos2d xとの付き合い方
DeNA流cocos2d xとの付き合い方
 

Semelhante a Unityで本格戦国シュミレーションRPG 開発

【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~C# JobSystem 編~
【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~C# JobSystem 編~【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~C# JobSystem 編~
【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~C# JobSystem 編~
Unity Technologies Japan K.K.
 
Python東海GAEやってみた
Python東海GAEやってみたPython東海GAEやってみた
Python東海GAEやってみた
Mori Shingo
 
Jenkinsを使おうよ
Jenkinsを使おうよJenkinsを使おうよ
Jenkinsを使おうよ
Yohei Oda
 
初心者向けAndroidゲーム開発ノウハウ
初心者向けAndroidゲーム開発ノウハウ初心者向けAndroidゲーム開発ノウハウ
初心者向けAndroidゲーム開発ノウハウ
Kentarou Mukunasi
 

Semelhante a Unityで本格戦国シュミレーションRPG 開発 (20)

ドリコムJenkins勉強会資料
ドリコムJenkins勉強会資料ドリコムJenkins勉強会資料
ドリコムJenkins勉強会資料
 
Androidアプリ開発のテスト環境
Androidアプリ開発のテスト環境Androidアプリ開発のテスト環境
Androidアプリ開発のテスト環境
 
1.29.user,user,user
1.29.user,user,user1.29.user,user,user
1.29.user,user,user
 
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
 
fastlane x iOSアプリのCI
fastlane x iOSアプリのCIfastlane x iOSアプリのCI
fastlane x iOSアプリのCI
 
【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~C# JobSystem 編~
【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~C# JobSystem 編~【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~C# JobSystem 編~
【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~C# JobSystem 編~
 
Pull request時の画面差分取得の自動化
Pull request時の画面差分取得の自動化Pull request時の画面差分取得の自動化
Pull request時の画面差分取得の自動化
 
Python東海GAEやってみた
Python東海GAEやってみたPython東海GAEやってみた
Python東海GAEやってみた
 
Jenkinsを使おうよ
Jenkinsを使おうよJenkinsを使おうよ
Jenkinsを使おうよ
 
Jenkins+Play!で気軽にCI
Jenkins+Play!で気軽にCIJenkins+Play!で気軽にCI
Jenkins+Play!で気軽にCI
 
ドリコムを支える課金ライブラリを支えるJenkins
ドリコムを支える課金ライブラリを支えるJenkinsドリコムを支える課金ライブラリを支えるJenkins
ドリコムを支える課金ライブラリを支えるJenkins
 
マスティフ (for Xcode beta) - バージョンアップ対応を軽減するためのサービス
マスティフ (for Xcode beta) - バージョンアップ対応を軽減するためのサービスマスティフ (for Xcode beta) - バージョンアップ対応を軽減するためのサービス
マスティフ (for Xcode beta) - バージョンアップ対応を軽減するためのサービス
 
iOSアプリ開発のCI環境 - Jenkins編 -
iOSアプリ開発のCI環境 - Jenkins編 -iOSアプリ開発のCI環境 - Jenkins編 -
iOSアプリ開発のCI環境 - Jenkins編 -
 
「AROW」お披露目(実用編)
「AROW」お披露目(実用編)「AROW」お披露目(実用編)
「AROW」お披露目(実用編)
 
“debug.gem”の 利用体験・開発効率の向上
“debug.gem”の 利用体験・開発効率の向上“debug.gem”の 利用体験・開発効率の向上
“debug.gem”の 利用体験・開発効率の向上
 
“debug.gem”の 利用体験・開発効率の向上.pdf
“debug.gem”の 利用体験・開発効率の向上.pdf“debug.gem”の 利用体験・開発効率の向上.pdf
“debug.gem”の 利用体験・開発効率の向上.pdf
 
Xcodeの管理を楽に - Jenkins編 -
Xcodeの管理を楽に - Jenkins編 -Xcodeの管理を楽に - Jenkins編 -
Xcodeの管理を楽に - Jenkins編 -
 
Bluepillを使ったiOS自動テストの並列化
Bluepillを使ったiOS自動テストの並列化Bluepillを使ったiOS自動テストの並列化
Bluepillを使ったiOS自動テストの並列化
 
The evolution of c#
The evolution of c#The evolution of c#
The evolution of c#
 
初心者向けAndroidゲーム開発ノウハウ
初心者向けAndroidゲーム開発ノウハウ初心者向けAndroidゲーム開発ノウハウ
初心者向けAndroidゲーム開発ノウハウ
 

Último

Último (12)

Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介: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
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
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の勉強会で発表されたものです。
 
論文紹介: 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
 
論文紹介: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...
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 

Unityで本格戦国シュミレーションRPG 開発

  • 1. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. Unityで本格戦国 シュミレーションRPG開発 第6回DeNAゲーム開発勉強会 株式会社ディー・エヌ・エー Japanリージョンゲーム事業本部 技術・編成部 開発基盤グループ 西野 剛平 kohei.nishino@dena.com
  • 2. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 自己紹介
  • 3. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.  入社前 ⁃ 電話機の基地局制御装置のプロトコル開発 ⁃ デバイスドライバの開発 ⁃ メーカー研究室で画像認識アプリケーション 開発  DeNA入社後 ⁃ mobageでのONE PIECE グランドコレクシ ョンの立ち上げ ⁃ エンジニア研修講師 ⁃ 入力支援 ジェスチャー認識 エンジン開発 ⁃ 戦魂 リードエンジニア C, C++, Java, C#, Perl, ActionScript3など実務で幅広くプログラミング言語を使用。個 人的にはC# 3.0以降が最も好き。比較的後発にあたるだけあって言語設計がしっか りしている。また、クラスを継承のみで拡張していく事への限界を危惧して導入さ れたジェネリックや拡張メソッドの機構など、Strict言語の堅牢性とスクリプトライ クの手軽さの両立を実現しているのも好きなポイント。 プログラミング歴 西野 剛平
  • 4. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. どんなゲームか?
  • 5. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.  戦魂 –SENTAMA- 戦国時代がモチーフの戦略シミュレーションR PG。プレイヤーは城主となり、武将達を率いて 戦国の乱世の統一を目指す。 https://www.youtube.com/watch?v=JHXZoIm5gxQ
  • 6. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 戦場、武将ガチャ、訓練を 繰り返すことで部隊が強化され、 ゲームが進行。 戦場 訓練 武将ガチャ 武将をゲット! 金をゲット! レベルアップ! 訓練した武将を 編成して、戦場へ ゲットした武将や 強化姫を訓練で合成 手に入れた金で 武将ガチャをまわす ゲームの進め方
  • 7. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 開発概要
  • 8. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 戦魂の開発  mobage連携なしの iOS/Android アプリ  Unity4.6 を使った初の内製大型タイトル  サーバーサイドはSakashoを利用しクライアント開発に重力を置く  メンバーはネイティブアプリ開発経験者、mobageサーバー開発経験者 、コンソール開発経験者、Unity開発経験者、テクニカルデザイナー、未 経験新卒の混成チーム
  • 9. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. Native Plugin アーキテクチャ Unity 4.6.X DeAL Sakasho SDK Game Sakasho クライアント サーバー DnSystemNGUI WebView, MoviePalayer, その他
  • 10. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. サーバーはSakasho Sakasho 、Sakasho SDK、Sakasho GM Tool で構成される Sakasho Ruby 製の Game Backend as a Service (汎用ゲームサーバー) Sakasho SDK ゲームクライアントは、Sakasho SDK の API を利用して Sakasho と対話する。 Sakasho GM Tool サーバーの設定や運用のオペレーションは Web 管理ツールから行う Sakasho について詳しくは、 ・第4回ゲーム開発勉強会 Ruby で作る Game Backend as a Service http://www.slideshare.net/dena_study/game-baas
  • 11. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.  非同期処理の画一化  アセットバンドル管理  サウンドインテグレート  グラフィック 技術的なところ・・・
  • 12. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 非同期処理の画一化
  • 13. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. Unityにおける非同期処理 1/2 Unityで重い処理を行うとき、概ね2つの手段が考えられる。  コルーチン ⁃ IEnumeratorを使い処理全体を複数フレームに跨って行われるよう 分割する方法。 ⁃ Unityメインスレッドで処理されるので、UnityのAPIが使える。  スレッド ⁃ 別のスレッドなのでUnityメインスレッドが直接ブロッキングされる 事はない。 ⁃ UnityのAPIは使えない。
  • 14. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.  処理の単位をさらに小分けにし、複数コルーチンの組み合わせで処理全 体を構成する場合もある Unityにおける非同期処理 2/2 処理 A 処理 B 処理 C 処理 A 処理 B 処理 C
  • 15. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 非同期処理を実行する Jobクラス  コルーチン型のJobクラス • IEnumeratorを返すコルーチンをラップしたJobクラス。コルーチンが終了するとJobがDoneとなる。  スレッド型のJobクラス • ThreadPoolで実行させる関数をラップしたJobクラス。関数の実行が終了するとJobがDoneとなる。  結果ありのJobクラス • 結果を指定することができるJobクラス。関数の実行が終了するとJobがDoneとなる。 IJob job = new AsyncThreadJob(AsyncAction); void AsyncAction() { // 処理 } IJob job = new Job(Coroutine()); IEnumerator Coroutine() { yield return null; } IJob job = new ResultfulJob<MyResult>(AsyncAction()); MyResult AsyncAction() { // 処理 }
  • 16. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. コンテナ型 Jobクラス  Jobを直列に実行するJobクラス • Addされた順番でJobを実行する。全てのJobが終了した時点で、このJob自身がDoneとなる。  Jobを並列に実行するJobクラス • AddされたJobを同時に実行する。全てのJobが終了した時点で、このJob自身がDoneとなる。 SerializeJob job = new SerializeJob(); job.Add( jobA); job.Add( jobB); job.Add( jobC); // jobの実行 JobManager.Run(job); ParallelJob job = new ParallelJob(); job.Add( jobA); job.Add( jobB); job.Add( jobC); // jobの実行 JobManager.Run(job);
  • 17. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. アセットバンドル管理
  • 18. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. アセットバンドルのバージョン管理  AssetBundleのバージョン管理 ⁃ 各AssetBundleの情報はバージョン管理専用のアセットバンドルに 格納。 ⁃ バージョン管理専用アセットバンドルでは各AssetBundleの以下の 情報を保持。 ⁃ アセットバンドルの名前 ⁃ アセットバンドルに含まれる有効なアセットパス ⁃ アセットバンドルの圧縮の有無 ⁃ チェックサム(破損のチェックに利用) ⁃ これらの情報とストレージ(キャッシュ)の状態をチェックする事で ダウロードが必要かを判断 ⁃ アセットバンドル生成の過程でアセットパスをユニーク化する事で 格納元アセットバンドル名を意識しないロードが可能
  • 19. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. アセットバンドル名を意識しないロード  Character001.unity3d ⁃ A.png ⁃ B.png ⁃ C.png  Character002.unity3d ⁃ D.png ⁃ E.png  Character003.unity3d ⁃ F.png ⁃ G.png ⁃ H.png ⁃ I.png  Character004.unity3d ⁃ J.png  Resources ⁃ A.png ⁃ B.png ⁃ C.png ⁃ D.png ⁃ E.png ⁃ F.png ⁃ G.png ⁃ H.png ⁃ I.png ⁃ J.png ① Resourceフォルダ配下に アセットバンドル化するファイルを格納。 ② アセットバンドルが ほぼ同じサイズになるように ファイル数を調整しながら自動生成 ③ AssetBundleLoader.Load<Texture>(“G.png”); といった具合に格納元のアセットバンドル名は意識せずにロードが可能。
  • 20. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. サウンドインテグレート
  • 21. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 内製のサウンドエンジンDeALを採用  Unityサウンドシステムを使わなかった理由 ⁃ Unityにはミキサーなどの概念はなく、戦魂の豪華なサウンド演出を 実現するには機能が足りていない。 ⁃ Unityサウンドシステムでサポートされている圧縮フォーマットは mp3のみのためOggファイルを再生する事ができない。  DeALを使う理由 ⁃ Oggフォーマットに対応しており、ストリームやオンメモリなどの 再生方法が選択可能。 ⁃ 内製ゲームエンジンのLiftEngineで利用されており、「パズル戦隊 デナレンジャー」としての実績あり。 ⁃ ミキサーの音量設定や再生チャネルなどは、ゲームロジックとは分 離されたDeALプロジェクトファイルとして管理されている。そのた め、サウンドデザイナとエンジニアで作業領域を明確に分けること が可能。 ※ Unity5ではサポートされています。
  • 22. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. DeALのネイティブプラグイン化  DeALをネイティブプラグインとして組込むための準備 ⁃ 「マネージコードからアンマネージコードの呼び出しは、iOS 上で は高負荷です。フレーム毎に複数のネイティブプラグインを呼び出 さないでください。」(Unityマニュアルより引用) ⁃ 各GameObjectがDeALのサウンド再生関数を直接コールするよう なアーキテクチャを取る場合ネイティブコールの制御は不可能とな ってしまう。 ⁃ DeALへの関数コールは一旦スタックした後、それらを束ねてマーシ ャルコピーしネイティブコールを行うようなPluginBundlerを作成 。 マーシャリングコストを削減する必要がある。 そこで・・・
  • 23. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. PluginBundlerの概要 Plugin Bundler GameObject 2GameObject 1 GameObject 3 ① SE1再生命令をスタック Dispatcher Unity層 (Managed層) Native層 (UnManaged層) DeAL ② Voice1再生命令を スタック ③ SE2再生命令を スタック Result Pool ④ 3つの命令を束ねてネイティブコール ⑤ SE1, Voice1, SE2 の各再生命令 ⑥ SE1, Voice1, SE2 の再生結果を Result Poolに格納 ⑦ Result Poolにデータがある場合は取得して コール元のGameObjectに通知する。
  • 24. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. グラフィック
  • 25. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.  2D Sprite と 法線 + 鏡面強度のmapを組み合わせて、ポイントライ トによるディティール調整 2D Sprite 法線 + 鏡面強度 map
  • 26. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.  ラジアルブラー、カメラシェイクと いった臨場感あるバトル表現  ブルーム、リムライティングなどの 光の表現
  • 27. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ご静聴ありがとうございました!! 今後とも戦魂を よろしくお願いします!

Notas do Editor

  1. いろいろチャレンジングな事がありました。 弊社の場合、直置きタイトルはめずらしく、これだけdの大型タイトルでは初。
  2. マスターデータのダウンロード、プレーヤデータの保存、またアセットバンドルのダウンロードなどの決まった順番で処理を行わなければいけない部分などで、汎用てきにしよう。
  3. キャラ画像やvoiceなどは アセットバンドル として管理している。
  4. アセットバンドルのビルドプロセスでユニークを担保する。
  5. もともとLiftエンジン用のサウンドシステムとして作られたものをUnityに組み込む必要があった。
  6. 戦魂のバトルシーンを想定します。
  7. カスタムシェーダーを使った例
  8. X, y ,z, a