やらなイカ?

たぶん、iOS/Androidアプリの開発・テスト関係。

UPMパッケージをunitypackage形式で配布する

Unityのエディタ拡張などは Unity Package Manager (UPM) で配布するのが便利です。 UPMのメリットとしては以下の点が挙げられます。

  • バージョン管理、アップデートが容易
  • 依存関係を設定できるため、依存先もUPMであれば同梱・再配布を回避できる
  • Assetsディレクトリ下を汚さない

しかし、Unity 2019.2より前のバージョンではPackage ManagerウィンドウでGit URLが指定できなかったり、scopedRegistriesの指定のために Packages/manifest.json ファイルを直接編集しなければならず、手軽に使ってもらうにはややハードルがあります。

また、VRChatユーザへの露出を考えると BOOTH からダウンロードできる形式での配布にはメリットがありそうです。

折衷案を探っていたところ、UPMパッケージをインポートしてくれるunitypackage形式のインストーラを生成してくれるサービスを見つけたので紹介します。

glitch-package-installer

前提として、配布するUPMパッケージは OpenUPM などどこかしらのレジストリに登録されている必要があります(Git URLではできません)。

インストーラの生成は、下記のようにAPIを実行します。

$ curl -o installer.unitypackage https://package-installer.glitch.me/v1/installer/OpenUPM/com.nowsprinting.blender-like-sceneview-hotkeys?registry=https%3A%2F%2Fpackage.openupm.com

すると、installer.unitypackageというファイルが生成されます。 このファイルをUnityエディタにインポートすると、OpenUPMから com.nowsprinting.blender-like-sceneview-hotkeys の最新バージョンがインポートされます。

なお、installer.unitypackageの中身は独自のインストーラであり、実際はこのインストーラが働いて Packages/manifest.json を編集したのち、インストーラ自身を削除するという振る舞いをしています。

f:id:nowsprinting:20210106090552p:plain:w400

UPMパッケージ自体のインポートは Packages/manifest.json に従ってUPMが行なうため、以降のアップデートは Package Manager ウィンドウで行なえます。

ちなみに、レジストリにOpenUPMを使っている場合、ページ右上にある "Get installer.unitypackage" ボタンでダウンロードできるものはこれと同じものです*1

APIの詳しい使い方はWebサイトを参照してください。

package-installer.glitch.me

ソースコードも公開されています。

github.com

補足

APIのサイトには、バージョン指定、スコープ指定の方法が書いてありますが、試したところ指定は反映されず、常にバージョンもスコープも指定なしのインストーラが生成されました*2

また、

should work fine from 2019.1 to 2020.2+.

とありますが、 Unity 2018.4.20f1 へのインストールができることは確認しています。

(1/7追記) 上記の通り、生成されるunitypackageにはUPMパッケージ本体のコードは含まれません。従ってコードのバックアップとしては用をなさないのでご注意ください。

*1:ダウンロードされるファイル名にはパッケージのバージョン番号がついていますが、常に最新版がインストールされます

*2:時間があるときにちゃんとコード読みたい…

Blender 的なテンキー操作で視点操作できる Unityエディタ拡張

Blender 的なテンキー操作で視点操作できる Unityエディタ拡張 Blender-like SceneView Hotkeys を公開しました。 Unity 2018.3 以降で動くので VRChat SDK 向けの作業にも使えます。

3Dモデリングツール Blender の 3D Viewport では、マウス操作のほか、テンキーによって視点などを操作できます。 使ってみるととても便利で手放せなくなったので、これを Unity のシーン・ビューでも使えるよう、エディタ拡張として移植したものです。

機能

v0.2 時点で実装している機能を紹介します。

以下、スクリーンショットのモデルには火村ユウヤ氏製作の 大神ルゥ さんを使用しています。

視点の方向

テンキー 1 で正面ビュー

f:id:nowsprinting:20200926185347p:plain:w400

テンキー 3 で側面(右)ビュー

f:id:nowsprinting:20200926185629p:plain:w400

テンキー 7 で上面ビュー

f:id:nowsprinting:20200926185642p:plain:w400

また、 control + 1 で背面、 control + 3 で左面、 control + 7 で下面からのビューになります。

透視投影/ 正投影 切り替え

テンキー 5 で透視投影 (perspective) と正投影 (orthographic もしくは isometric) が切り替わります。

f:id:nowsprinting:20200926190059p:plainf:id:nowsprinting:20200926190021p:plain

視点の回転

テンキー 8 2 4 6 で、上下左右に15°づつ軸を中心に視点を回転します。 また、 9 で現在の視点から180°回転した視点に切り替わります。

f:id:nowsprinting:20200926190357p:plain:w400

Roll

shift + テンキー 4 で左まわり、 6 で右まわりに、視点方向を軸に回転します。

f:id:nowsprinting:20200926185715p:plain:w400

Pan

control + テンキー 8 2 4 6 で、上下左右に視界を移動します。

f:id:nowsprinting:20200926190419p:plain:w400

Zoom

control + テンキー + でズームイン、 - でズームアウトします。

f:id:nowsprinting:20200926190433p:plain:w400

エディタ拡張のインポート方法

unitypackage ファイルからインポート

簡単なのは、 OpenUPM から installer.unitypackage をダウンロードしてインポートする方法です。

openupm.com

上のリンクを開き、ページ右の "Download installer.unitypackage" (下図の四角)をクリックします。

f:id:nowsprinting:20200926190459p:plain:w400

.unitypackage ファイルがダウンロードできますので、Unityエディタでプロジェクトを開いてインポートできます。

なお、通常の .unitypackage とは異なり、ファイルの実体は Assets フォルダ下には入らず、 Package Manager によって管理されます。 Window | Package Manager を開くと表示され、ここからアップデートも可能です。

(1/3追記) BOOTHにも.unitypackageをダウンロードできる商品(投げ銭用)を置きました。

ikagoya.booth.pm

その他の方法でインポート

その他、下記 GitHub リポジトリを直接 git URL として指定するなど、お好みの方法でインポートできます。

github.com

設定

テンキーを模倣 (Emulate Numpad)

お使いのキーボードにテンキーが無い場合、文字キー上部にある数字キーを使う設定が可能です。

Unity | Preferences ウィンドウを開いて "Blender-like SceneView Hotkeys" を選択、 "Emulate Numpad" を on にするだけです。 この設定は、UnityプロジェクトではなくPCごとに保持されます。

f:id:nowsprinting:20200926190522p:plain:w500

ただし、数字キーの 2 には別のホットキーが割り当てられています。 Unity 2019 以降であれば、ショートカットマネージャでこれを無効にするなどして競合を回避してご使用ください。

参考

Blender www.blender.org

Blender の 3Dビューポート操作マニュアル docs.blender.org

使用モデル booth.pm

#yokohamaunity in #cluster 会場ができるまで

昨晩開催された『yokohama.unity 実質4回目』会場として cluster のワールドを構築・提供しました。

meetup.unity3d.jp

ワールドは横浜の「大さん橋」屋上を 再現 模したもので、遠景に全天球画像、アーチ状の構造物などはフォトグラメトリで作ったハイポリモデルをリトポロジーしてローポリ化したものを配置。

f:id:nowsprinting:20200801042833p:plain:w400

少しでも横浜っぽさを感じ、楽しんでいただけたのであれば幸いです。

以下、製作の流れなどを紹介します。

会場の選定

前回(4/末)のオンライン開催の後、「横浜っぽい会場を作ろうか*1」ということで心当たりを何箇所かロケハンした結果、大さん橋に決まりました。

大さん橋は、みなとみらい*2ベイブリッジ山下公園といったスポットに囲まれており、まさに全天球写真向き。 ちなみに、大さん橋ホールは数多のビアフェスの会場になっていたりします。

遠景

全天球写真はRICOH THETA Sで撮影。ただし、撮影の主目的はフォトグラメトリ(後述)だったので、撮影に行くのはフォトグラメトリ日和つまり曇天。 7月に入って、そろそろ本番撮影をしなければと思うものの、ずっと天候悪く、曇天画像のまま当日を迎えました。

撮影した全天球画像は、@warapuriさんが公開されているライセンスフリーICO球 (Sphere100.fbx) の内側に貼り付けて使用しています。

UnityのSkyboxにそのまま貼って使うこともできましたが、撮影が雑で画像が大さん橋の中央でなく北に寄っていたため、うまく足元の構造物を隠せる上記方式をとりました。

構造物のモデリング

大さん橋屋上の構造物、大さん橋ホール入り口のアーチ(上のスクショでスクリーンの後ろにあるもの)と、南北にある階段状の客席をそれぞれフォトグラメトリ、リトポロジーして使用することを予定していました。

しかし残念ながら客席はリトポロジーが間に合わず、今回は単なる斜面に。

撮影

曇天*3の早朝、 iPhoneで動くマニュアルカメラアプリで、 北側客席は下側を東西に平行移動しながらヨーとピッチ変えつつ撮影。 エントランスも下側から南北に並行移動しながらヨーとピッチ変えつつ撮影。

南側に人がいたので北側を撮影したのですが、背景にランドマークタワーなどのビルが写ったためフォトグラメトリの像を結ぶのにプラスに働いたはず。

フォトグラメトリ処理に使う3DF Zephyr Liteにソース写真500枚制限があるため、客席とエントランスはあえて別々に撮影しています。

フォトグラメトリ

使用ソフトは3DF Zephyr Lite。2年前にSteamのセールで買ったものですが先日バージョン5にアップデートされました。最近は買い切り珍しくてお得感。

store.steampowered.com

北側客席は231枚中231枚が有効。設定はプリセットのカテゴリーを「市街地」、ほかはデフォルト。 奥のほうはエントランスの影があったこともあって暗く、そのせいか湾曲してしまっています。WBくらいオートにしてもよかったのかもしれません。 メッシュ生成の後、周囲のバリ取りを行なってテクスチャ付きメッシュを生成。

f:id:nowsprinting:20200801052744j:plain:w400

エントランスは54枚中53枚が有効。こちらもカテゴリー「市街地」、ほかはデフォルト。 こちらもバリ取りをしますが、出入り口正面の床は残し気味にし(後工程で水平を取りやすくするため)、客席部分は邪魔なので削ってしまいます。

f:id:nowsprinting:20200801052510j:plain:w400

加工したら、テクスチャ付きメッシュをobj形式で出力。fbxでも出力できますが、(恐らくLite版の制限で)テクスチャが出力できません。 テクスチャは後工程で捨ててしまうのですが、リトポロジーの際にテクスチャがあるほうが見やすいです。

なお、方向合わせは3DF Zephyrで無理に行わず、後からBlenderで行います。

スケールは、フォトグラメトリで作られたモデルの寸法を本当に信じていいのか未だ半信半疑。 今回は大きすぎると思って縮小して合わせたものの、終盤になって、どうも合っていたのかも? と…。

トポロジー

トポロジー (retopology) とは、フォトグラメトリやスカルプトで作られたハイポリモデルのメッシュの流れ(トポロジー)を組み直すこと。

自動でリトポロジーを行なってくれるツールもありますが、今回はcluster会場用にローポリモデルにしたいのでハイポリメッシュに沿って手作業で面を貼っていく作業をします。

今回はこちらの記事のワークフローに従い*4、販売されているBlenderアドオンを使用して貼っていきました。

bookyakuno.com

gumroad.com

エントランスのアーチ下側の部分。このようにハイポリメッシュに頂点を吸着させつつ面を貼っていきます。 ちなみにアーチ下の階段に横たわっている白と黒の物体は、寝ていたおじさんです。

f:id:nowsprinting:20200801060603p:plain:w400

貼り終えたら、原点をホール入口中央の床面に合わせておきます。Unityでの位置合わせが楽なように、Blenderでやるのが一番良さそう。 その後、ローポリメッシュをUV展開してfbxエクスポート。Unityに取り込みます。

大さん橋屋上の床面

床面は、Blender大さん橋の平面図を下絵として取り込み、モデリングしていきます。 ここでも原点をホール入口中央の床面に、スケールはフォトグラメトリモデルから測定したものに合わせます。

f:id:nowsprinting:20200801060210p:plain:w400

実際はもっとカーブが多く、さらに南北でアシンメトリーなのですが、かなり単純化して面を貼っています。画像が南半分なのはミラーモディファイア使用のため。 平面図にあらわれないアップダウンは現地の記憶と写真で補いつつ進めます。

また、全天球画像の足元を見えなくするために、実際の床面より広く外に張り出しています(Unity上でコライダによって端まで行けないようにします)。

こちらもUV展開してfbxエクスポートします。本来は芝生部分の塗り分けがあるのですが、今回は一律、木目調のテクスチャをタイリング。

なお、当初、床面はUnity上でPro Builderで作りかけたのですが、大きなオブジェクトの位置合わせが大変で断念しました。 最終的にスタッフルーム(大さん橋ホール)の箱だけPro Builder製に。

小道具

小道具として、横浜のアイデンティティ(箱)をモデル化。 Cluster Creator KitのGrabbable Itemコンポーネントを入れて、持ったり投げたりできるように。みんな遊んでくれてよかった。

f:id:nowsprinting:20200801031042p:plain:w400

また、登壇者に cluster ゲームワールドコンテスト 2020 大賞受賞の@yunoda_3DCGさんがいらっしゃったので、急遽、大賞作『1min. Hockey』に飛べるWorld Gateを設置。

cluster.mu

所感

既知のノウハウのつなぎ合わせで作ったものなのですが、屋外の構造物をまともにフォトグラメトリ&リトポロジーするのははじめてで、色々勝手がわからず試行錯誤しました。

ここに挙げただけでも様々な妥協の産物なのですが、なんとか形にはなったかと。 今回妥協・見送りしたものは、次回yokohama.unity開催までに仕上げたいところ。

なお、大さん橋には撮影に関する規約があり、今回は個人撮影の範囲で利用しています。従って、イベントは限定公開、ワールド非公開、リポジトリも非公開となっています。ご了承願います。

参考

www.nowsprinting.com

[asin:B07N4G4LH7:detail]

*1:オフライン開催の頃から地域.unityのアイデンティティ確立は主催者が意識されていて、オンラインだとそれ無くなってしまうねという話が発端

*2:港町は海側が顔なので海から見るべき、という話があります

*3:多くの写真を撮っていくので、強い影が出ると時間経過で影が変わってしまうことを避けるため

*4:記事中でMatcap表示を勧められていますが、今回の作例ではフォトグラメトリで得られたテクスチャのほうがやりやすい

Unityプロジェクトのディレクトリ構成と .gitignore

Twitterで話題に上がっていたので、自分なりのやり方を。

ディレクトリ構成

Assets/下

自分で作るものはAssets/下にフォルダを作り、そこにまとめています。

Assets
└── MY_PROJECT_NAME
    ├── Materials
    ├── Prefabs
    ├── Scenes
    ├── Scripts
    │   ├── Editor
    │   └── Runtime
    ├── Tests
    │   ├── Editor
    │   └── Runtime
    └── etc...

"Runtime" のところは、規模が大きければ機能やレイヤごとに分けたりします*1

スクリプトを置くフォルダおよび直下のAssembly Definition File (.asmdef)を作ってくれるエディタ拡張を公開しました。 これを使うと簡単にセットアップできます。[2021.5.7追記]

github.com

Assets外

主にビルドスクリプト*2で以下のように指定しています。いずれも.gitignore(後述)で除外指定されているところ。

  • ビルド成果物は Builds/
  • ログは Logs/
  • テスト結果も Logs/
  • コードカバレッジ*3も Logs/

.gitignore

giboでベースを生成

.gitignoreファイルはgiboで生成したベースに、プロジェクトごとの設定を追加しています。

github.com

私はIDEにJetBrains Riderを使っているので、次のように。

$ gibo dump Unity JetBrains >> .gitignore

これで、以下2つの定義が連結された.gitignoreができます。

Rider以外のIDEを使用する場合は JetBrainsVisualStudioVisualStudioCode に置き換えます。

なお、OSごとの定義はあらかじめグローバルの.gitignoreに設定されている前提ですが、gitに不慣れなメンバーもいる状況では macOSWindows を加えてもいいでしょう。

プロジェクト固有の定義を追加

必要に応じて、.gitignoreに追加していきます。

3rd partyのアセットをすべて除外したいケース

まず極端な例。公開 or 納品するプロジェクトなど、3rd partyのアセットをすべて除外したい場合は、以下のようにMY_PROJECT_NAME以外をすべてトラックしないようにします*4

/Assets/*
!/Assets/MY_PROJECT_NAME*

なお、スラッシュを含めず*を書いているのは、ディレクトリの.metaファイルも含めるためです。

特定のアセットだけ個別に除外したいケース

すべてではない場合、シートライセンスのエディタ拡張など、リポジトリに含めたくないものを個別に指定していきます。例えば、

/Assets/ConsolePro*
/Assets/StompyRobot*

同様に、Assets/下に生成されるファイルでトラックしたくないものも追加していきます。代表的なものは以下。

Play modeテスト実行時に作られて、まれによく残ってしまうScene

/Assets/InitTestScene*.unity*

Automated QA パッケージのRecorded Testing機能実行時に自動生成されるもの [2021.5.7追記]

/Assets/AutomatedQA/Temp*

Build Report Inspector パッケージが自動生成するもの

/Assets/BuildReports*

Unity Recorderパッケージのデフォルト出力先 [2021.7.22追記]

/Recordings/

ML-Agents パッケージがトレーニング時に自動生成するもの [2021.5.7追記]

/Assets/ML-Agents*
/results/

NuGetForUnity がDLLを展開するところ *5 *6 [2021.5.22修正]

/Assets/Packages/
/Assets/Packages.meta

VRCSDK がアップロード用にプロジェクトルートに作るファイル

/*.unitypackage

UniVRM が生成する中間ファイル

/Assets/*.vrm
/Assets/*.vrm.meta

Code Coverage パッケージの設定ファイル *7 *8 /ProjectSettings/Packages/com.unity.testtools.codecoverage/

こちらの設定を入れた.gitignoreは、GitHub - nowsprinting/UnityTestExamples: 『Unity Test Framework完全攻略ガイド 第2版』サンプルコードリポジトリからダウンロードしてお使いいただけます。

$ curl -o .gitignore https://raw.githubusercontent.com/nowsprinting/UnityTestExamples/master/.gitignore

アセット提供側が気をつけたいこと

アセット提供側としても、自身のアセットはAssets/直下に置くのでなくディレクトリを切るべきです(以下MY_ASSET_NAMEとします)。

また、再配布可能な他者のアセットを同梱する場合は、MY_ASSET_NAMEの下ではなく、オリジナルのディレクトリに置くと、他のアセットとの競合を避けられます(利用者側がインポート時に判断できます)。

アセットの設定ファイルをAssets/MY_ASSET_NAME/下に置いてパス指定で読み書きしてしまうと、ユーザがディレクトリを変更できなくなり不便です。 設定は、 Settings Manager パッケージを使用してProjectSettings/下に保存するようにすると使いやすくなります(Unity 2018.3 以降)。

また、UPM (Unity Package Manager) パッケージ形式で作ったアセットをunitypackage形式で配布することもできます。詳しくはこちらの記事を参照してください。[2021.5.7追記]

www.nowsprinting.com

*1:直下にAssembly Definition File (.asmdef) を置いてアセンブリを分ける前提

*2:Makefile老人会なのでMakefile

*3:Code Coverage packageの場合、設定で出力先を変更できます

*4:ただし、エディタ拡張だけでなくランタイムのスクリプトその他も除外するのは、納品には良いのですがCIで不便です。Gitはこの設定で、CIはignore定義が別のUnity Collaborateにするという手もあります

*5:Nuget | Restore Packages で復元可能なため

*6:末尾*を使用していないのは、インストール済みパッケージ情報を保持している/Assets/packages.configはトラッキングしたいため、ケースセンシティブでないOS対策です

*7:0.3.0-previewからここに保存されるようになったが、出力先をフルパスで保存してしまうので除外

*8:0.4.0-preview相対パスで保存されるように修正された

リモート時代のモブプログラミング(モブワーク)勉強会でmob IntelliJ pluginをお披露目 #モブLOVE #モブプロ #MobProgramming #RemoteMobProgramming

リモートモブプログラミングにフォーカスした勉強会(もちろんオンライン開催)のLT募集があったので、作っているリモートモブプロ支援IntelliJ pluginの紹介をしてきました。

moblove.connpass.com

勉強会冒頭のアンケートでは、リモートモブプロをやたことはある人は多いものの、単発であったり、うまくできていないという人が2/3くらい。

終盤の 銀の弾丸ラジオ 公開収録では寄せられたお悩み相談に、及部さんたちだけでなくZoomのチャットにも色々知見が寄せられて*1、たいへん有意義な会でした。

そんな中、オンラインあみだくじによってLTのトリで発表させていただきました。Visual Studio CodeのLive Share機能を使っている事例がいくつかあったので、JetBrains派の方々に向けてバランス取れたのではないでしょうか。

プラグインは JetBrains Plugins Repository で公開されています。

plugins.jetbrains.com

ただしまだEAP Channelのみなので、IntelliJ の Preferences | Plugins にチャネルを設定しないと出てきません。 もしくはplugin pageからファイルをダウンロードしてインストールすることも可能です。

EAP Channelの設定その他はGitHub repositoryのREADMEを参照してください。

github.com

チームの事情等でIntelliJが使えないという方は、移植元である mob コマンドをお試しください。こちらの記事でも紹介しています。 www.nowsprinting.com

はじめてのIntelliJ plugin開発でしたが、得られた知見は今後も当ブログで記事にしていく予定です。下のリンクから記事一覧が見られます。 www.nowsprinting.com

*1:Zoomのチャットは残らないのがつらいところですね

#yokohamaunity (cluster開催)で『Rider plugin の作りかた』をLTしてきました

yokohama.unity初のオンライン開催である「yokohama.unity ~オンラインDEハジメテユルクヤッテミル#0~」で、IntelliJ Rider plugin 開発についてのLTをしてきました。

f:id:nowsprinting:20200424225918p:plain

meetup.unity3d.jp

今回は初のオンライン、clusterでの開催でした。clusterはオーディエンスのリアクションが見られるのがとても良いですね*1

ただ、ものすごく贅沢を言うと、

  • 音声がやや聞き取りづらかった(うちの回線の問題だとは思いますが*2
  • スライドの登壇者ビューが小さめ(解像度低め)なので、スライドにキーワードを散りばめておいて話すスタイルだと厳しい

みたいなところは気になりました。

あと個人的に、うっかり他のアカウントにTwitterアカウントを紐付けてしまったため、cluster内で打ったコメントをTwitterに流せないのです*3。連携解除機能とか実装されてほしい。

登壇資料

以下、今回のスライドと、その中で紹介している過去記事です。

www.slideshare.net

www.nowsprinting.com

www.nowsprinting.com

www.nowsprinting.com

説明をだいぶ端折ってしまったSettings/Preferencesなど、また改めて単発のブログ記事を書き起こすつもりです。 今後の追加も含め、下のリンクから記事一覧が見られます。

www.nowsprinting.com

また、製作途中なものを晒したIntelliJ プラグインは、次のイベントでお披露目できる見込み…?

moblove.connpass.com

[5/18追記] 無事リリースされました!

plugins.jetbrains.com

懇親会

懇親会はRemoでという話だったのですが、重すぎてつながらず、急遽Zoomへ。 人数少なくなってしまった寂しさと、少人数だからZoomで会話が成立したので結果オーライ感と。

トータルで楽しかったので、ぜひまたやりましょう!

関連

仮面ライダーゼロワン RKF 仮面ライダーランペイジバルカン

仮面ライダーゼロワン RKF 仮面ライダーランペイジバルカン

  • 発売日: 2020/04/25
  • メディア: おもちゃ&ホビー

*1:なぜ壇上からのスクショを撮っていないのか…

*2:自分の音声どうだったのだろう、というのは気になるので教えてほしいです

*3:ZoomやDiscordのテキストチャットで盛り上げることもできますが、ログがそのサービスに閉じてしまいます。その点、clusterはコメントをTwitterにも流せるのが良いところなのですが

IntelliJ plugin から他のプラグインを使用する

IntelliJ (JetBrains IDE) ファミリー向けのプラグイン開発において、他のプラグイン(例えばGitを操作するための Git4Idea *1 など)や、Riderなど言語別IDEの機能を使う設定について。

基本的なことは公式ドキュメントの下記ページに載っており、それに沿って補足していきます。

プラグイン依存関係 / IntelliJ プラットフォーム SDK プラグイン開発ガイド

build.gradle

build.gradleの intellij ブロック内に plugins の設定を追加します。

Git4Ideaを使用する例 (Kotlin) :

intellij {
  version = "2020.1"
  setPlugins("git4idea")
}

Gradleでビルドおよび runIde タスクを実行するとき、この設定が使われます。 このとき、ここで記述したプラグインの依存関係については自動的に解決されます。

しかし、 test タスクでユニットテストを実行するときは、プラグインの依存関係が解決されないという制限があります。 上例の git4idea には依存先がないのですが、例えば android を使用する場合は次のように android が依存するすべてのプラグインを書く必要があります。

intellij {
  version = "2020.1"
  setPlugins("android", "junit", "Groovy", "gradle")
}

詳しくは下記 Issue を参照してください。この問題が修正される気配は無さそうに見えます。

Install plugin dependencies transitive dependencies automatically for tests. · Issue #38 · JetBrains/gradle-intellij-plugin · GitHub

plugin.xml

plugin.xml には <depends> で依存するプラグインを宣言する必要があります。 com.intellij.modules.platform の下に追加していきましょう。

<depends>com.intellij.modules.platform</depends>
<depends>Git4Idea</depends>

これはランタイムで使用される設定です。ここに書く名称についてはコード補完が効きます。

なお、プラグインの依存を必須にしない場合、 <depends>optional 属性を指定できます。 これは試していないので、公式ドキュメントを参照してください。

classpath

以上でプラグインのビルド・配布はできるのですが、IntelliJ IDEA上で開発を進めるにはclasspathも設定する必要があります。

File > Project Structure... を開き、SDKs > 11(使用しているJDKバージョンによりますが、ここではAmazon Corretto 11)を選択、classpathタブの"+"クリックで必要なjarファイルを選択します。

f:id:nowsprinting:20200419195750p:plain

jarファイルは、IntelliJ IDEAインストールディレクトリ/plugins/下にあります。 Git4Ideaの場合、plugins/git4idea/lib/下に4つのjarファイルがありますが、ディレクトリごと選択すれば大丈夫です*2

参考

プラグイン開発に関しては、公式ドキュメントにある程度の情報が載っています。日本語版もちゃんと更新されています*3

IntelliJ プラットフォーム SDK / IntelliJ プラットフォーム SDK プラグイン開発ガイド

IntelliJ Platform SDK / IntelliJ Platform SDK DevGuide

少し込み入った話になると、ヘルプセンターがヒットしたりはします。

IDEs Support (IntelliJ Platform) | JetBrains

本稿のclasspathの件はここにありました。

How to build and use git4idea as a library in plugin – IDEs Support (IntelliJ Platform) | JetBrains

*1:Git4Ideaはビルトインされているのでインストール不要なプラグインですが、プラグインから使用するための設定は必要です

*2:はじめgit4idea.jarだけを選択していたところ、中途半端な解決しかされず悩みました…

*3:が、翻訳には限界があるので検索で探し当てるのは難しいです