UnityPackageManagerに表示される自作Packageを作るメモ

# この記事について
※文章が長くなるのでUnityPackageManagerをUPMと略称しています

UPMで管理できる自作Packageの作成から、
GitHubのリポジトリからダウンロードするまでのメモです。
間違っている部分があればコメントにてご指摘頂けると幸いです！

# 今回作成した自作Package

https://github.com/hamster3156/GenerateScriptTemplate

# この記事の対象者
・GitHubのリポジトリ作成など基本操作が出来る方
・SourceTreeを利用して共同開発を行った事がある方
・UPMの`add package from git URL`を利用した事がある方

今回の方法でエラーは出ないと思いますが、UPMのGit経由ダウンロードでエラーが出る方はこちらの記事をご確認下さい。

https://qiita.com/game_hamster/items/52a6bf8b224e2bae9b01

# 自作Packageの作成手順
分かりやすい記事が既にあるのでリンクを貼っておきます。
今回は自分が躓いた部分の内容を記事に残そうと思います。

https://www.hanachiru-blog.com/entry/2023/10/23/120000

https://qiita.com/r-ngtm/items/305e4810227e360d4f19

# 自作Package対応で躓いた部分

- パッケージのレイアウト
紹介した記事内で説明がありますが、自分はこの部分に少し困惑しました。😓
これはフォルダーの階層構造を指してます。

>https://docs.unity3d.com/ja/2020.3/Manual/cus-layout.html
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588406/a1f8380e-a9ba-d990-c37b-7c6426ba2734.png)

つまりUnity上で見た時のファイルの並び順ですね...
何故この部分で困惑していたのか自分でも分からないです.......
![図4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588406/07dd4e5c-7faa-2937-0a99-872db6b0bed4.png)
***
- `package.json`に書く内容を間違えたこと

現在の`package.json`は以下の内容になっています。
```C#
{
  "name": "com.hamster.editor",
  "displayName": "Generate Script Template",
  "version": "1.0.0",
  "description": "Editor extension to create scripts from templates",
  "author": {
    "name": "hamster",
    "email": "hmu3156@gmail.com",
    "url": "https:hamster//github.com/hamster3156"
  },

  "keywords": [
    "editor"
  ],

  "dependencies": {
  }
}
```

`"name"`部分を`Com.Hamster.Editor`のように記述していたのですが、UPMに認識されずエラーが出ました。名前部分は小文字にしないと認識してくれないみたいです。
基本的には上にある`package.json`の内容で問題ないです。

***

- `package.json`がルートディレクトリに存在しない時

プロジェクトの最上位のディレクトリの事を指していて、画像だと`Assets`が最上位のルートディレクトリになっている事が分かると思います。

![図5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588406/2960ffa7-3756-2c0b-0e34-47a1ae258a0c.png)

画像のルートディレクトリだと、下のようになっています。
```
|-Assets
|  |-GenerateScriptTemplate
|  |-Sample
|  |-Scenes
|  |-この階層にpackage.jsonがない時
```

上のように、ルートディレクトリに`package.json`がない場合、GitHubの`HTTPS`のリンクを使って`add package from git URL`によるダウンロードをすると画像のようなエラーが出ます。

![スクリーンショット 2024-07-26 235849.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588406/034f2465-febd-f2eb-2529-3a4762b8f7b6.png)

今回自作Packageを行ったフォルダー内を確認すると下のようになっています。
![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588406/ba98211b-c4ad-5c57-6a46-52c50a6dc998.png)

```
|-Assets
|  |-GenerateScriptTemplate
|  |  |-Editor
|  |  |-Templates
|  |  |-CHANGELOG
|  |  |-package.json
|  |  |-README
|  |
|  |-Sample
|  |-Scenes
|  |-この階層にpackage.jsonがない時
```
ルートディレクトリに存在しないので`package.json`があるフォルダーのパスを`HTTPS`のリンクの後に追加する必要があります。

`HTTPS`のリンクが`https://github.com/hamster3156/GenerateScriptTemplate.git`だったので、gitの後に`?path=ファイルパス`を追加する事でこのエラーを解決する事が出来ます。

実際のリンク
![図6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588406/ec389a1c-689c-c769-3b75-c64c51fe9bed.png)

***
- `.meta`がないとPackageをダウンロードした時にエラーが出る

画像を撮り忘れたので申し訳ないです。自分がUPMでダウンロードした時に、`.meta`がないファイル、があったのでその時に遭遇したエラーです`.meta`を含めたら治るエラーなので、Unity上で一度開いて`.meta`が出たら、そののままリポジトリに上げればエラーを解決する事が出来ます。

***
- `CHANGELOG`や`LICENSE`について

まず、`CHANGELOG`についてですが手動で更新する物らしいです。(自分調べ)
自分は上の方で紹介した記事を元に真似して書きました。
![図7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588406/9a0f2f9b-fb4d-471d-64dd-8d8f0807e6d0.png)

`LICENSE`についてですが、利用規約や二次配布関連の事を書くらしいです。
書き方のテンプレートがあるのか、どうか分からないですが自分の場合必要ないと感じたのでファイルに含めていないです。よく分かっていないので有識者の方教えて下さい！

# 所感
今回も雑記？みたいな内容ベースになりました...
ただ、ファイル構造を今まで意識した事がない事に気付けて良かった気がします。

今回の自作PackageはGitHub上で管理しているので、エディタ拡張をUpdateした時にUPMの更新を押すだけなので便利だな～と思いました。

# その他
READMEファイルに書いたリンクを押してUnityPackageをダウンロードする方法
![図8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588406/07410556-3ea7-3912-6ff6-130238b84a2b.png)

リポジトリ内で、`Add file` → `Upload files`からUnityPackageをリポジトリに上げる
![図10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588406/b8bdc70e-cb14-f3fd-a30c-424f197f3df7.png)

ファイルが保存されているパスをコピーする
![図9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588406/0175a84c-0459-f40f-76c5-22fd3da41ebc.png)

リンクを下のような内容に変更する
```
https://github.com/自分のリポジトリのリンク/raw/main/ファイルが保存されいる場所のパス/ファイル名
```
READMEファイルに下のように記述するとできます！
```
[ここを押してください！](上で変更したリンクを貼る)
```