もくじ
先日、オープンベータ版にて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」を押します。