【2020/04版】初心者がVRChatのアバターアップロードでつまづいたところ

突然競プロと関係ない記事を書いている・・・
しかしコケまくったので書いておいた方がいいと思った。

# ユーザーのトラストレベルがNewUserになったので

VRChatのユーザートラストレベルがNewUserになったので、アバターのアップロードを試してみました。Unityを触るのが初めてなので手探りでやります。

## 前提環境

|ソフト |バージョン |備考 |
|:--|:--|:--|
|VRChat   |2020.1.1   |2020/04現在の最新Ver   |
|Unity   |2018.4.20f1   |VRChatの指定Ver   |
|VRChatSDK|-|つまづきポイントで説明|

## この時点で参考にしたサイト

[アバターの作成 - VRchat 日本wiki](https://vrchatjp.playing.wiki/d/%a5%a2%a5%d0%a5%bf%a1%bc%a4%ce%ba%ee%c0%ae)

このサイトに従ってUnityHubとUnityをダウンロードします。
アバター配布用ファイルには導入方法が説明されているものもありますが、この方法でやってもアバター配布時のソフトウェアバージョンと現在のバージョンの違いでうまくいかないようです。


# つまづきポイント
というわけでつまづきポイントの解説です。

## 1.VRChatSDKが2種類ある

現在、VRChatSDKには、

- VRCHAT SDK2
- VRCHAT SDK3 + UDON [LIVE ALPHA]

の2種類があります。新しい方がいいだろうと思ってSDK3を使用したくなりますが、SDK2と互換性がなく、多くのVRChat用アバターがSDK2を前提に製作されています。
配布アバターの指定がない限り、SDK2を使用します。

## 2.buildボタンが押せない

VRChat用アバターは、prefabを配置して「build & Publish」ボタンを押せばいいようになっていますが、グレーアウトして押せないのではないでしょうか？押せない人は以下の画像ような状態になっていると思います。押せる人はスキップしてください。
![mipmap error](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/472506/2d7b29da-f779-a4ce-5dc4-078e79dbed3a.png)

`This avatar has mipmapped textures without 'Streaming Mip Maps' enabled.`
という赤いアイコンのエラーが出ていると思います。翻訳サイトを通すと、「このアバターは、『Streaming Mip Maps』が有効になっていない状態でミップマップされたテクスチャを使用しています。」となっています。

この問題の解消には、以下のサイトを参考にしました。

[【VRChat】VRChatやUnityのアップデートの影響で従来通りアップロードできなくなった場合｜Minuet_Doll｜note](https://note.com/minuet_doll/n/ne16c3ea79548)

対処法は、エラーが出ている個所の「Select」を押すと、Streaming Mip Mapが有効になっていないテクスチャが選択されるので、チェックボックスにチェックしてApply(適用)してください。「Auto Fix」ボタンで直しても大丈夫だと思います。

## 3.buildがコケる

これで「build & Publish」ボタンが押せるようになったと思います。ならなかったらごめんなさい。違う理由があるかもしれません。
押せるようになったという前提で進めます。buildボタンを押します。
下部ステータスバーに「！`FileNotFoundException:`～」と表示された場合はbuildが失敗しています。
下部のコンソールを開いてみましょう。

![build failed](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/472506/c6abda5c-8201-68f0-6220-51cd949c5ead.png)

複数回 `You are trying to replace or create a prefab from the instance 'インスタンス名' that references a missing script. This is not allowed. Please change the script or remove it from the game object.` というエラーが出た挙句に、`FileNotFoundException`で終了していると思います。

この問題の解消には、以下のサイトを参考にしました。

[You are trying to replace or create a prefab from the instance 'hoge' that references a missing script. This is not allowed. Please change the script or remove it from the game object.のエラーが出た](https://qiita.com/tan5o/items/804dae8e42858de27a8a)

エラーが出ているインスタンスを開くと、「該当するスクリプトがありません。コンパイルエラーがある場合は修正し、有効なスクリプトを指定してください。」となっているScriptが出てきます。

![Script](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/472506/109063b4-cdc6-1056-9879-a2f86942eae1.png)


指定するスクリプトが思いつかないので、歯車マークから「コンポーネントの削除」で削除します。エラーが出ている分削除したら、再度buildします。成功してPublish設定画面に移行すると思います。しなかったらごめんな（

### 原因の推測

説明文書を読んでみると、髪などを揺らしたい場合はDynamic Bone(Unity Storeの有料アセット)を入れてください、と書いてあります。また、エラーになっている個所は髪やスカートなどの揺れそうなものでした。よって、Dynamic Boneがない場合、Scriptが読み込めないのでbuildできなかったと考えられます。
これについての説明がないので、UnityかVRChatSDKの更新によってエラーが出るようになったと思われます。

･･････よく読んだら、つまづきポイント2の参考にしたサイトのケース3に同様の事が書いてありました。
というわけでこれが原因のようです。
Dynamic Boneを買ったらアバターを作成し直しましょう。

# 最後に

普段コンパイラとかモデリングツールとかを使わない人には対処が難しいのではないしょうか？ちょっとアバターを上げたい人にとっては敷居が高いと思います。
SEED ONLINE(バーチャルキャストなどのVRM形式データのコンテンツロッカー)から条件を満たしたもの（作者が許可を出したもの）をVRChatに直接コンバート＆Publishできるような仕組みが欲しいです。