金曜日ではありませんが、Unreal Engine開発をNeoVimで加速させるためのプラグインスイートに、大きなアップデートと新しい仲間が加わりました。特にアセット(バイナリ)内の参照を扱う待望のプラグイン UEA.nvim が登場です!
🌟 今週のハイライト:新プラグイン UEA.nvim 参戦!
新たに UEA.nvim (Unreal Engine Asset) がリリースされました。このプラグインは、アセットのバイナリデータ(.uasset, .umap)を ripgrep (rg) で浅くパースし、C++コードとアセット間の参照関係を高速に追跡します。
💡 動作環境
.uasset検索はバイナリ検索を伴うため、完全に正確な表示ができない場合がありますが、UE5.3、UE5.6で動作を確認しています。
💎 UEA.nvim の主な機能とコマンド
UEA.nvim は、Unreal Editorの機能に近いアセット操作をNeovimで実現します。
1. コードレンズ (Code Lens)
クラス定義(.h, .cpp)の上に、そのクラスを親に持つ Blueprint の数や、参照しているアセットの総数を表示します。
⚠️ 注意: Code Lens機能の利用には、tree-sitter-unreal-cpp が必須です。
-
機能: クラス定義部分で、継承しているアセット数 (
X Children) と、参照しているアセット総数 ( Y Refs) を Code Lens で表示します。 -
コマンド:
:UEA refresh_lensで手動更新。
2. アセット参照・依存関係の検索
| コマンド | 動作 | 主な用途 |
|---|---|---|
:UEA find_bp_usages[!] |
カーソル下のC++クラスを参照している Blueprint/アセットの一覧を表示。! でクラス一覧から選択。 |
C++クラスを親に持つ全ての子アセットを追跡したいとき。 |
:UEA find_references[!] |
選択したアセットを「参照している(使っている)」他のアセット一覧を表示。 | アセットを削除・変更する前の影響調査(どこが壊れるか)。 |
:UEA find_dependencies[!] |
選択したアセットが「依存している(内部で使用している)」アセットやクラスの一覧を表示。 | アセットが正常に動作するために必要な構成要素を把握したいとき。 |
3. アセットパス操作と外部連携
| コマンド | 機能 |
|---|---|
:UEA copy_reference |
アセット一覧を表示し、選択したアセットの Reference Path(例: /Game/BP_MyActor.BP_MyActor_C)をクリップボードにコピー。 |
:UEA system_open |
アセット一覧を表示し、選択したアセットの物理ファイルがあるフォルダをシステムのファイルエクスプローラー(Finder/Explorer)で開く。 |
:UEA show_in_editor |
アセットを選択し、**Unreal Editor のコンテンツブラウザでそのアセットを選択(Sync)**します。(アセットは開きません) |
:UEA find_bp_parent[!] |
アセットを選択し、その Native Parent Class(C++側の親クラス名)を表示します。 |
:UEA grep_string |
アセットに含まれる文字列で Live Grep を実行します。 |
🛠️ UEP/UCM 連携の修正と改善
既存のコアプラグインである UEP.nvim と UCM.nvim の連携部分に重要な改善とバグ修正が入りました。
🐞 バグ修正
-
UEP キャッシュ初期化の安定化:
-
:UEP cleanupの直後に:UEP refreshを実行した際、特定のWarningメッセージが表示される問題を修正し、リフレッシュ処理の安定性を向上させました。
-
-
UCM 操作後の同期:
-
:UCM new_class、:UCM delete、:UCM renameコマンド実行後、UEP filesなどに変更が即座に反映されないバグを修正しました。
-
🔗 クラス一覧取得ロジックの改善 (Shallow-deps対応)
クラス一覧(UCM new_class の親クラス選択など)を取得する際、これまではスコープが Game 限定となっていました。
-
変更: クラス一覧のスコープを
Shallow-deps(直接依存) を起点に取得するように変更しました。 -
効果: 不要なEngineのクラスが大量に表示されることを防ぎつつ、プロジェクトが依存している必要なクラス(
AActor、UUserWidgetなど)を確実に表示し、安全な継承を促します。
⚙️ 新コマンド: システムエクスプローラー連携
ファイルパスやアセットパスを、OSのエクスプローラーで開くためのコマンドを追加しました。
-
:UEP system_open[!] [Path]`- 機能: 現在のファイル、または指定されたファイルパス/アセットパスの場所を、システムのファイルエクスプローラー(Windows Explorer, macOS Finder, xdg-openなど)で開き、ファイルを選択状態にします。
⚙️ UnrealDev.nvim の初期化制御の変更
ラッパープラグイン UnrealDev.nvim が、依存関係にないプラグインのAPIを誤って有効化し、初期化時にエラーやWarningを出す問題を改善しました。
設定による API 有効化の制御
lazy.nvim などで UnrealDev.nvim を設定する際、dependencies に含まれていないプラグインの setup を無効化できます。
return {
{
'taku25/UnrealDev.nvim',
-- Define all plugins you actually use here.
dependencies = {
{
'taku25/UNL.nvim', -- Core Library (必須)
lazy = false,
},
'taku25/UEP.nvim', -- Project Explorer (使用する)
'taku25/UCM.nvim', -- Class Manager (使用する)
-- 'taku25/UBT.nvim', -- 使用しない場合は dependencies から削除
{
'nvim-treesitter/nvim-treesitter',
branch = "main",
config = function(_, opts)
vim.api.nvim_create_autocmd('User', { pattern = 'TSUpdate',
callback = function()
local parsers = require('nvim-treesitter.parsers')
parsers.cpp = {
install_info = {
url = 'https://github.com/taku25/tree-sitter-unreal-cpp',
revision = '89f3408b2f701a8b002c9ea690ae2d24bb2aae49',
},
}
end
})
local langs = { "c", "cpp", }
require("nvim-treesitter").install(langs)
local group = vim.api.nvim_create_augroup('MyTreesitter', { clear = true })
vim.api.nvim_create_autocmd('FileType', {
group = group,
pattern = langs,
callback = function(args)
vim.treesitter.start(args.buf)
vim.bo[args.buf].indentexpr = "v:lua.require'nvim-treesitter'.indentexpr()"
end,
})
end
}
},
opts = {
setup_modules = {
UEP = true, -- dependenciesにあるので有効
UCM = true, -- dependenciesにあるので有効
-- UBT = false, -- dependenciesにないのでデフォルトで無効
},
},
},
}
-
結果:
UDEV refresh,UDEV new_classなど、定義されたコマンドのみが有効になります。 - 注意: コマンド自体は定義されてしまうため、実行時にエラーが出る可能性はありますが、初期化時のエラーやWarningはなくなります。
✨ 最後に
もし、これらのプラグイン(UnrealDev.nvim または UEA.nvim)の機能がお役に立ちましたら、ぜひ GitHub リポジトリにスターを付けていただけると、開発者の大きな励みになります!

