4
1

UbuntuのvpmがUnityを認識してくれない!

Last updated at Posted at 2024-03-10

ある日...

無事New Userなれたしアバター改変に向けてVRCSDKのセットアップの仕方を学ぶぞ〜
早速公式に従ってCreator Companionを...って窓しか対応してないやん(半ギレ)
(参考記事:【VRChat】VCCをCLIで使う。)
よーしこれであとはvpm check unityで認識するか確認...

[18:45:51 INF] Found No Supported Editors
[18:45:51 INF] Unity is not installed.

...はぁ?いやUnity 2022.3.6f1(当時ぶいちゃが要求してたバージョン)バッチリ入ってますが?~/.local/share/VRChatCreatorCompanion/settings.jsonpathToUnityExeにもしっかり書きましたが?
ふざけんなぁぁぁぁぁぁぁぁぁぁ(魂の叫び)

概要

...なんて事があったので試しにggってみたところ、どうもmacOSLinuxで同じ事が起きてると言うissueを発見。
その中で後者のissueにどうやって思いついたのか分からん解決方法が載ってたのでそれを日本語にする(+α)だけの雑な記事です。
VRChat日本Linux勢の助けになったら幸いです...

(2024/05/23追記)
実はAvatar Optimizerの作者(anatawa12氏)がVCC代替のALCOMを出しているので今はこれを使うのがいっちゃん楽だったりします。
以下、ALCOMを知る前の記事なので使えはしますけどこんなんやらんでもALCOM使えば済むのでご注意を。

(2024/05/25追記)
いつの間にかVRChatが要求するUnity 2022のバージョンが2022.3.22f1に上がってたので更新しました。

解決方法

結論から言うと、以下のスクリプトを実行するしてvpmの設定を少しいじる(3/21追記)だけです(あら簡単)
(なんかスクリプト実行と設定いじりはセットだったみたいなので修正)

#r "nuget: LiteDB, 5.0.19"
using LiteDB;
using System;
using System.IO;

var user = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);

// ↓こっからUnityのインストール先
var unity2019 = $"{user}/Unity/Hub/Editor/2019.4.31f1/Editor/Unity";
var unity2022_3_6 = $"{user}/Unity/Hub/Editor/2022.3.6f1/Editor/Unity";
var unity2022_3_22 = $"{user}/Unity/Hub/Editor/2022.3.22f1/Editor/Unity";
// ↑適宜変更してちょ

var isUnity2019Installed = File.Exists(unity2019);
var isUnity2022_3_6Installed = File.Exists(unity2022_3_6);
var isUnity2022_3_22Installed = File.Exists(unity2022_3_22);

var dataHome = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
var connect = new ConnectionString(dataHome + "/VRChatCreatorCompanion/vcc.liteDb");

using(var db = new LiteDatabase(connect)) {
    if(isUnity2022_3_22Installed) {
        db.GetCollection("unityVersions").Insert(new BsonDocument() {
            { "Path", unity2022_3_22 },
            { "Version", "2022.3.22f1" },
            { "LoadedFromHub", false }
        });
    }
    if(isUnity2022_3_6Installed) {
        db.GetCollection("unityVersions").Insert(new BsonDocument() {
            { "Path", unity2022_3_6 },
            { "Version", "2022.3.6f1" },
            { "LoadedFromHub", false }
        });
    }
    if(isUnity2019Installed) {
        db.GetCollection("unityVersions").Insert(new BsonDocument() {
            { "Path", unity2019 },
            { "Version", "2019.4.31f1" },
            { "LoadedFromHub", false }
        });
    }
}

あ、ちゃんとUnityのインスコ先は適宜変更してくださいね。Unity Hubから入れてればそのまま使えるはずですが。
あと元のスクリプトには何故かLiteDBのusingが抜けていたので修正。これのせいで数十分無駄にした。
さて、どう見てもこれはC#であってスクリプトっぽくないですね。
しかし、dotnet-scriptなるツールによりこのトップレベルにベタ書きされてるC#のコードをスクリプトの様にその場で実行できてしまうのです。
というわけでまず.NETとdotnet-scriptをインストールしましょう。

.NET

vpmを使っているのであればそもそも.NET 6のランタイムが入ってるはずなので(というか無いと動かん)大丈夫だとは思いますが一応。
Ubuntuの場合は公式リポジトリに最新版しか置かれてないので.NET公式PPAを追加しましょう。あとはdotnet-runtime-6.0をインスコするだけです。

$ sudo add-apt-repository ppa:dotnet/backports
$ sudo apt install dotnet-runtime-6.0

dotnet-script

これはdotnetコマンドからインストールします。ツールの導入が1行で完結するのは便利ですね。

$ dotnet tool install -g dotnet-script

スクリプトの実行

ここまで来ると次の1行叩くだけでスクリプトを実行できるようになります。

$ dotnet script SCRIPT_FILE

先程のスクリプトファイルを適当なファイル(suffixは.csxみたいですね)に突っ込んでそのパスをSCRIPT_FILEに入れてやれば動きます。

設定ファイルの編集(3/21追記)

vpm(というかディレクトリ名的にVCC)の設定はデフォルトで~/.local/share/VRChatCreatorCompanion/settings.jsonに(多分)置いてあるので各自vimでもgeditでも使って開いて、

"pathToUnityExe": "",

"pathToUnityExe": "/home/USER_NAME/Unity/Hub/Editor/2022.3.22f1/Editor/Unity",

にしたり(こっちはいらないかも)、

"preferredUnityEditors": {},

"preferredUnityEditors": {
  "2019": "/home/USER_NAME/Unity/Hub/Editor/2019.4.31f1/Editor/Unity",
  "2022": "/home/USER_NAME/Unity/Hub/Editor/2022.3.22f1/Editor/Unity"
},

にしたりして保存すればヨシッ!

結果

[20:48:39 INF] Unity is installed.

キタ———(゜∀゜)———— !!(死語)
データベース書き換えるとか、何喰ったら思いつくんだろ...
ともかく、先駆者兄貴には頭が上がりませんね...
それでは、またいつか。

4
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1