関連ブログ
- [UE4][UE5]開発環境の容量を少しでも減らす 2024.08.14UE
- [UE5] PushModel型のReplicationを使い、ネットワーク最適化を図る 2024.05.29UE
- [UE5]マテリアルでメッシュをスケールする方法 2024.01.17UE
CATEGORY
2019.12.11UE4UE/ Blueprint
執筆バージョン: Unreal Engine 4.23 |
こんにちは!本日は、UE4で作成するアプリケーションに渡される
コマンドライン引数の値を、Blueprint上で取得したいと思います。
C++からであれば、以下のようなコードで取得できます。
関数をBlueprintへ公開すれば、Blueprintからでも利用可能です。
1 |
#include "CommandLine.h" |
// Key は、”SomeKeyName=” のように、”=” までつける必要があるよ。
FString USomeUtility::GetCommandLineValue(const FString& Key, bool& IsSucceeded)
{
FString Value;
IsSucceeded = FParse::Value(FCommandLine::Get(), *Key, Value);
return Value;
}
しかし…なんとか…なんとかBlueprintだけで完結できないものか。
コマンドライン引数っぽい関数とかないかなー。こう、 “GetCommandLine” 的な…
なんかいるー!!
えっなにじゃあパースもできたりするの??
うっ…これは、レベルを開くときに渡すオプションをパースするやつっぽい。
GetCommandLineの結果をTrimして 先頭に “?” をつけて ” -” を “?”に変えたのを突っ込めばそれなりに
どうやら、コマンドライン引数のパースはできないようですね!
しかし、コマンドライン引数として渡された文字列全体はGetできる。
ここは、Blueprintのノードだけで、コマンドライン引数をパースする関数を作ってみましょう!
さて、ここからは、取得したいコマンドライン引数の形式を、以下のいずれかである、という前提で解説します。
-KeyName=SomeValue
-KeyName=”Some Value”
引数のキーの前後にそれぞれ “-“、”=” があり、
引数の値にスペースを含む場合は、ダブルクォーテーションで囲んでいます。
とりわけ後者は、ファイルパスを渡す際などによくあるパターンですね。
Windowsの主要なフォルダにもスペースを含むパスがありますし、これは対応しておきたいです。
それでは、先ほど登場した、C++の FParse::Value() の実装を参考に、
以下のように組んでみることにします。
できました!それでは、テストしてみましょう。
BeginPlayから作成した関数を呼び出すようにします。
メニューバー [Edit]-[Editor Preferences…] を開き、”Additional Launch Parameters” を検索します。
(“la para” ぐらいで十分絞り込めます…)
ここに例えば以下のような値をセットし、起動時にコマンドライン引数として渡されるようにします。
さて、それでは、Standalone起動してみましょう。
できました!
今回は特定のコマンドライン引数に指定された値を、Blueprintだけで取得してみました。
限定的な書式のみの対応ですが、UE4で作ったアプリで何かを指定しつつ起動してみたい!という用途には十分使えるかと思います。
もし活用できそうな場面がありましたら、ぜひお試しください。