【Unity】Unite 2015「コロプラUnity 5プロジェクト ～白猫プロジェクトにおけるUnity 4からUnity 5への移行事例～」レポート


# レポート一覧

- [ここが変わる！Unity 5のスマホ開発　～アセットバンドル、ビルド、プラグイン～](http://qiita.com/baba_s/items/8d4a30d6458b9efac2fe)
- [コロプラUnity 5プロジェクト ～白猫プロジェクトにおけるUnity 4からUnity 5への移行事例～](http://qiita.com/baba_s/items/3c394db28be90d83234c)
- [Unity 5グラフィックス機能使いこなしガイド](http://qiita.com/baba_s/items/d4f7b24bab2ccdaa1f1e)
- [Rederer Massive Amount of Objects in Unity](http://qiita.com/baba_s/items/228b368196ef606e4b68)
- [協力・対戦ゲームを支えるPhotonの最新情報、Mecanimにネイティブ対応したPUNの実力協力・対戦ゲームの市場感](http://qiita.com/baba_s/items/3f29400c026fc0d87842)
- [ゲーム開発の始め方、育て方、終わらせ方～「Game Dev Heroes」における生産性チャレンジ～](http://qiita.com/baba_s/items/a563b09e93e7e868d00b)

# なぜUnity5なのか

- iOS64bit対応
- 強制アップデートを極力行わない運用スタイルのため
- Unityのバージョンをあげるチャンス
	- 次にアップデートが必要になった際にできるだけ新しいバージョンにしておくことが好ましい

# Unityのバージョンについて

|タイトル|バージョン|
|:--|:--|
|魔法使いと黒猫のウィズ|4.1.5|
|軍勢RPG 蒼の三国志|4.1.5|
|スリングショットブレイブズ|4.5.4|
|ほしの島のにゃんこ|4.5.4|

# Unityバージョンをあげた経験

- スリングショットブレイブズ
	- 画面の回転周りがiOSのバージョンアップで変更に
	- アセットバンドルを複数バージョン管理することに

- 複数バージョンのアセットバンドル管理
	- 作成時間の倍増
	- チェックコストの倍増
	- 古いバージョンのUnityでAssetBundleを作成できるように保守する必要がある
		- 4か月ほどユーザーの移行期間として複数バージョンでの更新を行っていた

# Unity5移行について

1. エラーをとる
2. うまく動かないところを直す
3. 新しいバージョンが出るのを待つ

## エラーをとる

- 小文字でのアクセサがなくなっています
- GetComponent<>と記述する必要がある
- API Updaterがアップデートしてくれるが
ただしコンパイルエラーが発生すると途中で終わってしまう模様
- ひたすら「I Made a Backup. Go Ahead!」を選択していく必要がある

API Updaterにアップデートさせると
エディタで実行できるが端末で実行できないコードが生成されてしまう
↓
System.Typeを使うAddComponentへ変更すること

# Interactive Cloth

- 白猫ではバナーに使用
- InteractiveClothはClothへ
- ClothRendererはSkinnedMeshRendererへ

# Cloth

- 頂点を固定する方法が変更された

# その他の修正

- TextureFormatがいくつかなくなった
	- ATF_RGB_DXT1など
- AnimatorStateMachineのGetStateMahineが配列アクセスへ変更
- BB10Playerがなくなった

# うまく動かないところを直す


## タイトルのアニメーションが動かない

- ApplyRootMotion
	- Unity5ではルートモーションの仕組みが変わりました
	- 今までと同じ挙動にするにはApplyRootMonitionのチェックを外します

## アウトラインが膨らんだ

- Scaleについての仕様変更
	- 頂点を返すだけのシェーダ
	- Scaleがvertexにかかっている
	- Unity5.xの場合
		- UNITY_MATRIX_MVP←こっちにScaleが入っている
	- 修正後のShader
		- float3 norm = COMPUTE_VIEW_NORMAL(v.normal);
	- UnityCg.incの中にある組み込みマクロを使用しましょう

## CubeMapが反映されない

- TexGenがなくなりました
	- Unity5.x:VertexShaderでCubeapのUVを自分で計算する

## クエスト選択の背景が黒くなる

- RenderTextureへ描画するカメラの破棄に関する処理が変わっている
- 参照を外してからカメラを削除する必要がある

## キャラの顔が崩れる

- 厚みの無い板にモーションがついているキャラの表示が崩れました
- しばらく放置するとiPhoneが再起動します

- OpenGL ES 2.0のみにする
	- 調査の結果OpenGL ES3.0, Metalでのみ発生
	- 原因はわからないですがOpenGLES2.0のみにした

## DynamicBatchingで落ちる

- iOSのIL2CPPのみでクラッシュします
- ランブルシティでも発生
- 原因がわからないのでとりあえずiOSのみDynamicBatchingをオフ

## CharacterControllerの挙動が変わった

- オブジェクトの当たり判定を変換
	- すべてのSphereColliderをCapsulColliderに変換しました
	- SphereCastしてチェックする方法もありましたができるだけプレイヤーは修正しないようにしました

## LightMapの動的切り替えができない

- LightMapを焼いたシーンでしかLightMapが反映されないため一つのシーン内で
動的にLightMapを差し替えることができない
- 白猫では最初のカットシーンでしかライトマップを使っていないためライトマップを使わないようにしました
- 3Dツール上でライトマップをつけてしまいUnityの機能を使わない方向も検討中

## 新しいバージョンが出るのを待つ

## αアニメーションが反映されない

- Animationｄマテリアルのアルファを操作する際に値が反映されない
- バグリポート済み。修正を待っています。

## IL2CPPでのバイナリサイズ

- 32bitと64bitのユニバーサルでのサイズが大きい
- iOSではストア上でのサイズが100MBを超えるとwifiでしかダウンロードできなくなる

## Unity4.6.4でのサイズ削減

- 4.6.4でのパッチではすでにIL2CPPでビルドしたバイナリサイズ対策が2回入っている

## 現在のステータス

- 3つの問題が解決すればリリース
- カラーアニメーションのバグ
- IL2CPPのバイナリサイズ削減パッチ
- lightmapの方針