自動 API アップデーターの使用
Unity 2018.2 へのアップグレード

Unity 2018.3 へのアップグレード

ここでは、Unity の以前のバージョンからアップグレードするときに、既存のプロジェクトに影響を与える可能性のある Unity 2018.3 の変更点を列挙します。


プレハブの改良

  • プレハブは自動的に 新しいプレハブシステム にアップグレードされます。
  • プレハブのネストをサポートするために、プレハブのワークフローが変更されました。プレハブを編集するには、プレハブモードで開く必要があります。Project ウィンドウでプレハブを編集することはできなくなりました。
  • また、ゲームオブジェクトの削除、ゲームオブジェクトの親の変更、または Transform の RectTransform への置き換えなど、プレハブモードで構造的な変更を行うこともできます。その他、プレハブアセットへのリンクを完全に削除して、必要に応じてその結果のゲームオブジェクトそのものを再構築できるようにしたい場合は、プレハブインスタンスを抽出することもできます。プレハブインスタンスを切断することはできなくなりました。
  • プレハブアセットをプレハブモードで編集中の場合、ゲームオブジェクトを作成するエディターは、ObjectFactory.CreateGameObject を使用して、ゲームオブジェクトがプレハブシーン内にあるようにする必要があります。
  • 安全のために、開いているプレハブのスクリプトに [ExecuteInEditMode] 属性がある場合、[ExecuteInEditMode] 属性を持つスクリプトは、再生モードにするとプレハブモードを終了します。このようなスクリプトとプレハブモードに互換性を持たせる方法の詳細については、スクリプトリファレンスの ExecuteInEditMode と新しい ExecuteAlways 属性を参照してください。
  • プレハブはインポートされたアセットとして扱われるようになったため、スクリプトからプレハブアセットに任意の変更を加えることはできなくなりました。代わりに、PrefabUtility.LoadPrefabContentsPrefabUtility.SaveAsPrefabAssetPrefabUtility.UnloadPrefabContents を使用する必要があります。
  • AssetDatabase.AddObjectToAsset を使用してアセットをプレハブに追加する場合は、必要なオブジェクトを追加した後に PrefabUtility.SavePrefabAsset を呼び出す必要があります。

USS flex の短縮表記が CSS 標準に準拠するようになりました

  • USS の flex ディレクティブは、flex-growflex-shrinkflex-basis を表す最大 3 つのパラメーターを受け入れるようになりました。flex-shrink と flex-basis パラメーターはオプショナルです。省略すると、flex-basis のデフォルトは 0 になり、flex-shrink のデフォルトは 1 になります。
  • 2018.3 以前では、flex: Nflex N 0 auto と同等でした。これは現在 flex:N 1 0 と同等にすることで CSS 標準に準ずるにようになりました。古いセマンティックを維持するには、USS ファイル内のすべての flex: N ディレクティブを flex: N 0 auto に置き換える必要があります。

マネージユーザースレッドで未処理の例外の記録をサポート

  • 2018.3 より前のバージョンでは、Unity エディターはマネージユーザースレッドでスローされた未処理の例外を記録しませんでした。2018.3 以降、マネージユーザースレッドでスローされた未処理の例外は Unity エディターコンソールに記録されます。 ログにはすべてのマネージユーザースレッドが含まれるようになったため、プロジェクトで常にスローされていたにもかかわらず、今までコンソールに出力されなかった例外が表示される場合があります。

VFACE シェーダー変数が DirectX (11 & 12) で反転されるようになりました

  • キューブマップにレンダリングする場合、VFACE シェーダー変数は DirectX と他のグラフィックス API の間で一貫していませんでした。今では同じ動作をします。
  • キューブマップをレンダリングするために DirectX シェーダーで VFACE の bool シェーダー変数を使用する場合は、コード内のロジックを反転する必要があります。
  • Issue ID 1027670(英語) を参照してください。

PhysX を 3.3.1 から 3.4.2 へアップグレード

新しいバージョンでは、物理的な動作が変更され、一部のプロジェクトでは動作が異なる場合があります。特に以下の点に注意してください。

  • Persistent Contact Manifold モードで、接触パッチに最大 6 つの接触を加えられるようになりました。これは、以前のバージョンの各パッチに 5 つの接触から増加しました。マニフォールド内のパッチをマージする新しいコードと、接触を選択する新しいコードがあります。衝突は以前よりはるかに正確に表示されるようになりました。接触を特別な処理に依存するプロジェクトは、新しいコードと互換性を持たせるために調整する必要があるかもしれません。たいてい、凸体がメッシュやプリミティブと衝突する場合に、この問題が発生します。
  • 新しいアルゴリズムは現在、Terrain との接触 を計算するために使用されています。以前は特殊なケースでしたが、現在は、MeshCollider で使用されているのと同じ mesh-primitive コードです。堅牢性、正確性、パフォーマンスが優れています。ただし、TerrainData.thickness はサポートされていません。よって、Terrain によるトンネル効果が可能になったことを意味します。これを回避するには、動きの速いオブジェクトに対して継続的な衝突検出を有効にする必要があります。その前に、Terrain の下の TerrainData.thickness よりも厚さがないことが判明した場合、自動的にポップアップされましたが、法線は正しくありませんでした。以前の動作に変更する場合には、Physics 設定の Enable Unified Heightmaps オプションをオフにします。
  • どのような場合でも、負のメッシュスケーリング が直接、メッシュのベイクを発生させることはなくなりました。凹面メッシュはもうベイクされることはありません。ただし、凸状メッシュをベイク処理するには、まだスケーリングが必要です。この変更により、scale.x * scale.y * scale.z < 0 の場合、負のスケーリングはメッシュの法線を反転させます。さらに、スキューやシアーなどの自明でないスケーリングも以前と同様にベイク処理する必要があります。
  • 凸メッシュインフレーション は、推奨されません。なぜなら、入力メッシュのすべての種類の不完全性に対してより寛容な新しい凸包計算アルゴリズム (Quickhull) では必要ないとみられるためです。

AssetBundle.mainAsset プロパティーは廃止されました

  • Unity バージョン 5.0 より前では、ユーザーは AssetBundle.BuildAssetBundle API を使ってアセットバンドルを構築しなければなりませんでした。AssetBundle.BuildAssetBundle API は AssetBundle の mainAsset プロパティーを使ってロードしたあとにオブジェクトを返す必要がありました。
  • AssetBundle.BuildAssetBundle API は Unity 5.0 では廃止予定とされ、AssetBundle.BuildAssetBundles に置き換えられました。これにより、AssetBundle からアセットを取得する方法が変更されました。
  • AssetBundle からコンテンツを取得するには、アセットの名前、または AssetBundle.LoadAsset API の相対パスを取得する必要があります。 AssetBundle の構築や AssetBundle の元からある機能、AssetBundle スクリプトティング API に関することはドキュメントを参照してください。

NavMesh コンポーネントを使ったプロジェクトのアップグレード

プロジェクトを 2018.2 以前から 2018.3b に移行し、それに Unity の GitHub リポジトリから取得した NavMesh コンポーネントを使用する場合は、この ブランチ を使用する必要があります。


パーティクルシステムの不具合の修正

Unity 2018.3 にはパーティクルのバグ修正がいくつか含まれており、これは以前のバージョンで作成されたプロジェクトに影響を与える可能性があります。

  • ビルボードのパーティクルに不均等な Transform スケールを使用すると、Y 軸と Z 軸の反転が発生しました。 この問題は修正されました。
  • メッシュパーティクルに不均等な Transform スケールを使用すると、スケール後に回転が加えられるというバグが存在しました。これは、2017.x との同様のバグで、5.6 以前では正しく動作していました。このバグを修正すると 5.6 以前で作成されたコンテンツは修正されますが、2017.x で作成されたコンテンツを変更してしまいます。
  • Spherical Wind Zone は樹木に対して風を送り、パーティクルに対して引き寄せる真逆の効果をもたらしていました。これは修正されたため、Spherical Wind Zone はパーティクルを引き寄せるのではなく、風を送るようになりました。External Forces Multiplier を無効にする、または Wind Zone の強さを調整することによって以前の挙動に戻すことができます。樹木や Directional Wind Zone を持つシーンは不適切な影響を受ける可能性があるので、Unity が自動的に変更することはありません。

C# コンパイラーを Roslyn にアップグレード

2018.3 より前では、Unity エディターはプロジェクト内の C# ファイルをコンパイルするときに Mono C# コンパイラー (mcs) を使用していました。 2018.3 以降、Roslyn C# コンパイラー (csc) が、新しいスクリプトランタイム (.NET 4.x と同等) を対象としたプロジェクトに使用されています。 Roslyn へ切り替えると、挙動が異なる場合があります。

  • C# 7.3 がサポートされます。
  • 追加の警告が通知されることがあります。
  • Roslyn コンパイラーの応答ファイルは、csc.rsp という名前にします。詳細は プラットフォーム依存コンパイル を参照してください。

UnityScript と Boo スクリプトコンパイラーは廃止されました

UnityScript (.js) と Boo (.boo) スクリプトファイルは、エディタでーコンパイルできなくなりました。

詳細は、2017 年 8 月の ブログ (英語) を参照してください。Unityscript2csharp ツールを使用して UnityScript を C# に変換できます。

自動 API アップデーターの使用
Unity 2018.2 へのアップグレード