Closed11

Unityのエディター拡張をカスタムパッケージにして配布する

DolphiiiinDolphiiiin

エディター拡張を作る機会が増えて来て、unitypackageだと管理が大変になってきた。
なので、カスタムパッケージにして導入を楽にしたい。

目標

  • git経由でパッケージマネージャーから導入できるようにする
  • npmjsに上げてUPMで導入できるようにする
DolphiiiinDolphiiiin

まずはカスタムパッケージを作るために、空プロジェクトを作る。
空プロジェクトのルート内にあるPackagesフォルダに、必要なファイル群を用意する。

  • パッケージの名前のフォルダー
  • package.json パッケージの情報を書くためのjson
  • Scripts このフォルダの中にパッケージのスクリプト群などを置く
UnityProj
├── Packages
│   ├── 作成するパッケージ名
│   │   ├── package.json
│   │   └── Scripts
│   │       └── ここにスクリプトとか
DolphiiiinDolphiiiin

package.jsonを作る。
ドキュメントにサンプルがあるので、それを参考に。
https://docs.unity3d.com/2021.3/Documentation/Manual/upm-manifestPkg.html

  {
  "name": "com.dolphiiiin.localize-toolkit",
  "version": "1.0.0",
  "displayName": "Localize Toolkit",
   "description": "Localize Toolkitは、Cluster Creator Kitの多言語リソース機能の設定をアシストするためのツールです。\n簡単なステップでTextコンポーネントにローカライズを設定することができます。","Dolphiiiin",
  "unity": "2021.3",
  "keywords": [
    "unity"
  ],
  "license": "MIT",
  "documentationUrl": "https://toza.notion.site/Localize-Toolkit-2ef04cf16833482c9dc4ac9674948663",
  "repository": {
    "type": "git",
    "url": "https://github.com/Dolphiiiin/LocalizeToolkit.git"
  },
  "dependencies": {
    "mu.cluster.cluster-creator-kit": ""
  }
}

今回はこうなった。
依存パッケージとして、mu.cluster.cluster-creator-kit"を使用しているので、dependenciesに記述しておく。

DolphiiiinDolphiiiin

エラー出た

An error occurred while resolving packages:
  Folder [D:\worlds\Localize Toolkit\Packages] contains invalid packages:
    Manifest [D:\worlds\Localize Toolkit\Packages\LocalizeToolkit\package.json] is invalid:
      Package name 'com.dolphiiiin.LocalizeToolkit' is invalid.

A re-import of the project may be required to fix the issue or a manual modification of D:/worlds/Localize Toolkit/Packages/manifest.json file.
DolphiiiinDolphiiiin

Unityのプロジェクトをリフレッシュすると、Packagesフォルダ内に、さっき作ったパッケージが見えるようになる。
ここからは、プロジェクトウィンドウ上でファイルの編集が可能。
ちなみに、package.jsonはインスペクター上で編集できる。

DolphiiiinDolphiiiin

Packagesフォルダに作成したパッケージが出現しても、まだスクリプトは使用できない。
Assembly Definitionを作成する必要がある。
スクリプトが入ってるフォルダを右クリックして、Create => Assembly Definitionで作成できる。

今回編集したのはこのあたり。

  • Name アセンブリ定義の名前
  • Root Namespace デフォルトの名前空間
  • Assembly Definition Refarences パッケージに含まれない外部のアセンブリをusingで参照している場合は、ここにそのAssembly Definitionをセットする。(やらないと、missingエラーがたくさんでる)
DolphiiiinDolphiiiin

ここまで来たら、パッケージのフォルダにREADMEやら作って、フォルダをgithubにプッシュ。
これで、パッケージマネージャーからgitリポジトリ経由でパッケージを読み込める。

DolphiiiinDolphiiiin

npmjsでアカウントを作ってトークンを発行する。
アカウントページのAccess Tokenページへ行って、トークンを発行する。
GitHubのリポジトリのSettingsのActions secrets and variablesNPM_TOKENとしてトークンを定義しておく。

リリース作業を自動でさせるためにGithub Actionを組む。
/.github/workflowsRelease.ymlを作成して記述する。

Release.yml
name: Release to npmjs

on:
    release:
        types: [created]

jobs:
    release:
        runs-on: ubuntu-latest
        steps:
            - uses: actions/checkout@v2
            - uses: actions/setup-node@v2
              with:
                  registry-url: 'https://registry.npmjs.org/'
            - run: npm publish
              env:
                  NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

リリースを作成したら、npmjsにリリースさせるようにした。

DolphiiiinDolphiiiin

これでTagを打って、リリースを作成すると、npmjsにリリースされる。

今後アップデートをするときの手順。

  1. package.jsonのバージョンを書き換える
  2. コミットして、プッシュ
  3. タグを打つ
DolphiiiinDolphiiiin

UnityのProject SettingsでScoped registryを設定すれば、パッケージマネージャーのMy registryからインストールできるようになる。

Field Value
Name dolphiiiin
URL https://registry.npmjs.com/
Scope com.dolphiiiin
このスクラップは4ヶ月前にクローズされました