Unreal Engine の Commandline Interface - ushell

公式ドキュメント
https://github.com/EpicGames/UnrealEngine/tree/ue5-main/Engine/Extras/ushell

本内容は、上記の内容をより分かりやすく説明し、一般的に利用するためのユースケースや拡張の例を示した記事になります。

はじめに

ushellとは

ushellはUnreal Engine、Unreal Game Syncおよび、さまざまなバッチスクリプト、ツールと対話できるコマンドラインインターフェース(CLI)です。Unreal Shellの略称からushellと呼ばれており、以下のようなコマンドプロンプトのshellを介して実行します。以下の例は、ushellを利用してコマンドラインからプロジェクトのビルドを行う操作を示します。

00.ushell

ushellは遠隔からUnreal Engineを操作するためのコマンドラインを送信することができ、主にエンジニアの利用を対象としています。コードの作成、変更リストの選択、コンソールでの実行など、あらゆる機能に簡単にアクセスできるほか、豊富なタブ補完機能や、永続的に検索可能なコマンド履歴も備えています。より早く、効果的にローカルでテストしたり、バックエンドに接続してテストするのに役立ちます。

メリット

ushellを利用することで、ワークフローにおいて以下のような改善点や利点があります。

  • vsを起動することなく、すばやくビルドが可能
  • ビルド時のターゲットプラットフォームの切り替えなどが容易
  • クックやパッケージなど、バッチファイルを作成せずに実行可能
  • プロジェクト独自のコマンドを作成、追加が可能
  • ターゲットプラットフォームを問わず同一のコンソール上で操作が可能
  • Perforceと連携したスクリプトを容易に作成可能

クイックスタート

ushellを利用するための最小のセットアップ方法を以下に示します。

  1. ushell.bat のショートカットを作成
    ushell.bat を右クリックで選択し、「ショートカットを作成」(Create Shortcut)からショートカットファイルを作成します。

  2. Target に ushell.batまでのパスを設定
    ショートカットを右クリックで開き、[リンク先(T)] の項目にパスを設定します。

  3. Start in にターゲットとするプロジェクトの.uprojectがあるディレクトリを設定
    ショートカットを右クリックで開き、[作業フォルダー(S)] の項目にパスを設定します。

  4. ushellを起動
    ショートカットで作成したファイルをダブルクリックで実行します。

ショートカットのプロパティは次のようになります。

リンク先			: d:\ushell\ushell.bat
作業フォルダー	: d:\perforce\branch\QAGame

あるいは、 ‘–project=’ コマンドライン引数を使用することもできます。

リンク先			: d:\ushell\ushell.bat --project=d:\perforce\branch\QAGame
作業フォルダー	: d:\my\favourite\directory

.project [path_to_uproject] コマンドを使用すると、ushell内からターゲットプロジェクトを変更できます。

Mac/Linux

POSIXベースのプラットフォームでは、ushellは ushell.shによって現在のシェル内で自らを確立します。
引数や作業ディレクトリに関するルールは、上記のクイックスタートガイドに記載されているものが、ushell.shをソースした際にも適用されます。適切なバージョンのPythonが利用可能であること(およびPipをビルドするためのツールチェーンが必要な場合はその準備)が、ユーザーに委ねられています。

利用方法

コマンド例

ushell で使用可能なコマンドとその機能を理解する最良の方法は、いくつかの例を挙げることだと考えるので、ここにその例を示します。コマンドの各詳細については、以降に示します。

.build editor
.build game ps4
.build program UnrealInsights shipping
.cook game ps4
.stage game ps4
.run editor
.run game ps4 --trace -- -ExecCmds="Zippy Bungle Rainbow"
.run program UnrealInsights shipping
.p4 cherrypick 1234567
.sln generate
.info

ushell の各コマンドは ”–help” コマンドを入力することができ (例: .build --help)、入力することで各コマンドの呼び出し方法の詳細や、使用可能なオプションの説明を表示します。

コマンド一覧

以下は実行可能なコマンド引数を一覧で示します。

コマンド 説明
.build プロジェクトをビルドします。
.cook プロジェクトをクックします。
.ddc Cloud DDCを認証します。
.deploy パッケージングのインストール、配置を実行します。
.help 利用可能なコマンドを表示します。
.info エンジン、プロジェクトの情報を表示します。
.kill プロセスを終了します。
.notify コンソールウィンドウを表示します。
.p4 Perforceに関する操作します。
.project プロジェクトを操作します。
.run プロジェクトを実行します。
.sln プロジェクトのVisual Studioソリューションを操作します。
.stage ステージング、パッケージを実行します。
.uat UATをコマンド引数を渡して実行します。
.ushell ushell環境の設定します。
.zen Zenシリーズの機能を利用します。

コマンド詳細

以下に各コマンドの詳細および実行例を示します。頻繁に出てくる用語および略称は以下のようになっています。

単語 説明
target game, editor, client, serverなど、*.Target.cs に該当するターゲットのことを指します
cwd current working directory

以降で各コマンドの詳細とコマンドの実行例を示します。

.build

.build clean game

gameのビルドをクリーンします。

.build editor

Development|Editor構成でビルドを実行します。

.build target [ModuleName]

.build target ModuleName
特定のモジュールMyModuleのみビルドを実行します。

.build target [FilePath]

.build target ModuleName/MySourceFile.cpp
特定のモジュールMySourceFile.cppのみコンパイルを実行します。

.build program [PrgramName]

.build program UnrealInsights
Engine\Source\Programs 以下にあるプログラムを指定してコンパイルを実行します。

.build misc clangdb

Clang データベース(compile_commands.json:ソースコードをコンパイルする際のコンパイルオプションを Clangd に伝えるためのファイル)を生成します。アクティブなプロジェクトがある場合は、そのプロジェクトのコンテキストでデータベースが生成されます。

.build xml

現在のプロジェクトのビルド構成を表示します。構成を変更するには、set、clear、および edit サブコマンドを使用します。

.build xml clear 

ビルド構成から値をクリアします。

.build xml edit

ビルド構成をテキストエディタで開きます。使用されるテキストエディタは次の順序($GIT_EDITOR、$P4EDITOR、システムデフォルト)で決定されます。

.build xml set

ビルド構成を変更します。

.build game win64

WIn64構成でプロジェクトをビルドします。

.cook

.cook

プラットフォームを指定しない場合、基本的にはPCのプラットフォームが選択されます。

.cook windows

プロジェクトをWindowsプラットフォーム向けにクックします。

.cook windows --onthefly

プロジェクトをWindowsプラットフォーム向けにOnTheFlyでクックします。

.cook client

クライアントデータを特定のプラットフォーム向けにクックします。

.cook game

ゲームデータを特定のプラットフォーム向けにクックします。

.cook server

サーバーデータを特定のプラットフォーム向けにクックします。

.cook odsc all

ODSC(On Demand Shader Compilation)サーバーを起動します。-odschost=[ODSC-SERVER-IP]でサーバーを指定します。

.cook odsc client

ODSC(On Demand Shader Compilation)サーバーを起動します。-odschost=[ODSC-SERVER-IP]でサーバーを指定します。

.cook odsc game

ODSC(On Demand Shader Compilation)サーバーを起動します。-odschost=[ODSC-SERVER-IP]でサーバーを指定します。

.ddc

.ddc auth [ServiceName]

.ddc auth MyOrg-MyService
DDCをクラウドDDCのサービス名(MyOrg-MyService)で認証します。

.deploy

.deploy [Target] [Platform]

.deploy game win64
win64プラットフォームでゲームをデプロイします。

.help

.help

利用可能なコマンド一覧を表示します。

.help readme

ushellを説明するreadme.txtの内容を示します。

.info

.info

エンジンやプロジェクトのバージョンなどの情報を表示します。

.info projects

プロジェクトの情報を一覧で表示します。

.info config [Category]

.info config enging
Engineコンフィグの情報を一覧で表示します。

[Category] = Engine, Game, Input, DeviceProfiles, GameUserSettings, Scalability, RuntimeOptions, InstallBundle, Hardware, GameplayTags

.kill

.kill

Devkitかローカルマシン上のプロセスを終了します。

.notify

.notify

ユーザー喚起のためにウィンドウを開きます。(対応するOS, winのみ)

.p4

.p4 authors [path]

.p4 authors D:\Github\UnrealEngine-5.4.3-release\Engine\Config\BaseEditor.ini
指定されたパスに基づいて、各編集者をリストアップします。

.p4 bisect [GoodCL] [BadCL] [[--] script...]

.p4 bisect 12345 67890 do_stuff.bat
GoodCLとBadCLの範囲内の変更リストを二分します。

.p4 cherrypick [ChangeList]

.p4 cherrypick 12345678
1つまたは複数の変更リストを現在のブランチに統合/取り消し、必要に応じて統合記録を解決およびクリアします。

.p4 clean

Unreal Engineブランチから中間ファイルや一時ファイルをクリーンアップします。

.p4 workspace localdir [DepoPath]

新しいワークスペースを作成し、最小限の同期を行います。

.p4 sync

現在のプロジェクトとエンジンディレクトリを指定された変更リスト(または指定がない場合は最新のもの)に同期します。'–all’オプションが指定されている場合、ブランチがローカルで既存の .uproject ファイルを検索し、それぞれを同期するようにスケジュールします。

.p4 sync edit

.p4sync.txt をエディタで開きます。エディタは環境変数 P4EDITOR、GIT_EDITOR、およびシステムのデフォルトエディタから選ばれます。

.p4 sync mini

最小限の機能でブランチを同期します。

.p4 v

現在のディレクトリに対応するクライアントスペックをP4Vで開きます。

.p4 mergedown

親ストリームからのマージダウンします。

.p4 reset

ブランチをデポと一致するように調整します。これは破壊的なアクションであり、ファイルの削除や書き換えを伴うため、慎重に使用してください。

.p4 switch [Stream] [Changelist]

ストリーム間を切り替え、開いているファイルを新しいストリームに統合します。ストリーム名が指定されていない場合は、リストからストリームを選択するよう求められます。

.p4 switch list

現在のブランチに関連する利用可能なストリームのツリーを表示します。

.p4 who [path] [line]

.p4 who D:\Engine\Release-5.4\Engine\Config\BaseGame.ini 1
対象ファイル、行の編集者を特定して変更リストを開きます。

.project

プロジェクトを操作します。

.project [MyProjectName]

.project MyProject
同一ブランチのディレクトリ内で指定のプロジェクトを検索してアクティブにします。

.project [Path to MyProject]

.project d:/projects/MyProject
指定パスのプロジェクトを検索してアクティブにします。

.project branch

アクティブプロジェクトからブランチを解除します。

.project cwd

アクティブなプロジェクトまたはブランチを解除します。

.project active

アクティブなプロジェクトを表示します。

.project list

アクティブなプロジェクトをリストで表示します。

.run

.run editor

プロジェクトをエディタで開きます。

.run commandlet [Command]

.run commandlet cook
プロジェクトをコマンドレットで起動してクックします。

.run progarm

特定のプログラムで起動します。

.run server

ゲームサーバーモードで起動します。

.run client

ゲームクライアントモードで起動します。

.run game

ゲームランタイムモードで起動します。

.run game --attach

ゲームランタイムモードで起動してデバッガをアタッチします。

.run includetool

IncludeTool.exeを起動します。

.sln

.sln generate

アクティブなプロジェクトの.slnソリューションファイルをEngineのルート配下のディレクトリに作成します。

.sln open

プロジェクトのソリューションを開きます。

.sln open 10x

10xEditorでプロジェクトのソリューションを開きます。

.sln open tiny

ソリューションの生成をして開きます。

.stage

.stage game

win64構成でビルド済み実行ファイルとクック済みアセットをステージングディレクトリにコピーしてパッケージングを行います。

.stage game ps4 development pak --build --cook

PS4|Development`構成でビルド、クック、ステージ、パッケージ作成を行います。

.uat

.uat [Command]

UATからスクリプトを実行します。

.uat BuildAndCook -platform=Win64 -clientconfig=Development -serverconfig=Development -cook -allmaps -build -stage -pak -archive
UATからWin64|Development構成においてビルド、クック、ステージ、パック、アーカイブを実行します。

.uat BuildGraph -- -Script=Engine/Build/EditorPerf.xml

UATからBuildGraphのスクリプトを実行します。

.uat RunPGOTests -test=ProfileGo -platform=PS4

UATからPGOテスト用のテストをPS4構成において実行します。

.ushell

.ushell theme apply

シェルの背景及び文字色の変更を適用します。

.ushell theme random

シェルの背景及び文字色のイメージをランダムで表示します。

.ushell theme showcase

シェルの背景及び文字色のイメージをショーケースとして一覧表示します。

.zen

.zen start

Zen Serverを起動します。

.zen stop

稼働中のZen Serverを停止します。

.zen dashboard

Zen Dashboardを起動してGUIでZen Serverの稼働状況を表示します。

.zen status

Zen Serverの稼働状況をコンソール上に表示します。

.zen version

Zen Serverのバージョン情報をコンソール上に表示します。

.zen importsnapshot [Path]

.zen importsnapshot D:\MyProject\xxx\PS5Client\SnapshotDescriptor.json
oplogのsnapshotをインポートします。zen snapshotを利用する際に使用します。

コマンド操作

入力補完 [Tab]

Bash (Readlineなど) でコマンドを編集したり、以前のコマンドを呼び出したりすることに慣れている人であれば、ushell プロンプトもすぐに使いこなせるようになります。

コマンドとその引数には、コンテキストに応じて広範囲な「Tab キーによる補完機能」が用意されています。Tab キーを押すと、コマンドとその引数を見つけることができ、コマンドをすばやく入力できるようになります。

例:入力例と説明

. 利用可能なコマンドを表示
.b “.build” を完了
.run “.run” コマンド引数のためのオプションを表示
.build editor --p “–platform=” を追加 (さらにタブでプラットフォームを補完)

例:”.” 入力後にTab キーを入力すると、以下のように候補を表示します。

例:”.i” 入力後にTab キーを入力すると、以下のように候補のオプションを表示します。
06.Tab補完2

入力履歴送り/戻り [PgUp/PgDn]

ushellで実行されたコマンドは、履歴としてセッション間で保持されます。過去に入力したコマンドに戻る時は PgUp キー、進む場合は PgDown キーを入力することで簡単に呼び出すことができます。
詳細なインクリメンタル履歴検索は、Ctrl+R キーで実行できます。これにより、検索文字列を入力するプロンプトが表示され、一致する最新のコマンドが表示されます。さらに Ctrl+R キーを入力すると、検索文字列に一致するコマンドが前に戻ります (Ctrl+S キーを押すと前に戻る)。履歴検索では、大文字と小文字が区別されます。
2024-08-20_11h16_26

UnrealGameSyncのインテグレーション

UGSは、DeploymentSettings/ToolsDepotPath設定を通じて、Perforce経由で追加のツールを展開することをサポートしています。Tools/ushell/ushell.iniファイルを追加することで、ユーザーは「オプション > アプリケーション設定」からushellのステータスパネルリンクを有効にすることができます。以下にushell.iniの例を示します。

[Settings]
Id=922EED87-E732-464C-92DC-5A8F7ED955E2
Name=ushell
Description=ushell
SafeWhenBusy=1
+StatusPanelLinks=(Label="ushell", FileName="$(COMSPEC)", Arguments="/c \"\"$(BranchDir)\\Engine\\Extras\\ushell\\ushell.bat\" --project=\"$(ProjectFile)\"\"", WorkingDir="$(ProjectDir)")

また、ushell.iniと一緒にushell.zipファイルとしてushellのコピーを配布することも可能です。これにより、ユーザーがどのブランチで作業していても、ushellを展開するのに役立ちます。

コマンド実行

バッチファイル

バッチファイルを使用して ushell をスクリプトから実行することができます。以下の例では、ナイトリービルドを作成する際に、Perforceに同期してビルドするコマンドを示します。以下のバッチファイルを作成することで、ナイトリービルドをスケジュールする際に活用することができます。

@echo off
# カレントディレクトリをプロジェクトに移動してushellを起動
# perforceにsyncしてプロジェクトをビルド
cd /d d:\branch\myuproj
call d:\ushell\ushell.bat
.p4 sync --all
.build editor
.build client ps4

複数コマンド

複数のコマンドを “&&” で連結することもできます。“&&” は前のコマンドが成功した場合に後続のコマンドを実行します。“&” を1つだけ指定すると、後続のコマンドも無条件に実行します。

.build editor && .cook game ps4

外部ターミナルからの起動

WindowsのターミナルやVSCodeのターミナルなど、他のターミナルから ushell を利用することもできます。以下はWindowsのコマンドプロンプトからushellを起動する際の例を示したものです。

%windir%\system32\cmd.exe /d/k d:\ushell\ushell.bat --project=d:\branch\myuproj\myuproj.uproject

これが必要なのは、デフォルトでは ushell.bat がエクスプローラー (またはショートカット) から明示的に起動されたかどうかを検出し、そうでない場合は非対話型スクリプトコンテキストで実行されていると想定するためです (Scriptingを参照)。

代替ホストシェル

上記の内容の多くはcmd.exeがホストシェルであることを前提としています。POSIX(Linux)ベースのプラットフォームであるBashまたはZsh、およびPowerShellなど、他のシェルもサポートしています。ushellのルートフォルダーには、これらの代替シェルを使用するためのスクリプトがあります。
07.shell

PowerShell

PowerShellとの統合は、ushellをモジュールとしてインポートすることで機能します。PowerShellでは、モジュールをその名前と一致するディレクトリ内に格納する必要があるため、powerushellモジュールはushell\powerushell\powerushell.psm1のパスに格納されています。

PSModulePathにushellディレクトリを含めるように設定します(これは、$PROFILEファイル内で行うことができます)。

$env:PSModulePath = "$($env:PSModulePath);c:\path\to\ushell\"
Import-Module ushell

次にモジュールをインポートできます。これはプロファイル内で行うか、特定のターミナルセッションでushellセッションに入る際に行います。

Import-Module powerushell

oh-my-poshのようなPowerShellプロンプト強化ツールを使用している場合、ushellから環境変数を抽出してプロンプトやウィンドウタイトルなどに反映させることができます。ushell関連の環境変数は、以下のコマンドで一覧表示できます。

Perforceの接続設定

.p4コマンドを実行してPerforceへアクセスする場合、Perforceへの接続設定をセットアップする必要がありますが、エンジンがUnreal EngineのブランチからPerforceを介して直接取得したようなケースにおいて、接続設定ファイル(.p4config.txt)はushell起動時に自動的に、ブランチの配下、プロジェクトの配下のディレクトリに作成されます。設定ファイルの内容は以下で示す例のようになっています。

P4CLIENT=Release-5.4
P4USER=Ken.Kuwano

必要に応じてサーバーの接続先を以下のような設定の追加で変更することもできます。

P4PORT=perforce-xxxx:1666

カスタマイズ

ショートカットのカスタマイズ

ホストシェルが標準のWindowsコマンドプロンプトの場合、ushellは$USERPROFILE/.ushell/hooks/startup.bat (例:C:\Users\ken.kuwano.ushell\hooks) をチェックして実行し、ユーザーがセッションを拡張できるようにします。以下は簡単な .bcr エイリアスを追加するサンプルスクリプトです。

@echo off
doskey .bcr=.uat BuildCookRun -- $*

2024-08-27_10h49_24

これは自分専用のコマンドを準備する際に便利です。
以下の例では、ショートカット用のコマンド(.sc1)を用意して、ショートカットコマンドを実行することによってwindowsプラットフォームでのクックを実行することを実現します。スタートアップのバッチファイル内にショートカットコマンドを登録しておくことで、ユーザーはすばやくコマンドを実行することができます。

例: C:\Users\ken.kuwano.ushell\hooks\startup.bat

@echo off
doskey .sc1=.cook windows

ユーザーコマンドのカスタマイズ

概要

ushellはpythonスクリプトによって構築されており、エンジンが提供するデフォルトの機能に加えて、カスタマイズやコードを追加することで、プロジェクト独自のコマンドを追加することも可能です。

ケーススタディ

ushellインスタンスは、"flow"と"channels"で構成されます。"flow"はシェルとコマンドを構築するためのフレームワークを提供し、"channels"はコマンドとツールのグループです。flowは、"channels/"フォルダ内のチャンネルを説明する既知のファイルを探してチャンネルを列挙します。エクスプローラ上では、チャンネルは以下のように見えるかもしれません。

channels/
  mychannel/
    describe.flow.py
    cmds/
      mycmd.py

describe.flow.py は、ushellがサブフォルダをチャンネルとして検出するために使用されます。このファイルには、チャンネルが追加するコマンドやそれらの呼び出し方が記載されています。また、ツールを説明し、取得するためのAPIや基本的なプラグインメカニズムも含まれています。以下は単一コマンドを持つ基本的なチャンネルの例です。

例: C:\Users\ken.kuwano.ushell\channels\mychannel\describe.flow.py

import flow.describe
#----------------------------------------------------------------------
# このチャンネルのコマンドは、"source()"メソッドと"invoke()"メソッドで構成されます。
# source()は、コマンドを実装している.pyファイルの場所とクラスを指定します。
# invoke()メソッドは、シェルからコマンドをどのように呼び出すかを設定します。
# たとえば、"d:\>.mycmd zippy"のように指定します。
my_cmd = flow.describe.Command()
my_cmd.source("cmds/mycmd.py", "MyCmdClass")
my_cmd.invoke("mycmd", "zippy")

#----------------------------------------------------------------------
# チャンネルについて、pip()メソッドは、PyPiリポジトリからpipをインストールするために使用できます。
# version()メソッドは、更新がプルされた際にチャンネルを無効化するために使用できます。
# parent()メソッドは、チャンネルをツリー状に構成し、コマンドをオーバーライドする際の継承順序を決定します。
# この設定により、開発環境内で柔軟かつ整理されたコマンド管理が可能になります。
channel = flow.describe.Channel()
channel.parent("mychannel")
channel.version("0")
#channel.pip(...)

コマンドは、flow.cmd.Cmdクラスを継承したクラスを作成し、docstringやflow.cmd.Arg/Optクラスを使用して説明を設定し、コマンドの引数を指定することで実装されます。前述の例のチャンネルに基づいて、mycmd.pyは次のように見えるかもしれません。

例: C:\Users\ken.kuwano.ushell\channels\unreal\cmds\mycmd.py

import flow.cmd

class MyCmdClass(flow.cmd.Cmd):
    """ This is the description of my command shown when --help is given """
    # """ ここには--"help"を実行した際に表示するコマンドの説明を記述 """

    # 引数やオプションのコマンド、パラメーターに関する説明
    argone = flow.cmd.Arg(str,   "A positional argument that must be given")
    argtwo = flow.cmd.Arg("two", "A positional argument with a default value")
    option = flow.cmd.Opt(False, "An boolean optional argument; --option")
    param  = flow.cmd.Opt(5,     "An optional argument that takes a parameter; --param=6")

    # 引数の補完を追加するには、complete_[argname]メソッドを使用します。
    # 補完メソッドは、イテレータブルなものを返す必要があります
    # (そのため、ジェネレーター関数として実装することも可能です)。
    # これにより、引数の補完機能を実装し、ユーザーがコマンドを入力するときに
    # 適切な候補を提示することができます。
    def complete_argone(self, prefix):
        return ("zippy", "bungle", "george")

    # コマンドのエントリーポイントです。引数はself.argsに事前に設定されています。
    def main(self):
        if self.args.option:
            print(self.args.argument)

上記のように、describe.flow.pyとmycmd.pyを追加した結果、自分のオリジナルのコードを追加することができました。以下は.helpを実行した時に”.mycmd zippy”コマンドが新たに追加されており、実行することが出来るようになったことを示します。

Unrealのブランチを扱うためには、unrealcmdモジュールがあり、これはflow.cmd.Cmdオブジェクトを専門に扱います。最も便利なメソッドは get_unreal_context() で、これを使ってbranch, project, target などにアクセスできます(詳細はchannels/unreal/core/pylib/unreal/_context.pyで確認できます)。以下はその例です。

import unrealcmd

class MyUnrealCmdClass(unrealcmd.Cmd):
    """ This command works with an Unreal branch and/or project """
    # """ このコマンドはUnreal Branchと、またはプロジェクトで動作します """
    argument = unrealcmd.Arg(int,   "...")
    optional = unrealcmd.Opt(False, "...")

    ue_context = self.get_unreal_context()
    if project := ue_context.get_project():
        print("Project name", project.get_name())

その他

既存のコマンドに対して、呼び出し時に使用する単語と一致させることで挿入することができます。例えば、ケーススタディの例を my_cmd.invoke(“build”, “editor”) に変更すると、.build editor を実行することで実際には MyCmdClass.main() が呼び出されます。その後、super().main() を呼び出すことで、エディタのビルドに必要なushellコマンドが実行されます。

また、チャンネルに関するいくつかの詳細もあります。例えば、チャンネルのpylibフォルダは PYTHON_PATH に追加され、モジュールを定義すんることが可能です(これはコマンド間での共有に便利です)。チャンネルはブートプロセスやプロンプト構築にも参加できます。具体的な例はブートやプロンプトコマンドを持つチャンネルで確認できます。

チャンネル名はファイルシステムの場所から派生し、たとえば channels/geoffrey は geoffrey 、channels/mr/hayes は mr.hayes という名前になります。

プロジェクトコマンドのカスタマイズ

現在プロジェクト内で独自のコマンドを用意して反映するカスタマイズはできませんが、前述の「ユーザーコマンドのカスタマイズ」を拡張して実現することが可能です。それにあたって、ユーザー独自のコマンドは Engine/Extras/ushell/channels/flow/nt/boot.bat 内の以下の場所で展開されているので、以下のパス %userprofile% を、プロジェクトで用意したパス(例:d:\projects\TestProject\Scripts)に置き換えることで、プロジェクトのスクリプトを展開するように変更することもできます。

例:Engine/Extras/ushell/channels/flow/nt/boot.bat

:: Make it easier for users to add their own channels
set _channels=%_channels% "%userprofile%\.ushell\channels"
if defined flow_channels_dir (
    set _channels=%_channels% %flow_channels_dir%
)

ushell拡張の準備

現在チャンネルを追加する最良の方法は、クライアントスペックを作成し、//depot/usr/martin.ridgers/ushellをビューに含めるとともに、独自のチャンネルをchannel/Xフォルダにマッピングすることです。一方で、UnrealGameSync(UGS)でデプロイされたushellを拡張するのは現時点ではほぼ不可能で、その理由は以下の通りです。

  1. 新しいバージョンが利用可能になるとUGSがデプロイメントを上書きする
  2. flowがデプロイされた場所のchannels/サブフォルダのみを参照するため

しかし、ユーザーが任意のushellディストリビューションでチャンネルを追加できるように、この仕様は今後変更される予定です。

UE4への統合

ushellスクリプトはUE5.3のブランチから導入されたものですが、ushellのコード(/Engine/Extras/ushell)を最新のブランチ ue5-main などからUE4の同じディレクトリにコピーするなどして配置することで、変更を加えることなく殆ど同じ方法で利用することが可能です。
スクリプト自体がUE4で利用することも考慮したコードになっているため、UE4で利用する場合はプラットフォーム名を ”WindowsNoEditor” で指定するなど、少し考慮が必要ですが、ほぼほぼそのまま利用できるはずです。当然のことですが、zenシリーズなど、元々UE5に存在する機能、UE4に存在していない機能などは利用することができません。

4 Likes