TRLE Level BOX
This Site is an unofficial site by NGLE fan.

NGLE講座

■TestPosition=

サンプルレベル

http://www.trlevelmanager.eu/download/animationtutorial.zip
HelpフォルダのAnimationCommand.htmに詳しい説明があります。

構文

TestPosition=IdTestPosition, Flags(TPOS_...), Slot Moveable, XDistanceMin, XDistanceMax, YDistanceMin, YDistanceMax, ZDistanceMin, ZDistanceMax, HOrientDiffMin, HOrientDiffMax, VOrientDiffMin, VOrientDiffMax, ROrientDiffMin, ROrientDiffMax

記述場所

[Level]セクションで使用します。

インスタンスの最大値

レベルセクションの最大インスタンス数:99

使用例

;TestPosition1番に、ANIMATING1に対して、X軸の範囲、Y軸の範囲、Z軸の範囲、
;横方向の範囲を設定する。
TestPosition=1, IGNORE, ANIMATING1, 0-512, 0+512, 0-127, 0+127, -860-300, >
             -860+300, 0-$1000, 0+$1000, 0,0,0,0

機能概要

ララの他のアイテム(指定されたSlotを持つすべてのMoveable)に対する正しい位置を設定します。
次に、条件(ENV_ITEM_TEST_POSITION)を有効にするには、AnimationコマンドのDistanceForEnvフィールドか、MultEnvConditonコマンドのExtraフィールドにこのコマンドのIDを入力する必要があります。
混乱するかもしれませんが、Testという名前がついていても、実際のゲームで使用できます。

記述時の注意点・備考

このコマンドで設定する値を調べるには、Diagnosticコマンドを有効にする必要があります。

各フィールドの説明

IdTestPosition
このフィールドには、このコマンドのIDを入力します。
このIDはトリガや他のスクリプトコマンドを実行するときに使用します。同じ[Level]セクションにあるこのコマンドの最初には「1」を使用し、2番目のコマンドには「2」を使用します。
IDの有効範囲は1から999です。
このIDはAnimationコマンドのDistanceForEnvフィールドまたは、MultEnvConditionsコマンドのExtraフィールドに入力します。
Flags(TPOS_...)
このフィールドには、いくつかの特殊機能を設定するため、1つ以上のTPOS_コンスタンツを入力します。
IGNOREと入力すると、TPOS_コンスタンツを省略できます。
NG_Center【Reference】タブのTPOS_コンスタンツも参照してください。
Slot Moveable
このフィールドには、チェックするアイテムのスロット(番号または名前)を入力します。
備考:FlagsフィールドにTPOS_TEST_ITEM_INDEXコンスタンツを追加した場合、このフィールドにチェックするアイテムのインデックスを直接入力する必要があります。
NG_Center【Reference】タブのTPOS_TEST_ITEM_INDEXコンスタンツも参照してください。
XDistanceMin and XDistanceMax

これらのフィールドには、ララの原点Xとテストするアイテムの原点Xの最小有効距離と最大有効距離を入力します。
X軸が何であるかを理解するには、画像を参照してください。
ngle00350.jpg
薄い青色で、X軸とその向きが表示されています。
これらの2つのフィールドの距離は、ララの原点X - アイテムの原点Xによって与えられます。
このため、通常、入力する範囲は、XDistanceMinでは常に負の値になり、XDistanceMaxでは正の値になります。

例えば、以下のような場合
XDistanceMin = -256
XDistanceMax = +256

ララとアイテムのX軸の距離が1クリック(1セクターは1024単位のため、1クリックは256単位)内であることを表しています。
逆に、XDistanceMinとXDistanceMaxを0に設定すると、ララと他のアイテムが、1ピクセル程の距離も存在しないことになります。とにかく、0と0を設定するのは慣れが必要なため、やめておいたほうがよいでしょう。
他の例をみてみましょう。
テストするアイテムがコーヒーカップであり、ゲーム中のカップがX軸と+100の距離である場合、これはカップがララの左手の近くにあることを意味します。距離が-100であれば、カップはララの右手に近づくはずです。
X軸(または他の軸)の有効範囲を計算するときは、TestPositionの比較で使用される「相対軸」の概念を覚えておく必要があります。
相対軸
TestPositionの比較を理解するのは複雑です。軸はララの現在の方向に相対的ですが、通常3D世界ではX、Y、Z座標は固定していると考えています。
ところがX軸の距離を計算すると、TRNGは3D世界の起点をララの原点に固定し、ララが向いている方へ3D世界を回転させます。
画像を参照してください。
ngle00350.jpg
上記の理由から、Zの距離を256単位として設定すると、ララの前に、他のアイテムが1クリックの距離にあることになります。3D世界で(ゲーム画面から見て)ララが他のアイテムの左または右にある場合は、ララの原点と向いている方向との比較を実行して位置が変更されます。つまり、ララが向いている方向が新しいZ軸の方向になります。
説明は複雑ですが、サンプルレベルを使って理解することができ、非常にうまく動作することがわかります。
注:この方法はEidosのプログラマーによって作成されたものです。

YDistanceMin and YDistanceMax

これらのフィールドには、Y軸上の距離範囲を入力します。
上の画像を参照してください。Y軸は白色です。

X軸上の距離範囲の説明は、Y軸上に対しても同じです。とにかくこの場合はさらに複雑です。なぜなら、ララのXとZの原点は常に同じですが、彼女の体の半分であるララの原点Yは、現在のアニメーションに応じて変化します。
Diagnosticコマンドを使ってララの原点Yの意味するものを理解することをお勧めします。
ゲームでは、ララについて多くのことがわかります。
「Cy = ...」の値を見てください。
それが何を意味するのかを理解するには、床が0クリックのサンプルプロジェクトを作成し、4セクターを4クリック押し上げて、フロアに4クリックの穴をあけます。
そしてララが床にいるとき、Cyが何であるかわかるでしょう。
部屋の床が0クリックならCyは「0」になり、ララが4クリックの高さに上がるとCyがCy= -1024になります。なぜなら、Y軸は負の数で上がるからです。さらに、ララが4クリック深い穴にいくと、平らな床よりも4クリックの差があるので、Cyは+1024になるはずです。
今度は、ララが4クリック上昇したブロックの端にぶら下がっている場合、別のアニメーション(ぶら下がっている)があり、このアニメーションでは原点Yはララの足にはなく、ララの膝のあたりです。(!)
サンプルプロジェクトを作成し(床が0クリック)、水のある部屋を作成すると、ララが水面に浮かんでいるときの原点Yは、水面のY座標とCy値は同じようになるはずです。この場合、原点Yはララの首にあります。

したがって、TestPositionコマンドを作成するときは、最初に、カスタムアニメーションを開始する前のララの原点Yの位置を確認し、その位置を参照してY範囲を作成する必要があります。

それでは原点Yが彼女の足にあるときの例をみてみましょう。

アイテムが小さなボールで、それがララの前にある場合、ボールがララの頭のような高さになると、その距離は(約)+ 600になります。距離が負の場合、例えば-1024ならボールは、ララよりも1セクター下の穴にあります。

X軸上の距離とは異なり、Y軸上の距離の範囲を設定すると、Yピボット(Y軸上のララの原点Y)が足元にあるとき、同じ値では - と+記号のどちらを使用するかわからないので、minとmaxとは異なる絶対値を必要とする可能性があります。

例えば、ララの頭の前に(ララの頭のように大きく、球の中心にYの原点がある)上記の球がある場合、以下のように設定する必要があります。
YDistanceMin = 550
YDistanceMax = 650

ご覧のように、上記の値に負の値はありません。
これは、ララの身長が約3クリックであるため、256 * 3 = 768単位(正確には800単位)になります。
ボールがララの頭の前にあって、ボールがララの首よりも低くならないようにして、足(原点Y)からの距離が約512単位になるようにするには、YDistanceMinに550を設定します。なぜなら、550以下だと、ボールがララの足に非常に近くなるからです。
一方でララの頭の上にはボールを置きたくないし、ララの身長が768のため、最大距離は768になります。(ここでは650を使用しました)
相対軸(上の段落を参照)に取り組むことを覚えておいて、ララやアイテムの原点Yが正または負であることは重要ではなく、距離が常に正しい方法で働きます。
(ボールの例で)Y軸上の距離が0であるとき、ボールがララの足の前にあり、したがって誤った位置になります。
ララの大きさ
起立姿勢でのララのサイズとメッシュの位置をよりよく理解するには、画像を参照してください。
ngle00397_01.jpg
歪みがあるにもかかわらずパースペクティブビューの場合は、ララのサイズを次のように仮定できます。
起立姿勢の高さ(画像Aまたは画像C)= 800
起立姿勢の手から手への幅(画像A)= 320
側面からのララの幅(画像C)= 130
しゃがんだ時の高さ(画像D)= 320
クライミング時の高さ(画像B)= 600

ZDistanceMin and ZDistanceMax
これらのフィールドには、Z軸上の距離範囲を入力します。
Z軸は常にララが向いている方向です。
Zの差(Lara.Z - Item.Z)が負の場合、これはアイテムがララの前にあることを意味し、差がプラスの場合はララがアイテムを通過し、今度は彼女の後ろにあることを意味します。
HOrientDiffMin and HOrientDiffMax

これらのフィールドには、ララとアイテムの水平方向(向き)の関係(差異)の許容範囲を入力します。
水平方向は、Lara.HorizonalOrient - Item.HorizontalOrientによって与えられます。
「水平」の意味を理解するために、画像を参照してください。
ngle00397_02.jpg
ララ(または他のアイテム)のデフォルトのH向きは0です。これは、マップにアイテムを配置した直後にNGLEで表示される位置です。
H方向の違いがどのように変化するのか、サンプルレベルを使って理解することができます。

向きが上手く調整できない場合はアイテムの向きをMetasequoiaで変更することも方法の1つです。その理由はSWITCHオブジェクトのOCB|-1」の時と同じで、アイテムにより向きが異なるためです。
詳しくはアイテムの正面についてを参照してください。

正しい距離範囲(前のフィールドを参照)を設定しても、水平方向の違いが間違っていれば、ララを(正しく)アイテムに近づけさせることができますが、アイテムはララに正しい側を示していません。
例えば、キャビネットのようなオブジェクトを作成し、ララがロックを強制的に開くアニメーションを作成する場合、ララがキャビネットオブジェクトに近いだけでなく、ララがロックの前にいなければなりません。なぜなら、もしララがキャビネットの裏側にいる場合、その距離は正しいかもしれませんが、アニメーションは意味を持たないからです。
最初のステップとして、H方位の理想的な差異を見つけて、少なくともわずかな誤差がある範囲を作成する必要があります。
例えばキャビネットの場合、差は$8000(32768)(直面している)と範囲は最小値が例えば$7f00であり、最大値が同じ値(+/- $100)、すなわち$8100です。

VOrientDiffMin and VOrientDiffMax

これらのフィールドには、垂直方向の差の範囲を入力します。
画像を参照してください。
ngle00397_03.jpg
この範囲はそれほど重要ではありません。100回のうち99回は、両方のアイテム(ララと他のアイテム)でVOrientation=0だからです。

範囲をMin = -200、Max = +200として設定できます。
ララが別のVOrientを持っている非常にまれなケースは、ダッシュしているとき、水中で泳ぐとき、または彼女がダイビングしているときです。
とにかく、サンプルレベルを使って理解することができます。

ROrientDiffMin and ROrientDiffMax
これらのフィールドには、ララとアイテムの間の回転方向の差の有効範囲を入力します。
おそらく「回転」は、このような矛盾を説明する正しい言葉ではありませんが、画像を参照してください。
ngle00397_04.jpg
値の変更はほとんどありません。常に0にする必要があるため、ララとアイテムの差もゼロにする必要があります。
とにかく、ララがダッシュで走って、左右に曲がっている時に、この値は少し変化しています。
-200 + 200の範囲で入力できますが、ほとんどの場合、おそらく0と0を入力することもできます。

関連項目

Animation=Diagnostic=LogItem=MultEnvCondition=_NEW Kayak