📦

UnityCustomPackageを更新できるようにする

2021/03/07に公開

以前Unity Custom PackageをGithub経由で配布で作成したカスタムパッケージを更新する方法を書きます。

方法としてはPackagesフォルダ下のpackages-lock.jsonの該当パッケージ記載箇所を削除したうえでUnityエディタを再起動すればパッケージ配布側(Githubのリポジトリ)が更新されていれば再読み込みが走り更新されます。

配布側を更新する

以前Unity Custom PackageをGithub経由で配布で作成したPackages/Testフォルダ下のpackage.jsonのバージョン番号を0.1.0から0.1.1に更新します。
その他スクリプトやCHANGELOG.mdなどパッケージ内容を必要に応じてアップデートしてGithubにプッシュします。

メニューからpackages-lock.jsonを消せるようにする

下記のスクリプトをカスタムパッケージインポートしているプロジェクト内Assets/Editor内に作成する。

  • Editorフォルダ下にスクリプト(CustomPackageUpdater.cs)を作成

  • 1で作成したスクリプトを編集する

using System.Diagnostics;
using System.IO;
using System.Text.RegularExpressions;
using UnityEditor;
using UnityEngine;

public class CustomPackageUpdater : MonoBehaviour
{
    [MenuItem("CustomPackage/UpdateCustomPackage")]
    static void UpdateLochFile()
    {
        string lockFilePath = Path.GetFullPath("Packages/packages-lock.json");
        string allText = File.ReadAllText(lockFilePath);

        Regex reg = new Regex("\"com.nakashun..+?},.+?},.", RegexOptions.Singleline);
        Match match = reg.Match(allText);
        if (match.Success == true)
        {
            UnityEngine.Debug.Log(match.Value);
            allText = reg.Replace(allText, "");
            File.WriteAllText(lockFilePath, allText);
            // Process.Start(EditorApplication.applicationPath);
            // EditorApplication.Exit(0);
        }
    }
}

ここでやっていることはPackages/packages-lock.jsonの内容の該当箇所が下記のようになっているのでその項目を正規表現で見つけて削除しています。
正規表現の中で該当箇所が各々のパッケージの作成方法で変わってくるのでjsonの中身を見てそれぞれ合わせる必要があります

{
  "dependencies": {
    "com.nakashun.custom_package_test": {
      "version": "https://github.com/nakashun-t/CustomPackageTest.git",
      "depth": 0,
      "source": "git",
      "dependencies": {},
      "hash": "2993aab1104baf5ec7ea8d9cb9d9b30f5dd66bc5"
    },
    "com.unity.collab-proxy": {
      "version": "1.3.9",
      "depth": 0,
      "source": "registry",
      "dependencies": {},
      "url": "https://packages.unity.com"
    },
    ~~~
}
  • Unityエディタを再起動する。
    メニューアイテムが作成されるのでそのメニューボタンを押す。

    以上の操作を行ってUnityエディタを再起動すれば配布側のGithubのリポジトリが更新されていればアップデートされます。
    ちなみにCustomPackageUpdater.csの中で最後2行コメントアウトしている箇所のコメントを外すとメニューからUpdateCustomPackageを押すと自動でUnityエディタが閉じるようにできます。

  • バージョンが0.1.0から0.1.1に更新してることを確認できます。
    再起動前

    再起動後

本当は配布側でこのCustomPackageUpdater.csを準備して配布出来る用にすべきですがPackagesフォルダ下のスクリプトでエディタ拡張をする方法がパッと分かってないのでまた勉強して書きます。

Discussion