5.4 ネットワーク API の変更
Unity 5.2 アップグレード ガイド

Unity 5.3 アップグレードガイド

グローバルイルミネーション

Lightmap Snapshot は、Lighting Data アセットに改名されました。ライティングデータの内部フォーマットは Enlighten 3にアップグレードした後に変更されました。Unity の旧バージョンからスナップショットのサポートはすでに終了しており、再度ベイクする必要があります。

これも realtime GI でストリームされたシーンの AssetBundle にも影響を及ぼします。ライトマップデータは読み込まれません。したがって、そのようなバンドルも再度ビルドが必要です。

ライトプローブや環境光(environment lighting)は、ガンマとリニアカラースペースで一致するようになりました。Unity 5.2 と比較すると環境光に若干の違いが予想されます。Unity のライトプロジェクションコードが L2 係数を生成して出力値 L1 のみを導くので、出力値は Unity 4.x の強度(intensity wise)に一致し、最終的なライトプローブの減衰が明らかに異なります。ライトプローブの L2 は今後のリリースでサポートされる予定です。非重要な Directional ライトは、4.x.に一致するようになりました。 ライトプローブは、リニアカラースペースで常にシェーダーに渡され、最終的なガンマ変換が GPU 上で発生します。シェーダーで球面調和を評価するのに Unity の Shade SHxxx 関数を使用する場合、あなたのシェーダーを変更する必要はありません。UNITY_STANDARD_SIMPLE シェーダーでは、SH の評価がピクセルと頂点シェーダーの間で分割されていないので、頂点シェーダーでのみ一度だけ発生するガンマ変換にリニアを制限します。

パーティクルシステム( Shuriken )

Collision Module のパーティクルサイズは、新しいパラメーター(Radius Scale)に置き換えられました。この新しいパラーターは、実際のパーティクルのサイズで乗算されて動作します。パーティクルサイズの近似値を求める以外に何かを実行するのに、古い値を使用した場合、新しいパラメーターを使用して衝突境界(Collision Bounds)を再設定する必要があります。

マルチシーンエディティング(Multi Scene Editing)

マルチシーンエディティング(Multi Scene Editing)の機能が EditorSceneManager と SceneManager を通じて、 新しい API として導入されます。つまり、EditorApplication と Application にある多くの API が廃止されたことを意味します。

  • EditorApplication.NewScene
  • EditorApplication.NewEmptyScene
  • EditorApplication.OpenScene
  • EditorApplication.OpenSceneAdditive
  • EditorApplication.SaveScene
  • EditorApplication.SaveCurrentSceneIfUserWantsTo
  • EditorApplication.SaveCurrentSceneIfUserWantsToForce

上記のすべてが EditorSceneManager に同等の API があります。

  • EditorApplication.currentScene

内部的に、これは Scene Manager でアクティブなシーン名を返しますが、現在開いているすべてのシーンを取得するために EditorSceneManager API を使用します。

  • EditorApplication.MarkSceneDirty
  • EditorApplication.MarkSceneDirty

シーンごとに、シーン自体のダーティフラグを設定します。Editor Scene Manager を通じてシーンを取得し、それらの状態をチェックしてください。シーンをダーティに設定することも EditorSceneManage を通じて行われます。廃止される可能性のある API はすべてアクティブシーンのみで動作します。

  • Application.LoadLevel
  • Application.LoadLevelAsync
  • Application.LoadLevelAdditive
  • Application.LoadLevelAdditiveAsync

Application.LoadLevel[Async](path)は、SceneManager.LoadScene[Async](path, false)にリダイレクトし、Application.LoadLevelAdditive[Async](path) は、SceneManager.LoadScene[Async](path, true) にリダイレクトします。

  • Application.loadedLevel
  • Application.loadedLevelName

これらは、各自アクティブなシーン名とアクティブなシーンのビルド設定のインデックス値を取得します。読み込まれている全シーンのインデックス値と名前を取得するために SceneManager を利用する必要があります。

EditorApplication.OpenSceneAdditive は、再生中に Editor で呼び出すことができません。それは、また [PostprocessScene] コールバックからも同様に呼び出すことができません。とにかく、再生中 EditorApplication.OpenSceneAdditive が呼び出された場合、再生モードは停止します。

プリコンパイル済シェーダーアセット

事前にコンパイルされたシェーダーアセットはすでにサポート対応が終了しています。これは、“show compiled code” を表示することができなくなり、新しいシェーダーアセットに逆アセンブルの結果を生じます。事前にコンパイルされた古いシェーダーアセットは無効として示されます。

Inspector 内のシェーダーで、まだ “show compiled code” ボタンは動作し、各プラットフォーム上でシェーダーの逆アセンブルと表示されます。

同様に、サーフェスシェーダーの生成されたコードをインスペクターでまだ見ることも修正することもできます。また、あなたが修正するのは HLSL ソースのみなので、それを新しいシェーダーアセットにコピーすることができます。

これは Unity の旧バージョンに組み込まれた AssetBundles に影響を及ぼし、定義によって、それらの内部にシェーダーアセットがコンパイルされました。このようなバンドル内のシェーダーはどれもリビルドする必要があります。

詳細は、こちら今後サポート廃止予定の機能について Unity のブログ投稿を参照してください。

デスクトップサポートの OpenGL 4.x

新しい特徴としては、テッセレーション(Tessellation)とジオメトリシェーダー (GS)などのような機能を持つ OpenGL 3.x と4.x を使用することができる新 GLバックエンドを新たにサポートしております。しかし、Apple は最大限でも4.1の OS X デスクトップ上OpenGL バージョンを制限するので、すべての DirectX 11の機能(Unordered Access Views や Compute Shader など)をサポートしていません。これは、Shader Level 5.0をターゲットにするように設定されているすべてのシェーダーが OS X 上で読み込みに失敗することを意味します。

したがって、新しいシェーダーの対象レベルを導入:#pragma target gl4.1. この対象レベルは、少なくともデスクトップ上で OpenGL 4.1 や DirectX 11.0 Shader Level 5、あるいは、モバイル向けで OpenGL ES 3.1 + Android Extension Pack が必要です。

アセットバンドル

AssetBundle のコンテナフォーマットでは、新しい LZ4 圧縮をサポートし、さらなる改善の基礎となるのに変更されました。早期バージョン(2.x, 3.x)で作成されたバンドルのサポートは廃止されます。 Unity 4.x, 5.0–5.2 で作成されたバンドルはサポートされており、読み込むことが可能です。しかし、すでに WWW.LoadFromCacheOrDownload の方法を利用するユーザーデバイス上でキャッシュされた場合、再ダウンロードします。また、そのようなバンドルのデータは予告なしに変更される場合があることを考慮に入れてください(例えば、Global Illumination セクションを参照)。

GetComponent(s)InChildren

GetComponentsInChildren を呼び出しているゲームオブジェクト上で親が非アクティブの場合、わずかに変更された Behaviour が無効/非アクティブになったときに呼び出されます。以前は、常に結果として空の配列を取得していたと思います。なぜなら、それはあなたが望むものではなく、GetComponentsInChildren がプレハブ上で動作しなかったためであることを意味します。これは対象のゲームオブジェクトの親要素からすべての有効/アクティブな状態を無視するために変更しました。さらに、単数形バージョンの GetComponentInChildren() 引数は、オプションで includeInactive 引数を持っています。

UI/デフォルト シェーダー

新しい非 UI オブジェクトで新しい UI シェーダーをデフォルトで使用することは、デフォルトによるサポートを終了しました。パフォーマンス上の理由から ‘if’ チェックが削除されたことを除けば、以前は _clipRect が使う必要があるかどうかを決めるために ‘if’ チェックがありました。新しい非 UI オブジェクトの使用を継続するには、あなた自身で有効の clipRect を指定する必要があります。

ポイント/スポットライトを利用したシャドウキャスティング

シャドウイングによるアーティファクト(シャドウイング対シャドウアクネの下で)のバランス調整を保つことができる、かつ、シャドウをキャストするために選択されるポイントライトは Bias スライダーの働きがあります。何も実行しない前に Bias 設定を行った場合、既存のポイントライトが影響を与え始めシャドウキャスティングの振る舞いを変更することを意味します。

シャドウをキャストするスポットライトでは、近くをクリッピングする距離(near clip distance)が選択可能な新しいスライダー機能を持ちます。これは、オブジェクトがシャドウをキャストしないライトまでの距離です。シャドウの精度の大幅な低下を犠牲にして、低い値に設定することで、すぐ近くのオブジェクトを含めます。Unity の旧バージョンについては、これはライトの総範囲の4%で計算されており、大きな光源(ライト)にはあまりにも値が高すぎる可能性があります。デフォルトでは、ほとんどの場合で動作する値の0.2で設定されます。

Quaternion Mathematics(クォータニオン)

インポーターのオイラー角アニメーション対応やすべての回転順番対応とともに、従来のバージョンでも SIMD バージョンでも QuaternionToEuler と EulerToQuaternion の数学関数のリライトを必要としました。これらの新しいバリエーションは、まだ API で利用できません。今のところ内部で使用されているだけです。

これは、ごくわずかなインパクトしか許容できませんが、旧バージョンと新バージョンの間の結果でジンバルロック状況にかなり近い場合のみわずかな差異(<0.01度)があります。テストの実行で、ほとんどの場合より正確になることが新しいバージョンで示されており、平均誤差は小さくなり、少なくとも10倍は精度が良くなることが分かりました。

JointDriveMode フラグ

JointDriveMode のフラグのサポートは終了しましたので現在削除されています。しかし、Unity の旧バージョンでは、それらは誤って設定可能なジョイントの Drive の剛性と回転制限のダンピング設定を無視するために使用されていました。Configurable Joint に使用する Unity 5.3にプロジェクトをアップグレードする場合、無効な(間違った)古い JointDriveMode のフラグにより設定が無視されていたので、ユーザーはこれらの設定が以前の設定でなかった効果を持つ場合があることを認識しておくべきです。

旧ライト アニメーション

5.3 の時点で、既存、新規にかかわらず、旧 Animations では、Light プロパティーをアニメーション化できなくなりました。ライトの根本的なデータ構造の変更によって、古いものと互換性がなくなったためです。適切に Light プロパティーをアニメーション化するには、Animator Component を使用してください。

エディター拡張(Editor Extensions)

シーンのダーティフラグが、シーンを保存するとき使用されるようになりました。エディターの拡張機能でダーティフラグを正しく設定しないと、データを適切に保存できない場合があります。オブジェクトが変わろうとしていること、それに応じてシーンのダーティフラグをアップデートすることを記録する Undo.RecordObject を使用するか、または、シーン全体を強制的にダーティーとしてマークする EditorSceneManager.MarkSceneDirty を使用してください。

Camera Depth Texture シェーダー変数

_CameraDepthTexture のシェーダー変数は、以前行われていた、いずれかのカメラでレンダリングされた最後のデプステクスチャを参照する方法ではなく、常にプライマリーカメラのデプステクスチャを参照するように修正されています。スクリプトでプライマリー以外のカメラをレンダリングする場合、例えば、Half 解像度のデプスバッファを取得しそのデプステクスチャをバインドする必要があるときは、カメラが最後にレンダリングしたデプステクスチャを参照するセマンティクスをもつ _LastCameraDepthTexture 変数を使用する必用があります。

ComputeBuffers

自動変換の OpenGL シェーダーの ComputeBuffer のデータレイアウトが DirectX ComputeBuffer のレイアウトに一致するように変更されました。OpenGL で ComputeBuffer を使用する場合は、データを以前の OpenGL に特化したレイアウトルールに合わせようと調整するコードを削除するようにしてください。詳細は コンピュートシェーダー を参照してください。

5.4 ネットワーク API の変更
Unity 5.2 アップグレード ガイド