Version: 2019.3
言語: 日本語
Upgrading to Unity 2019.1
Unity 2018.2 へのアップグレード

Unity 2018.3 へのアップグレード

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


プレハブの改良

  • プレハブは自動的に 新しいプレハブシステム にアップグレードされます。
  • プレハブのネストをサポートするために、プレハブのワークフローが変更されました。プレハブを編集するには、プレハブモードで開く必要があります。Project ウィンドウでプレハブを編集することはできなくなりました。
  • また、ゲームオブジェクトの削除、ゲームオブジェクトの親の変更、または Transform を RectTransform へ置き換えることなど、プレハブモードで構造的な変更を行うこともできます。その他、プレハブインスタンスからプレハブアセットへのリンクを完全に削除して、必要に応じてその結果のゲームオブジェクトそのものを再構築できるようにしたい場合は、プレハブインスタンスを展開することもできます。プレハブインスタンスを切断することはできなくなりました。
  • プレハブアセットをプレハブモードで編集中の場合、ゲームオブジェクトを作成するエディターは、ObjectFactory.CreateGameObject を使用して、ゲームオブジェクトがプレハブシーン内にあるようにする必要があります。
  • 安全対策として、開いているプレハブのスクリプトに [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 との接触 の計算に使用されるようになりました。Terrain との接触は、以前は特殊なケースとして扱われましたが、現在は、MeshCollider に使用されるのと同じメッシュの基本的なコードが使用されるようになりました。このコードは、堅牢性、正確性、パフォーマンスが優れていますが、TerrainData.thickness をサポートしません。つまり、地面を貫通する効果が可能であるということです。地面の貫通を回避するには、動きの速いオブジェクトに対して継続的な衝突検出を有効にする必要があります。以前は、 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.LoadAsset API の相対パスを取得する必要があります。アセットバンドルの構築や アセットバンドルの機能の利用法、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 Equivalent) を対象としたプロジェクトに使用されています。 Roslyn へ切り替えると、動作が異なる場合があります。

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

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

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

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


Animator のルートモーションの再生方法の変更

Animator のルートモーションの再生方法が少し変更され、Animation ウィンドウでルートモーションアニメーションを作成する際の不具合を修正しました。

ルートモーションカーブをアニメーションクリップ用に生成する必要がなくなりました。 ルートモーションのアプリケーションは、Animator.applyRootMotion のみに依存するようになりました。

2018.2 と 2018.3 の対応表

ケース ルートモーション生成 Animator.applyRootMotion 2018.2 2018.3
A はい はい ルートの Transform に累積的にルートモーションを適用します。 2018.2 と同様
B いいえ いいえ アニメーションクリップで編集したように、位置、回転、スケールのカーブを適用します。 2018.2 と同様
C* はい いいえ ルート Transform の移動はありません。 アニメーションクリップで編集したように、位置、回転、スケールのカーブを適用します。
D* いいえ はい ルート Transform の移動はありません。 ルートの Transform に累積的にルートモーションを適用します。

ケース C と D の場合、2018.3 で同じ結果を得るには、OnAnimatorMove を実装します。次に、ルートモーションを適用しない場合は Animator.deltaPositionAnimator.deltaRotation を破棄してください。

プロジェクトで applyRootMotion を使用してルート Transform の位置、回転、スケールアニメーションをミュートにする場合は、ルートの Transform プロパティを手動でオーバーライドする必要があります。

Upgrading to Unity 2019.1
Unity 2018.2 へのアップグレード