Raspberlyのブログ

Raspberlyのブログ

Unityネタをメインとした技術系ブログです。にゃんこ大戦争や日常なども。そろそろブログタイトル決めたい

Unity2019.2までのLWRPプロジェクトをUnity2019.3以降のURPにアップグレードする方法

 

今回はUnity2019.2までに作成したLWRPプロジェクトを、
URPプロジェクトにアップグレードする方法について紹介します。

f:id:Raspberly:20191108020650p:plain

 

 

アップグレードガイド

参考にした資料です。というよりもこちらの和訳記事となります。

docs.google.com

 

 

 

LWRPからURPへ

従来のビルトインと比べ軽量高速なレンダーパイプラインとして登場したLightweightRPですが、
Unity2019.3からUniversalRPへ名称が変わりました。

blogs.unity3d.com

将来的にはUnityデフォルトのパイプラインになる予定です。

 

※本記事ではLightweightRPをLWRPUniversalRPをURPと略称させていただきます。

 

 

 

 

開発環境

移行元プロジェクト

Unity2019.2.9f1
LWRP 6.9.2

移行先プロジェクト

Unity2019.3.0b
URP 7.1.2

 

 

 

 

 

アップグレード手順

簡単な手順でアップグレードできます。
LWRPで作成されたカスタムシェーダーやエフェクトは自動的にアップグレードされますが、
カスタムシェーダー内でShader.FindまたはUsePassを使用している場合は手動で修正する必要があります。

 

 

 

更新する前に

プロジェクトでアセンブリ定義ファイル(ASMDef)を使用している場合は、
グローバルに一意のID(GUID)を使用するようにファイルを変更します。

f:id:Raspberly:20191108012005p:plain
これは、URPがASMDefs文字列名の代わりにGUIDを使用するためです。
Unityは文字列名を自動的にアップグレードしますが、
将来の校正のためにプロジェクトでGUIDを使用することが勧められています。

docs.unity3d.com

 

 

 

 

 

アップグレードプロセス

Unity EditorのPackage Managerには、LWRPバージョン7.0.0が含まれています。
このシェルパッケージを使用すると、プロジェクトをLWRP 7.0.0に更新できるため、プロジェクトは暗黙的にUniversal RP 7.0.0を使用します。

 

プロジェクトをUnity2019.3以降で開く

アップグレードプロセスを開始するには、
Unity 2019.3以降でアップグレードするプロジェクトを開きます。

f:id:Raspberly:20191108013143g:plain

 

この時、このようなメッセージが表示されることがあります。

f:id:Raspberly:20191108013707p:plain

Unity2019.3からアセットインポートパイプラインが2にバージョンアップされますが、
従来のバージョン1は非推薦となるためアップグレードしますか?というお誘いのメッセージです。


ここではYesにしておきます。
Yesにするとアセットが再インポートされるのでアセットがたくさん入っているプロジェクトですと時間がかかるかもしれません。
ちなみにProjectSettingsから、いつでもバージョン1に戻せます。

 

パッケージマネージャーからアップデート

[ウィンドウ]> [パッケージマネージャー]> [Lightweight RP]メニューに移動します。
7.0.0以上に更新をクリックします。

f:id:Raspberly:20191108014841p:plain

Unityスクリプトアップデーターがすぐに実行され、以下を含むクラスが自動的にアップグレードされます。

 ・プロジェクトの名前空間/クラスの名前変更。
・ASMDefs文字列を新しいURP標準に再マッピング。(必要なら)

アップデータが終了すると、すべてのスクリプトが正しくコンパイルされます。

 

 

シェーダー検索パスをアップグレードする

LWRPプロジェクト内で「Shader.Find」を使用してLWRPシェーダーを検索している場合、
検索パスを「Lightweight」から「Universal」に変更する必要があります。

 

※私自身シェーダーにはあまり詳しくないのでこの辺は簡単に

カスタムシェーダーのアップグレード

タグをアップグレードする

URPは独自のスクリプトタグを使用します。独自のシェーダーを作成している場合、Unityは内部エイリアスを使用するため、URPプロジェクトでLWRPの「LightMode」タグは引き続き機能します。
ただし、プロジェクトの将来に備えてこれらのタグを手動で変更する必要があります。
Lightweight2D」タグを「Universal2D」に変更します。
LightweightForward」タグを「UniversalForward」に変更します。

↓多分こんな感じ?

        Pass
        {
            //Tags{ "LightMode" = "LightweightForward" }
            Tags{ "LightMode" = "UniversalForward" }
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

シェーダー名/クラスをアップグレードする

次のシェーダー名/クラスはURP向けに変更されているため、これらを手動で変更する必要があります。
UsePass "Lightweight Render Pipeline / ..."はUsePass "Universal Render Pipeline / ..."になります。
UnityEditor.Rendering.LWRP.xxx」は「UnityEditor.Rendering.Universal.xxx」になります。

インクルードパスのアップグレード

URPは、LWRPとは異なるインクルードパスを使用します。
LWRP 7.0.0には転送インクルードが含まれているため、カスタムシェーダーが破損することはありません。
ただし、URP 7.0.0には転送インクルードが含まれていないため、アップグレード時にタグを手動で変更する必要があります。
 「#include "Packages / com.unity.render-pipelines.lightweight / xxx"」は
#include "Packages / com.unity.render-pipelines.universal / xxx"」になります。

 

 

 

 

LWRP依存関係の削除

Unity2019.3でプロジェクトを開いたときにLWRPを7.0にアップデートしましたが、
このLWRPをURPに置き換えます

URPのインストール

LWRP 7.0.0をURP 7.0.0に置き換えるには:
[ウィンドウ]> [パッケージマネージャー]メニューに移動します。
[ユニバーサルRP]をクリックしてURPをインストールし、
[パッケージマネージャー]ウィンドウの右下にある[インストール]をクリックします。

f:id:Raspberly:20191108015525p:plain

私の場合ですと最初からインストール?されていました。

 

LWRPのアンインストール

[Lightweight RP]をクリックしてLWRPをアンインストールし、[パッケージマネージャー]ウィンドウの右下にある[削除]をクリックします。

f:id:Raspberly:20191108015753p:plain
これにより、プロジェクトからLWRPパッケージが完全に削除されます。インクルードパスを変更しなかった場合は、ここで変更する必要があります。

 

 

なぜかURPもアンインストールされる

上でLWRPをアンインストールすると、なぜかインストール済みのURPもアンインストールされました。

当然シェーダーエラーでピンクになります。

f:id:Raspberly:20191108020109p:plain

そのため再度URPをインストールしましょう。

f:id:Raspberly:20191108020305p:plain


すると無事表示されました。

f:id:Raspberly:20191108020419p:plain

これでLWRPからURPへのアップグレードは完了です。



 

まとめ

アップグレードはパッケージマネージャからURPをインストールするだけ。
この時LWRPはアンインストールしましょう。
カスタムシェーダーを使っている場合は修正が発生する場合がある。

 

 

 

参考資料

light11.hatenadiary.com

raspberly.hateblo.jp

bibinbaleo.hatenablog.com

tips.hecomi.com

 

 

 

 

 間違っている箇所がありましたらコメントなどにお気軽にどうぞ!