UDN
Search public documentation:

UnrealScriptPreprocessorJP
English Translation
中国翻译
한국어

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

UnrealScript プリプロセッサ(UPP)

ドキュメントの概要:本書は、 UnrealScript プリプロセッサの構文と機能の説明。

ドキュメントの変更ログ: Brian Ladd? により作成。Ron Prestenback? によりアップデート。Richard Nalezynski? により管理。

概要

Unreal Engine 3 では、UnrealScript コンパイラがプリプロセッサをサポートするようになりました。プリプロセッサは C++ プリプロセッサとほとんど同じように動作し、*マクロ*介した条件付きコンパイルをサポートするのに最適です。

基本

マクロ プロセッシングが、Unrealscript コンパイルの に起きます。マクロ プロセッシングは、分離した段階であるため、Unrealscript の辞書的な規定に関係しません。

スコープ

マクロはファイル スコープです。これは、スクリプト クラス (.uc) ファイルのライン X で定義されたマクロは、そのファイルのライン X+n のみで使用可能であり、他のファイルでは (このファイルが .uc ファイルに含まれていない限り) 使用可能でないということです。しかしながら、プロジェクトのルート フォルダ (つまり Development\Src\MyProject\Globals.uci) で Globals.uci を作成することで、これらのマクロはパッケージ内のすべてのクラスで自動的に利用可能になります。

マクロの使用

マクロは、マクロ名の前に ` (backtick 文字)を使用して始めます。したがって、 hello マクロをパラメータなしで展開するには、次の行が役に立ちます。

  `hello
  
等しく、印(tick)の後にマクロ名を { } で括弧に入れることができます。
  `{hello}
  
これにより、便宜上空白文字を配置していないテキストの真ん中にマクロの展開を「挿入する」ことが可能になります。
  hippo`{hello}potamus
  

しかし、どのようにして hello マクロを定義するのでしょうか。ビルトイン マクロ define は、 C++ 定義と非常に似た機能です。

  1. 定義キーワードは、少なくとも 1 つの空白文字の後に続けます。
  2. 新しいマクロ名(および潜在的な関数パラメータ リスト)は、少なくとも 1 つの空白文字の後に続けます。
  3. マクロのボディの定義

したがって、 hello は、次のように定義されます。

  `define   hello   "Hello, World!"
  
その後、__`hello__ は、*"Hello, World!"* で置換されます(引用符をつけて完成)。マクロ展開のすべての結果は、マクロを展開する機会を求めて再びスキャンします。マクロの展開は、順番に展開するマクロを含むことができます。このことは、「無限に再帰的な」マクロを書くことができることも意味します。

マクロ パラメータ

マクロは位置的に、マクロ名の直ぐ後に括弧の間にコンマで区切ったリストで渡されます。このリスト MUST の左小括弧は、マクロ呼び出しの部分であることが認識できるように、マクロ名の直ぐ後にきます。マクロ パラメータの詳細については、ビルトイン マクロ define に関する notes below (下の注)を参照してください。

ビルトイン マクロ

define

`define <macroname>[<(paramA[,paramB...])>] [<macrodefinition>]
名前のついたマクロを定義して、与えられた定義に対して展開します。定義が提供されない場合、マクロは定義されますが、空の文字列に対して展開します。

マクロのパラメータは、タイプを持たない関数パラメータ リストで、マクロ名の直後に指定されます。マクロ定義では、パラメータは名前で参照され、backtick でプレフィックスされます。例:

  `define DeclareInt(x) var int `x;
  

特別なマクロ `# は、指定されるパラメータの数を表し、マクロ定義内でのみ参照できます。

if / else / endif

`if(<value>)
`else
`endif

これら 3 つのマクロは、共に条件付きコンパイルをサポートします。<value> パラメータが処理され、空でない文字列に展開される場合、if-check は True と評価され、そうでない場合は、False と見なされます。

`if`else (存在する場合) または `endif の間のテキストは、条件が True の場合、処理される出力に放出され、条件が True でない場合、行の最後の文字のみが放出され、処理されたテキストの行数が、オリジナルの テキストの行数と合うようにします。

(オプション) `else`endif の間のテキストは、オリジナルの条件が False である場合に放出されます。

放出されないコードにあるマクロは、評価されないことを覚えておいてください(入れ子になったレベルをトラックするためにのみ処理される `if グループ化を除きます)。

include

`include(<filename>)
現在の位置で、ファイル <filename> のテキストを含みます。デフォルトでは、<filename> は、ゲームの .ini ファイルの Editor.EditorEngine セクションの EditPackagesInPath によって指定されるディレクトリに関連します。ファイル名だけを指定する場合(ディレクトリなしの場合など)、現在コンパイルされているパッケージのためのクラス ディレクトリにある include ファイルを検索します。

isdefined

`isdefined(<macroname>)
`notdefined(<macroname>)

定義に関係なく、マクロが定義されている(いない)場合、文字列「1」に評価されます。条件付きコンパイルで役に立ちます。

undefine

`undefine(<macroname>)
<macroname> の現在の定義を削除します。マクロ パラメータの名前 (`cond, `txt, `#, etc) には機能しません。

log / warn

`log(string OutputString, optional bool bRequiredCondition, optional name LogTag);
`warn(string OutputString, optional bool bRequiredCondition);

Object.uc で宣言される LogInternal と WarnInternal 関数のラッパー マクロです。bRequiredCondition が指定されていると、条件が true の場合にのみメッセージがログされます。

スクリプトが -final_release スイッチとともにコンパイルされていると、どちらのマクロも無効化されます。

logd

`logd(string OutputString, optional bool bRequiredCondition, optional name LogTag);

デバッグ モードでスクリプトがコンパイルされている場合にのみ有効化されるという点を除き、`log マクロとほとんど同一です。

スクリプトが -final_release スイッチとともにコンパイルされていると、このマクロは無効化されます。

assert

`assert(bool bCondition);

Assert 内部式のラッパー マクロです。

スクリプトが -final_release スイッチとともにコンパイルされていると、このマクロは無効化されます。

コマンドライン インタラクション

どれがスクリプト プリプロセッサに影響を与えるかを決定するのに多数にスイッチをパスすることができます。

debug
UPP にマクロ、`debug を定義させます。
final_release
UPP にマクロ、`final_release を定義させ、すべてのラッパー マクロ (`log、`logd、`warn、`assert) を無効化します。
nopreprocess
前処理中のすべてのマクロとコメントをオフにして、入力ファイルからクラス ファクトリへ正確なテキストを渡します。これは第一義的には、タイミングとスピードをテストするためのものですが、必要なテキスト ファイルが、マクロの外のマクロ送信勧誘文字を含む場合は、ファイルをコンパイルするために使用できます。
intermediate
コンパイルするファイルの処理されたバージョンを保存するように UPP に命令します。これをソース ツリー全体に対して行うことは、時間と容量を使用することになりますが、マクロのエラーを追跡するときは大変貴重な存在になり得ます。ファイルは、
GameDirectory/PreprocessedFiles/<PackageName>/<ClassName>.uc に保存されています。