Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

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

第6回 DeNA ゲーム開発勉強会

  • Inicia sesión para ver los comentarios

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

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

×