Unity2019移行ガイド

先日、オープンベータ版にてUnity2019の対応が始まり、同時にUnity2018からUnity2019への移行手順が公開されました

当記事と同時に、必ず最新の移行手順を公式サイトご確認ください。

2021/10/07 – 推奨Unityバージョンが「2019.4.31f1」へ変更に伴い記事修正。
2021/09/16 – 推奨Unityバージョンが「2019.4.30f1」へ変更に伴い記事修正。
2021/08/02 – 推奨Unityバージョンが「2019.4.29f1」へ変更に伴い記事修正。

プロジェクトのバックアップを取る

まずは、Unity2018で作成していたプロジェクトのバックアップを作ります。
バックアップは必ずしてください。

フォルダごとコピーすることをオススメしますが、容量が肥大化する可能性もあるためストレージの残量に余裕がない方は移行予定のプロジェクトのみコピーします。

UnityHubに Unity2019.4.31f1 をインストールする

インストールするUnityのバージョンは公式サイトに記載があります。

当記事を執筆時点では【Unity2019.4.31f1】となっておりますので、こちらをUnityHubにインストールします。

「Unity Hub」のセクション最下部にある「Click here to install the current version of Unity via Unity Hub」をクリックすると、VRChatが指定するUnityのバージョンがUnity Hubにインストールされます。

「Unity バージョンを加える」というウィンドウがUnity Hubで立ち上がりますので、「Android Build Support」のチェックを入れて右下の「INSTALL」をクリックします。

すると、「インストール」画面で選択したUnityのバージョンのインストールが開始されますのでインストールが終わるまで気長に待ちましょう。

最新のVRCSDKを入手する

「Unity2018で作成されたVRCSDK3-Avatar」のアバタープロジェクトを移行する場合は最新の「VRCSDK3-Avatar」を、「Unity2018で作成されたVRCSDK2」のプロジェクトを移行する場合は最新の「VRCSDK2」をダウンロードしておきます。
公式サイトの「Download」ページからダウンロードできます。

今回は「Unity2018で作成されたVRCSDK3-Avatar」のアバタープロジェクトを移行します。

Unity2018で開いて、最新のVRCSDKを適用する(VRCSDK2またはVRCSDK3-Avatarのみ)

Unity2019で開く前に、移行予定のプロジェクトをUnity2018で開いて、最新のVRCSDKをインポートします。
「VRCSDK3-World」で作成されたワールドデータは、Unity2019へのアップデートが終わった後にVRCSDKをインポートしますのでご注意ください。

「Import Unity Package」のウィンドウが出たら、「Import」でインポートします。

空のSceneを作成する

最新のVRCSDKをインポートしたら、空のシーンを作成します。
UdonSharpを使用している場合は必ずこの手順を踏んでください。

「Project」タブから「Scene」を選択して、新しい空のシーンを作成します。

新しい空のシーン(上図の場合は「New Scene」)を開いて、ヒエラルキー(Hierarchy)に表示されていることを確認してください。

新しい空のシーンを開いた状態で、Unity2018を終了してください。

アバターなどでUnity Clothが使われている場合

アバターのスカートなどで「Unity Cloth」を使用している場合は更に手順が必要になります。

Clothコンポーネントを持つすべてのSkinnedMeshRendererについて、メッシュスロットを見つけ、[プロジェクト]タブを開き、メッシュボックスの白い領域をクリックして、プロジェクトアセットのメッシュを強調表示します。おそらくFBXモデル内のメッシュになります。ハイライトされたメッシュを選択し、Ctrl-Dを押してメッシュアセットを複製します。次に、複製したメッシュをSkinnedMeshRendererのメッシュスロットにドラッグします。

プロジェクトをUnity2019にアップグレードする

いよいよアップグレードを行いますが、途中で絶対にVRCSDKの種類を変更しないでください。
例えば、「VRCSDK2」で作ったプロジェクトをアップグレードの途中で「VRCSDK3-Avatar」などに変更しないでください。

プロジェクトをUnity Hubに追加して開く

Unity2019移行用のコピーしたプロジェクトをUnity Hubに追加します。

「リストに追加」からUnity2019へ移行するプロジェクトを選択し、「フォルダーの選択」をクリックします。

追加したプロジェクトはまだ「Unity2018」と紐づいているため、バージョンのプルダウンからUnity2019のバージョンを選択します。

「Unity バージョン」が「2019.4.31f1」になっていることを確認して、プロジェクトをクリックして開きます。

「プロジェクトを新しいバージョンの Unity にアップグレードしますか?」という確認画面が出ますので、右下の「確認」ボタンを押して操作を続行します。

アセットデータベースのバージョンを2にアップグレードするかどうかを聞かれるので「Yes」を押して続行します。

場合によっては「Windows セキュリティの重要な警告」というウィンドウが出ますので「アクセスを許可する(A)」をクリックして続行します。

「Importing」というプログレスバーが表示され、Unity2019への移行が行われます。
作業が完了するまで気長に待ちます。

人によって画面の配置や配色等が異なる場合がありますが、Unity2019の画面が立ち上がればOKです。

元のシーン(Scene)を開く

ここまでで、特に不具合なく画面が開いた場合は元のシーンを開いて作業可能です。

Questビルド(Androidビルド)のプロジェクトを移行した場合は、いくつか不具合が発生しますので、更に下記の追加の手順を踏んでください。

VRCSDK3-Worldをインポートする(VRCSDK3-Worldのみ)

プロジェクトファイルが「VRCSDK3-World」で作られていた場合は、このタイミングで最新のVRCSDK3-Worldをインポートします。

通常のカスタムパッケージのインポートと同じようにインポートしてください。

Questビルドの場合はライブラリフォルダーを削除する

Questビルドのプロジェクトでは、移行時にエラーが発生する可能性がありますので、エラーが発生していた場合は以下の手順を行ってみてください。

Unity2019を一旦閉じます。
移行手順を行ったUnity2019のプロジェクトフォルダーをエクスプローラーで開きます。

(殆どの場合は「Assets」の次に表示される)「Library」のフォルダーを削除します。

※「Library」フォルダーの削除は、必ずUnity2019で開いた後に行ってください
 絶対にUnityによって2019への移行ビルドが行われる前に削除しないでください。

削除が完了したら、再びUnity2019でプロジェクトを開きます。

そうすると、もう一度アセットデータベースのバージョンを2にするか聞かれるので「Yes」を押して続行します。
もう一度プロジェクトのビルドが入るので、気長に待ちます。

Unity2019が立ち上がって、コンソール(Console)にエラー(赤い警告マーク)が出ていなければ問題ありません。

黄色い警告マークが大量に出ている場合は「Clear」を押してください。
移行に成功している場合はクリア後にはエラーが出ない場合が多いです。
もしクリアした後にエラーが出ている場合はFBXなどにエラーが出ている可能性があります。
(特にシェーダー関係)

VRChatにアップロードする

ここまでくれば、あとはデータをVRChatにアップロードするだけです。

※可能であればBlueprint IDを削除して新規アバターとしてアップデートし、
 Unity2018のデータと分けておくことをオススメします。

「Build & Publish for Windows」を押すと、エラーが出ていなければアップロード画面に移行します。
※Androidビルドで移行した場合、Libraryフォルダーの削除をした場合はWindowsビルドに切り替わります。

※基本的なアップロード方法は従来と変わりませんので、名前や説明を入れて「Upload」を押します。

「Update Complete!」が表示されれば完了です。お疲れ様でした。
Quest対応アップロードなどは従来通り行えますので、こちらを参考にしてください


トラブルシューティング

ここでは移行の際に発生する可能性があるエラーで、確認できている範囲で対処法を掲載します。

Assets\Standard Assets\Utility\SimpleActivatorMenu.cs(11,16): error CS0619: ‘GUIText’ is obsolete: ‘GUIText has been removed. Use UI.Text instead.’

Unity2019では、UI TextとUI Textureのサポートが終了しているためStandard AssetsのUIText関係でエラーが出ます。

「SimpleActivatorMenu.cs」と「ForcedReset.cs」の削除で解決します。
削除しても動作に影響はありません。

Assembly with name ‘VRC.SDKBase.Editor.ShaderStripping’ already exists (Assets/VRCSDK/Dependencies/VRChat/Editor/ShaderStripping/VRC.SDKBase.Editor.ShaderStripping.asmdef)

Assembly with name ‘VRC.SDKBase.Editor.ShaderStripping’ already exists (Assets/VRCSDK/Dependencies/VRChat/Scripts/ShaderStripping/VRC.SDKBase.ShaderStripping.asmdef)

Unitu2018で最新のVRCSDKを適用した際に発生する可能性があります。

それぞれ、エラーが出ている「.asmdef」ファイルを削除することでエラーが解消されます(消しても動作やアップデート問題はありません)。

コンソールに出ているエラーをクリックするとエラーになっている該当のファイルを表示してくれますので、それをDeleteキーか、右クリックから「Delete」を選択して削除します。

削除するか聞かれますが、「Delete」で削除して問題ありません。

Assets\VRCSDK\SDK2\Editor\VRCSdkControlPanelAvatarBuilder2.cs(12,15): error CS0234: The type or namespace name ‘Validation’ does not exist in the namespace ‘VRCSDK2’ (are you missing an assembly reference?)

Unity2019で最新のVRCSDK2をインポートした際に発生する可能性があります。

Consoleに出ている該当のエラーをクリックすると、エラーの出ているファイルをハイライトしてくれますので、「VRCSdkControlPanelAvatarBuilder2.cs」を削除します。

削除後にもう一度VRCSDKをインポートしても問題ありません(再発しません)。

The open scene(s) have been modified externally
The following open scene(s) have been changed on disk:

Scene(シーン)に変更があったけど開き直す?と聞かれています。

「Reload」するとアップロード画面が出ませんので「Ignore」を押します