DeNA Tech Con 参加セッションまとめ(Unity)

1/29に開催されたDeNA Tech Conイベントのノートまとめです。

##1 ネイティヴアプリの内製開発

パズドラが流行してしまった後からスタート

	戦力分析：DeNAはサーバサイドが強みの会社であるため、戦力は低めだった
	市場分析：市場のアプリを開発難度及び技術要素で評価…これなら追いつけそうということで開始
	USの市場の方が技術的に高い
プログラミングパラダイム

	いわゆる非同期のプログラミング構造
	寿命の長い変数や状態の対応の発生する
	「ブロック処理の繰り返し→表示」　から、「ノンブロックの処理と表示を繰り返す」へ
マルチメディアデータ

	グラフィックやサウンドについて経験が浅い
	
リソースマネジメント

	webは全ユーザが全リソースを利用できる
	アプリは自分の端末のリソースのみが利用できる
	どちらも違う難しさがあるが、切り替えは必要
チート

	サーバサイドではセキュリティが高い
	アプリは不正利用行為されやすい環境

戦略

	1. 採用には頼らない
		- webでの成功体験のあるメンバに頼る
		- 強みであるサービス運用を生かす
	2. 愚直なゲーム開発に取り組む
		- クライアント開発に人員投下
		- 開発手法をweb開発の延長ではなく、ゲーム専門に切り替える
	3. 難易度の高すぎることはやらない
		- 難易度の高い要素を定義して、複数取り入れないようにした
		- サウンド領域など、育成困難なものは内製しないことに

ゲームエンジン

	Unity
		- 主に3D
		- 経験が浅い人でも入りやすい
	LiftEngine
		- Cocos2d-xベースの内製エンジン
		- タイトルに合わせたチューニング
	Sakasho
		- ゲームアプリ向け内製BaaS
		- ユーザ管理、決済計上などの工数を一手に
		- ゲームに特化
		- 強制導入により、サーバ側よりクライアント側の実装経験を強制
	IRIS


チーム構成

	- 「少数精鋭」という夢は見ない
	新規タイトルは30~40人のチーム規模がボリュームゾーン
	アートアセットの多くは外部、よってコンソール業界に近い開発規模
	- 少人数開発では、少人数開発のノウハウしか積めない
	- 今後のゲーム市場では「クオリティ」「ボリューム」が必須。早い段階で大規模開発に振り切っている。

開発プロセス

	マイルストーンレビュー
		開発期間中のマイルストン(Proto/α/β/RC)を全タイトル共通に
			#α：フィニッシュする力を判断、一画面をちゃんと完成させる力は重要(仮部分をつくらない)
			#β：チュートリアル、最初の体験は非常に重要、部分がちゃんと面白くできているか
		レビューを実施
		途中で開発中止になるタイトルも
				
	品質管理(QA)
		QA期間や工数はコンソール業界並みにかけており、品質基準は高い
		一定期間、新規バグが出ない状態をクリアしていなければリリースできない
		
ネイティブアプリ開発の苦労話
	
	パラダイム：非同期プログラミングはややこしさに馴染めない人は苦労した
	マルチメディアデータ：無駄なアトラス化にデータがでかい…データ管理ができてなかった
	リソース：パフォーマンスが下がりがちだった	
	チート：サーバ時代の経験からよくできていた
	
	予見出来なかった壁
	
		コールバック使いすぎ問題
			コールバックによる通知とポーリングを適切に使い分けなければならない
			C++使っているチームなど：コールバックされたときにオブジェクトが存在していない、コールバックが２回呼ばれてた、呼ばれなくてハングアップなど…
			
		データ設計=RDBMSのテーブル設計の思想に縛られてしまう
			webサーバでは潤沢なメモリ：クライアントでは圧迫してしまう
			サーバからダウンロード、もしくはストレージからメモリにロードする単位でデータをパッケージするような手法にうまく切り替えられず
			
		MVCモデルから離れられない問題
			適切でないのに当てはめようとするなど
			シングルトンに抵抗強すぎ問題なども

DeNAゲーム開発のこれから
	
	Keep
	多くのサーバサイドエンジニアがアプリ開発にシフトできた
	ゲーム業界はクローズド、webではオープンなので情報が得やすい
	参考にできるソースコードが蓄積できた
	ネイティブアプリのグラフィックスが好評価
	
	Problem
	大規模開発のための効率性はビハインド
	エンジニアとアーティストの関係性が曖昧
	絵心のあるエンジニアが少ない
	感触や気持ち良さの世界を言語化する力が弱い
	
	Try
	よりハイエンドなグラフィッスクスやサウンド
	難易度の高い実装へもチャレンジ
	新しい技術領域へ取り組む(VRとか)
	大ヒットゲームを出す！！
	
##3 360°/VRライブストリーミング
小倉さん
	SEGA新卒、MicroSoftJapanでゲーム製作支援
	放浪、スタートアップ
	CEDEC運営委員など：8,9月に行われるゲームカンファレンス
	CESA：コンピュータエンターテインメントカンフレンス

テーマについて：一般ユーザが手持ちの360°カメラで配信するようなことを想定

VRの市況

 ヘビーなVR | ライトなVR
-----------|-----------|
 PC/コンソール|スマホ | 
 専用ヘッドセット|カードボードなど|
 専用UI |UIは特になし |
 ポジション・トラッキングあり|なし |
 主なコンテンツはゲーム|360動画 |
 主要なGDC(ヘッドセット)が発表|360カメラが発表された |


ハイエンドPC
	Steamユーザ数	一億２５００万人

###VRはスマホの方が大きな市場になるであろうと予測されている

ニュース

	ソニー平井社長がVRゲーム100タイトル投入を宣言
	Oculus Story studio


360度のデータを持つという点が特殊

生の映像
⬇︎
正距円筒図法：今研究で使ってる手法
⬇︎
みたい映像(魚眼)	
	
	魚眼レンズの射影の特徴：射角が険しいほど屈折率が高くなる
	
	
普通はカメラ会社が提供するアプリで補正できる
ライブストリーミングの場合はリアルタイムが必要なので、独自に変換させる技術が必要

あとは音と映像の同期とかでコードとか通信とかその他もろもろ

MP4Player

	Unityでやりたかった
	動画をインポートすると自動的にOggTheoraに変換され、画質が変わる
	マルチプラットフォームでH.264をデコードするのは独自にフレームワークを開発
		unityは諦め

##4 DeNAのUnity開発
大前広樹(unity社)、西野()、大竹(アプリケーションエンジニア)

Unity一問一答
	
	1. unity5へに移行について
		unity4はサポート終了予定なので今すぐ移行すべき
		オンデマンドリソースによって、アプリのサイズをドラスティックに変更できる
		アプリサイズをどうにかしようという問題
			iOSのほうは現状で大きな問題
			
	2. API Updaterでサポートされる基準は？
		コードを自動で変換してくれる
			APIアップデートされないのは不具合
			
	3. IL2CPP導入に関する背景
		IL2CPPとは？
			unity自体はc++で、書いたC#はMONOという技術でVMで動いている
			64bitマストと言われ結論としてこれを導入
			
	4. AndroidでのIL2CPP対応の状況は？
		   
	5. IL2CPPセーフな実装に関する公式なガイドライン欲しい
		ガイドラインが必要ない状況がゴールではある
		
	6. Monoのアップデートや新しい.NETFrameworkやc#への機能の対応は？
		iEnumDataがスタックオーバーフロー：仕様変更について
		
	7. C++の利用で高速な環境を提供しているエンジンなどはあるが、C++をサポートする可能性は？
		現状でC++でネイティブプラグイン扱いで呼ぶのは可能
		データオリエンテッドデザイン：データに沿ったコーディングが大事
			特定の言語をサポートしてパフォーマンスをあげるよりは、データフローを大事にしたい
			
	8. unity5の移行に伴いNGUIをuGUIに移行したい。コンセプトの違いは？
		新しく作っていくのであればuGUIで
			サポートしていくのはuGUI
		NGUIは小回りがきいてるのでその点は良い
		
	9. uGUIのマイナーバージョンアップが頻繁すぎて困る。インタフェースが落ち着くのはいつ？
		そろそろ。ヴァージョンアップがあるのはいいこと。
		
	10. アセットバンドルを暗号化して扱いたい。良い方法はある？
		あまり意味はない。androidなど解凍後はメモリが見えてしまう。
		
	11. アセットバンドルは無圧縮だと大きすぎ、圧縮するとランタイムで扱いづらい。アセットバンドルに関するベストプラクティスは？
		lz4?という新しい圧縮形式を追加。これを利用したアセットバンドルで読み込み時の負荷などに配慮した実装ができる
		
	12. Unityとしてのチートやトラッキングに対する方針を教えて
		ユーザの入力は信用しないように。サーバ側でオペレーションしましょう。
		ハッキングされた時の対策用も公開しています　entangibleなんとか
		
	13. ソースのビルドやアセットのビルドに時間がかかる
		キャッシュサーバってサービスを利用しましょう
		unity cloud buildを使って
			リポジトリの変更に合わせて勝手にビルドしてくれる
			メールでプッシュもしてくれる
			工数や伝達事項の短縮にもなります
	14. unityの今後の展望などがあれば
		Democratize game development
			誰でもゲームが作れる
		Solving hard problem
			難しい問題
		Help developers success
			開発者を成功へ
			
		マルチプラットフォームへの対応
		パフォーマンスレポーティング
		クラウドビルド
		
		WebGL:発展途上ながらも実用に足る
		
		Unity道場
			渋谷で行われるUnityセミナー
			毎月やってます！