【レポート】第5回DeNAゲーム開発勉強会×Aimingに参加をしてきました。 #dena_study5

先月28日に行われた「第5回DeNAゲーム開発勉強会×Aiming」に参加をしてきました。 簡単ながら、勉強会のレポートをブログに書いていきたいと思います。

内容

  • DeNA の新しいネイティブ開発
  • ゲーム制作を支えたツール達
  • Unity物理エンジンにおまかせゴルフ ぐるぐるイーグル : 事例
  • ゲームデータDLとの戦い 〜幻塔戦記グリフォン〜 : 事例

[レポート] 第5回 DeNAゲーム開発勉強会xAiming レポート - Technology of DeNA

DeNA の新しいネイティブ開発 - 佐藤さん

今までの開発では以下のようなゲームエンジンを使ってきた。

  • ngCore
  • Kickmotor : cocos2dxを元に作られたWebとネイティブのハイブリットエンジン
  • Unity

今回の「デナレンジャー」からは、新しいゲームエンジン[Lift Engine]を採用。 これが、初めてのプロジェクトで、今後の道標的なプロジェクトを目指して作成をした。 [Lift Engine]に関してはこちらのスライドを参考に。 DeNA流cocos2d xとの付き合い方

サーバー

クライアント(ゲーム本体)の質が重要になってきているので、クライアント側の開発に集中できるようにしたい。 そこで利用しているのが「Sakasho」と呼ばれるサーバーシステム。 詳しくはこちらのスライドを参考に。 Game BaaS Implemented in Ruby

サウンド

coocs2dxの標準のサウンド機能が貧弱なので、内製のサウンドエンジン「DeAL」を使っている。

デナレンジャー

2014年12月に企画がスタート。 7名体制で作成。

最終的な開発環境は以下のスライドのようになりました。

2015-5-10-fdsda

開発の流れ

  1. プロトタイプの作成 : 操作性とデザイン。
  2. α(アルファ) : ゲームをする際の必要な実装
  3. β(ベータ):αの問題点を改善
  4. CBT
  5. リリース

今後

UnityとLiftEngineを使って開発をしていく。

ゲーム制作を支えたツール達

Crittercism

クラッシュレポートだけではなく色々な機能があるが、現時点ではクラッシュレポートのみを利用している。

Tiled Map Editor

パズルのステージ作成で利用をしている。 イマイチだった所も多かったので、開発時間があれば専用のエディタを作っても良かった。

SpriteStudio

アニメーションとエフェクトの作成に利用。 自社ツールと比較して使いやすそうなので採用した。

欠点

cocos2dxの標準プレイヤーが遅すぎた。 出力されるデータの中身に無駄が多い。(参照など)

今回実際に利用した経験から、今後は「AnimationBuilder(自社ツール)」と「SpriteStudio」を併用して開発をすることに。 AnimationBuilderについてはこちらを参考に。 FINAL FANTASY Record Keeper 演出データについて

Unity物理エンジンにおまかせゴルフ ぐるぐるイーグル

Unityの物理エンジンは「PhysX」というモノを利用している。 Unity5では「PhysX3.3」。 githubでもソースを確認することができる。

コース

Mayaで作成したメッシュにそのまま「MeshColliderコンポーネント」を作成している。

障害物

こちらはポリゴンを削って、collision用のメッシュを作成した。(実際のオブジェクトより粗い)

物理マテリアル

バンカーなどの地形判定は、Raycastを真下に飛ばして判定をしている。

ゴルフボールへの力

RigidBodyに力とトルクを設定して飛ばしている。 AddForce(force,ForceMode.Impulse); AddTorque(force,ForceMode.Impulse); (torqu軸を中心に回転をさせる)

ボールの停止

RigidBodyのSleep状態を判定して停止をさせている。 ただ特殊な地形ではボールが停止をしないことががり、RigidBodyのDragやAngularDragを調整した。

collision抜け

DontGoThroughThings - Unify Community Wiki

落下予測地点の計算

事前に色々な条件で落下地点のデータを計算。 ゲーム内ではそのデータを使って、予測地点を割り出している。 実際にデータ取りのサンプルを見せてもらいました。

カップ周りの調整

カップの近くでボールが止まってしまうことが起る。 その場合、少しだけ力を加えてカップに入れるようにしている。

パフォーマンス

動かないオブジェクトにはStaticフラグを付ける。 Layer Collision Matrixで、衝突するレイヤーを調整する。

物理エンジンを使っての感想

良かった点

自前でやるより作業工程を削減できた。 モバイルでのパフォーマンスが良い。

悪い点

物理マテリアルの調整が大変。 デバックがメンドクサイ。

ゲームデータDLとの戦い 〜幻塔戦記グリフォン〜 吉野さん

グリフォンは最近アクセサリが実装された。
  • Unity3D
  • C#
  • AssetBundle:ダウンロード

AssetBundleについて

Assetの作成とゲームへのDLをサポートしている。

開発者が決めるのは、どのダウンロードにどのアセットを入れるか。 また、どのダウンロードデータを更新させるのか。などのデータの扱いについて決める。

歴史

容量制限を回避するために、後でDLする必要がある。 ゲームを始める前に、更新データをダウンロードをした。(オンラインゲームを参考にした) タイミングは、ログイン後。

AssetBundle名とバージョン名を指定、それをダウンロードして更新をする。

2回戦

装備品のデータが増えてきて、ダウンロード時間が段々と伸びてきた。 対策として、ゲームの進行している所までのデータをダウンロードするようにした。 ゲームのデータのダウンロードリストに「進行度」を追加した。 これで、進行に応じてその都度ダウンロードをしていくことにした。

3回戦

進行されたデータを落としていくとゲームが進むに連れて、データが肥大化していった。 仕様の追加で、イベントなどが発生したりした。 対策として、バラバラのデータファイルをまとめて、ダウンロードするファイル数を減らした。

今後

使用する時に、使用する分ダウンロードをするように。 装備品7割、敵2割で9割占めている。これを除外すればかなり速度アップに期待ができる。 必要になった時に、その時だけダウンロードをする。
2015-5-10-fddsda

最後に

レベルの高い話が続き、内容を全て理解できていませんが、なんとなくこうすればいいのかなというぐらいの知識が勉強出来ました。 やはり、大きな会社では自社でツールを作っている場合が多いですね。 こういったことは、技術力やゲームに理解がないと作れません。 私も、これくらいのことができるようになりたいと思いました。

懇親会がとても立派な食べ物が出ました。 DeNAさんありがとうございます。

2015-5-10-fddddsda

UnityゲームUI実践ガイド 開発者が知っておきたいGUI構築の新スタンダードUnityゲームUI実践ガイド 開発者が知っておきたいGUI構築の新スタンダード
池和田有輔,時村良平

エムディエヌコーポレーション
売り上げランキング : 5880

Amazonで詳しく見る