コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】プロジェクトをUnity4.6からUnity5.2に移行した時に知ったこと

この記事はUnity Advent Calendar 2015の12日目の記事になります。
昨日は@Ijoruさんの「Unity UIでページやダイアログごとにシーンを分離する実装パターン」でした

今回は開発中のUnityプロジェクトをUnity 4.6からUnity 5.2に移行した時に
対応したことや知ったことを書き残しておきます

BuildTarget列挙型の変更

  • BuildTarget.iPhoneBuildTarget.iOSに変更されたので
    この列挙値を使用している箇所は置換が必要

NGUIのUIPanelが自動で動く

  • ゲーム起動後にNGUIのUIPanelが落下したり画面奥に倒れる不具合が発生
  • UIPanelにアタッチされているRigidbody
    下記のパラメータを設定することで修正できた
    • Use Gravityをオフにする
    • Is Kinematicをオンにする

アセットバンドル周り

  • Unity 4.6のAPIで作成したアセットバンドルは
    Unity 5.2のプロジェクトで読み込むことができない
  • WWW.LoadFromCacheOrDownLoadの引数が変更された
// Unity 4.6
WWW.LoadFromCacheOrDownLoad( url, version, crc )
// Unity 5.2
WWW.LoadFromCacheOrDownLoad( url, hash, crc )
  • アセット読み込み時にファイルの拡張子の指定が必要になった
  • アセットバンドルからNGUIのUIAtlasを取得するためには
    GetComponentを使用する
// 失敗
var atlas = assetBundle.LoadAsset<UIAtlas>("xxx.prefab");
// 成功
var atlas = assetBundle.LoadAsset<GameObject>("xxx.prefab").GetComponent<UIAtlas>();

シーンファイル周り

  • Unity 5.2で保存したシーンファイルをUnity 4.6で開くことはできない
    • 無名のオブジェクトが作成されていたり参照が剥がれていたりする

iOS実機でエラー発生後に強制終了

  • Xcodeで確認したところ下記のエラーログが出力されていた
could not produce class with id 64
  • 下記の手順で修正できた
    1. Unityの「File>Build Settings...」を選択する
    2. 「Platform」で「iOS」を選択して「Player Settings...」を選択する
    3. 「Strip Engine Code*」をオフにする
  • このオプションのせいでゲームで使用しているクラスが除外されてしまっていた模様

その他の移行時に知ったネタ

  • Awakeよりも早いタイミングでオブジェクトが非アクティブにされていると
    そのオブジェクトがHierarchyから消える?
  • NGUIのUISprite.atlasOnDestroyの時に
    nullを代入しないと残り続ける