Unreal Engine 5で、歩行、ダッシュ、ジャンプ、パージ機能、敵AIなどを実装するために使用したノードを、使用例付きで分類してみました。
変換用のCast To~ノード、取得用のGet~ノードは、ノードの目的と名称が一致するので省きます。
BPはブループリントで使えるもの、ABPはアニメーションブループリントで使えるものを表しています。
イベント処理
ゲーム内で対応するイベントが発生した時に実行され、処理の起点となるノードです。
「Event Begin Play」:BP
ゲームのプレイ開始時に処理を実行します。
入力マッピングコンテキストの追加や、変数の初期設定のために使っています。
「Event Blueprint Initialize Animation」:ABP
アニメーションが初期化されたときに処理を実行します。
Character Movement Componentやキャラクターブループリントの参照を取得するために使っています。
「Event Blueprint Update Animation」:ABP
アニメーションが更新されたときに処理を実行します。
キャラクターの現在の移動速度などを取得するために使っています。
「Event On Landed」:BP
Characterの移動状態が、Fallingから別の状態に移行するときに処理を実行します。
着地時に重力加速度を1に戻すために使っています。
「’入力アクションのファイル名’」:BP
入力アクションに対応する、プレイヤーからの入力があったときに処理を実行します。
キーボード入力に対応した移動入力をキャラクターに与えるために使っています。
フロー制御
処理の分岐など、処理の流れを決めるノードです。
「Branch」:BP/ABP
BooleanがTrueの場合に処理A、Falseの場合に処理Bを実行します。
ジャンプの溜めフラグがTrueなら処理を終了し、Falseならキャラクターの移動速度を決定して、入力を与えるために使っています。
「Delay」:BP/ABP
指定した秒数の間、処理の実行を保留します。
経路探索の実行間隔を調整するために使っています。
「For Each Loop」:BP/ABP
指定した配列の各要素に対して、LoopBodyピンに繋いだ処理を繰り返し実行します。
キャラクターのスケルタルメッシュにある各ソケットに、パーツのスタティックメッシュを設定するために使っています。
「Sequence」:BP/ABP
Then 0から順に処理を実行します。
順番に処理を実行するために使うほか、処理を整理して可読性を良くするために使っています。
「While Loop」:BP/ABP
条件がTrueの間、処理を繰り返します。
経路となる点の配列の要素のうち、敵キャラクターから一定範囲内にある点の要素を削除するために使っています。
判定
比較や確認を行い、Booleanで結果を出力するノードです。
「And Boolean」:BP/ABP
Boolean AとBoolean Bが両方Trueの場合にTrueを返します。
キャラクターの移動速度が閾値以上、かつ加速度が0ではないことを確認するために使っています。
「Greater Equal」:BP/ABP
Aの値がBの値以上の場合にTrueを返します。
前方向への移動速度が閾値以上であることを確認するために使っています。
同様にLess EqualはAの値がBの値以下の場合にTrueを返します。
「In Range (Float)」:BP/ABP
ValueがMinとMaxの間の値の場合にTrueを返します。
Inclusive Min/Maxにチェックを入れるとMin/Maxの値を含んだ範囲、外すとMin/Maxの値を含まない範囲で判定されます。
内積の値が±10以内かどうか判定するために使っています。
「Is Valid」:BP/ABP
オブジェクトが有効な場合にTrueを返します。
入力マッピングコンテキスト追加時に「Enhanced Input Local Player Subsystem」を確認するために使っています。
「Is Falling」:BP/ABP
Character Movement Componentが飛行中、液体中、歩行中ではない場合にTrueを返します。
移動速度を歩行用の値にするか、滑空用の値にするか判定するために使っています。
同様に「Is Flying」、「Is Swimming」、「Is Walking」は飛行中、液体中、歩行中にTrueを返します。
「Is Not Empty」:BP/ABP
配列に要素がある場合にTrueを返します。
Find Path to Location Synchronouslyで取得した経路情報のPath Pointsの配列に、要素があるかどうか確認するために使っています。
「Not Equal」:BP/ABP
AとBが等しくない場合にTrueを返します。
キャラクターの加速度ベクトルが0ではないことを確認するために使っています。
「Nearly Equal (Float)」:BP/ABP
Float AとFloat Bの差の絶対値がError Toleranceより小さい場合にTrueを返します。
下半身の現在方向と目標方向の角度が、ほぼ180°であることを確認するために使っています。
「Vector Is Zero」:BP/ABP
Vector Aのすべての値が0の場合にTrueを返します。
移動操作の入力ベクトル有無を確認するために使っています。
生成
ActorやComponentを生成するノードです。
「Add Static Mesh Component」:BP
ActorにStatic Mesh Componentを追加します。
ゲームプレイ開始時に、キャラクターのスケルタルメッシュにパーツのスタティックメッシュを追加するために使っています。
同様に、「Add Skeletal Mesh Component」でスケルタルメッシュコンポーネントを追加できます。
「Spawn Actor From Class」:BP/ABP
クラスとTransformを指定してActorを生成します。
銃から発射する弾を生成するために使っています。
削除
ActorやComponentなどを削除するノードです。
「Destroy Component」:BP/ABP
指定したActor Componentを削除します。
パーツのStatic Mesh Componentを削除するために使っています。
値の作成
情報の入力、または組み合わせで新しい値を作成するノードです。
「Make Array」:BP/ABP
複数の値を入力ピンに繋いで、配列を作成します。
探索経路を取得する変数の配列に初期値を設定するために使っています。
「Make Literal Name」:BP/ABP
指定した文字列でName型の値を作成します。
ブラックボードのキー名を指定するために使っています。
「Make Literal Float」など、他の型の値を作成するノードもあります。
「Make Transform」:BP/ABP
Location、Rotation、Scaleから新しいTransformを作成します。
弾発射位置のLocationと弾発射方向のRotationから、弾を生成するTransformを作成するために使っています。
「Make Vector」:BP/ABP
3つの値から新しいVectorを作成します。
移動のための入力アクションから取得した値を、移動方向のベクトルとして扱うために使っています。
「Make Rot from XZ」:BP/ABP
Vector XをX軸、Vector ZをZ軸とするRotationを作成します。
XとZが直交していない場合、Xは固定でZの方向が調整されます。
下半身方向をX軸、ワールド座標のZ軸方向をZ軸とするRotationを作成するために使っています。
「Vector Up」:BP/ABP
上方向の単位ベクトルを作成します。
Rotationを作成する際のZ軸方向とするために使っています。
値の分解
複数の値を持つ型を分解して、個々の値を抽出するノードです。
「Break Hit Result」:BP/ABP
Hit Result構造体を分解して、個々の値を抽出します。
Line Trace For Objectsで取得したHit Resultから、Hitした位置の座標を抽出するために使っています。
「Break Vector」:BP/ABP
Vector型からX、Y、Zの値を抽出します。
敵キャラクターから経路となる点へのVectorのX、Y成分を取得するために使っています。
演算
いくつかの値を使い、計算結果を得るノードです。
「Absolute (Float)」:BP/ABP
入力値の絶対値を返します。
後退時の速度係数の絶対値を取得するために使っています。
「Add」:BP/ABP
AとBを足し算した結果を取得します。
弾発射用ソケットの位置と、発射位置をずらすためのオフセット値から、弾の生成位置を取得するために使っています。
「Clamp」:BP/ABP
指定した値がAからBの範囲から外れている場合、値をAまたBに置き換えて取得します。
前後方向への移動入力のスケールを、-0.5~1の間の値で取得するために使っています。
「Cos (Degrees)」
入力値(角度)に対するコサインの値を返します。
スラスター角度のコサインを計算するために使っています。
「Map Range Clamped」:BP/ABP
ValueをIn Range A~Bの範囲に制限した上で、Out Range A~Bの範囲の対応する値に変換した値を返します。
例えば、+100を‐10~+10の範囲に制限すると+10になり、それを‐1~+1の範囲の対応する値に変換すると、+10が+1に変換され、+1を返します。
下半身の向き(±90°)を移動速度に反映するための係数(±0.3)に変換するために使っています。
「Min (Float)」
2つ以上の入力値の中で最小の値を返します。
ピンを追加することで入力値の数を増やせます。
複数ある下半身旋回制限の上限値から最小の値を取得するために使っています。
同様に、「Max (Float)」で最大値を取得できます。
「Multiply」:BP/ABP
AとBを掛け算した結果を取得します。
横方向への移動入力のスケールに係数掛けするために使っています。
「Select Float」:BP/ABP
BooleanがTrueの場合にFloat A、Falseの場合にFloat Bを返す。
空中にいる場合は滑空用の移動速度、空中にいない場合は歩行用の移動速度を選択するために使っています。
同様に、「Select Vector」を使ってVectorを選択して返すことができます。
「Sign (Float)」:BP/ABP
Float Aの符号を取得します。
Aが0より大きければ1、0なら0、0より小さければ-1を返します。
計算した内積の符号を取得するために使っています。
「Subtract」:BP/ABP
AからBを引き算した結果を取得します。
重力加速度とブースターの上昇加速度から、落下加速度を計算するために使っています。
Vector演算
ベクトルの回転や座標変換を行うノードです。
「Distance2D (Vector)」:BP/ABP
2点のXY平面上の距離を取得します。
敵キャラクターと経路となる点のXY平面上の距離を取得するために使っています。
「Get Forward Vector」:BP/ABP
Rotationを指定して、ワールド座標での前方向ベクトル(=X軸の正方向)を回転します。
Controllerのローカル座標での前方向ベクトルを、ワールド座標に変換するために使っています。
同様にGet Right Vectorで右方向ベクトル(=Y軸の正方向)、Get Up Vectorで上方向ベクトル(Z軸の正方向)を回転します。
覚え書き
以下は方向ベクトルのローカル座標からワールド座標への変換の詳細です。
まず、ワールド座標内にControllerが配置されている状態をイメージします。
この時、ワールド座標での右方向ベクトルを、ワールド座標でControllerのRotationを使って回転すると、回転後のベクトルはControllerの右方向ベクトルと一致する、ワールド座標のベクトルになります。
ローカル座標からワールド座標に変換するとは、ローカル座標のベクトルをワールド座標で表すということなので、座標変換できたと言えます。
「Dot Product」:BP/ABP
2つのVectorのドット積(Vector同士の演算の場合は内積と同義)を計算します。
XY平面上で、キャラクター移動速度ベクトルを下半身方向ベクトルに投影した長さを計算するために使っています。
「Inverse Transform Direction」:BP/ABP
Vector Directionをワールド座標からTransform Tのローカル座標に変換します。
キャラクターの移動速度を、ワールド座標からキャラクターのローカル座標に変換するために使っています。
「Negate Vector」:BP/ABP
Vector Aの反対方向ベクトルを返します。
移動方向と反対方向のベクトルを取得するために使っています。
「Normalize」:BP/ABP
Vector Aを正規化(=ベクトルの大きさを1にすること)します。
ジャンプの方向ベクトルを正規化するために使っています。
「Rotate Vector」:BP/ABP
Vector AをRotation Bで回転します。
ActorのRotationを使って、Actorローカル座標のジャンプ方向ベクトルを回転し、ワールド座標に変換するために使っています。
「Rotate Vector Around Axis」:BP/ABP
Axisを回転軸として、In VectをAngle Degの角度分回転します。
キャラクターの下半身方向ベクトルを、Z軸周りに回転させるために使っています。
「Transform Direction」:BP/ABP
Vector DirectionをTransform Tのローカル座標からワールド座標に変換します。
プレイヤー操作による移動入力方向を、キャラクターのローカル座標からワールド座標に変換するために使っています。
「Vector Length XY」:BP/ABP
Vector AのXY平面上の長さを取得します。
移動速度の大きさを取得するために使っています。
Vector Length XY Squaredという長さの2乗の値を取得するノードもあります。
こちらは平方根を計算しない分、計算コストが少ないので、大小の比較をするだけで良い場合などに使っています。
Rotation演算
Transform、Vector、Rotationから新しいRotationを計算するノードです。
「Find Relative Look at Rotation」:BP/ABP
基準のTransformを目標位置に向けるための回転を取得します。
敵キャラクターをプレイヤーキャラクターの方向に向けるための、Z軸周りの回転を取得するために使っています。
同様に、「Find Look at Rotation」は基準のVectorを目標のVectorに一致させるための回転を取得します。
移動回転
Pawnに移動入力を与えたり、回転させたりするノードです。
「Add Actor World Rotation」:BP/ABP
Actorをワールド座標上で、指定Rotation分回転します。
敵キャラクターをプレイヤーキャラクターの方向に向けるために使っています。
同様に、「Add Actor Local Rotation」は、Actorをローカル座標上で、指定Rotation分回転します。また、「Add Actor World Offset」は、Actorをワールド座標上で、指定Vector分移動します。
「Add Controller Pitch Input」:BP/ABP
PawnのControllerがPlayer Controllerの場合、Valの値に基づいてControllerをY軸周りに回転します。
視点移動の入力でControllerのY軸周りのRotationを変更するために使っています。
同様にAdd Controller Yaw InputでZ軸周り、Add Controller Roll InputでY軸周りに回転します。
Player Controllerでは、Controllerの向きでプレイヤーの視点(=カメラの向き)を制御します。
「Add Force」:BP
TargetにしたCharacter Movement Componentを持つActorに、Forceベクトルの入力を与えます。
キャラクターに、横方向速度を減少させる摩擦力を与えるために使っています。
「Add Movement Input」:BP/ABP
Pawnにワールド座標の移動入力を与えます。
プレイヤーキャラクターに移動入力を与えるために使っています。
最終的な速度は、Max Walk Speed × Scale Valueになります。
「Launch Character」:BP/ABP
Characterに指定した速度を与えます。
キャラクターを斜め方向にジャンプさせるために使っています。
「Jump」:BP/ABP
CharacterにZ軸正方向の速度を与えます。
与える速度はCharacter Movement ComponentのJump Z Velocityです。
キャラクターを垂直方向にジャンプさせるために使っています。
設定の追加/変更
設定の追加やオンオフの切り替えなどを行うノードです。
「Add Mapping Context」:BP/ABP
Enhanced Input Local Player Subsystemに入力マッピングコンテキストを追加します。
ゲームプレイ開始時のコントローラー設定を追加するために使っています。
「Attach Component To Component」:BP/ABP
既存のScene Componentに、ソケット名を指定して既存Scene Componentをアタッチします。
ソケット名を指定して各Ruleを「Snap to Target」にすると、ソケットの位置にアタッチできます。
ゲームプレイ開始時に、キャラクターのスケルタルメッシュコンポーネントにパーツ用のスタティックメッシュコンポーネントを追加するために使っています。
「Set Collision Response to Channel」:BP/ABP
Primitive ComponentがCollisionに接触した際の挙動(ブロック等)を設定します。
パージしたパーツのスタティックメッシュコンポーネントが、キャラクターのスケルタルメッシュのCollisionをブロックしないようにするために使っています。
「Set Simulate Physics」:BP/ABP
Primitive ComponentのSimulate Physicsのオンオフを設定します。
パージしたパーツの、スタティックメッシュコンポーネントの物理演算を有効にするために使っています。
「Set Static Mesh」:BP/ABP
Static Mesh Componentに、Static Meshを指定して追加します。
キャラクターのスケルタルメッシュに追加したスタティックメッシュコンポーネントに、パーツのスタティックメッシュを追加するために使っています。
「Set Value as Object」:BP/ABP
ブラックボードの指定したキーに指定したオブジェクトを設定します。
ブラックボードのキーに敵キャラクターとプレイヤーキャラクターのActorを設定するために使っています。
「Set Value as Float」など、他の型の値を設定するノードもあります。
処理の起動
ビヘイビアツリーの起動など、別の処理を開始するためのノードです。
「Run Behavior Tree」:BP/ABP
AI Controller上で、指定したビヘイビアツリーを起動します。
敵キャラクターの行動を制御するビヘイビアツリーを起動するために使っています。
オブジェクト取得
始点と終点を指定した線にヒットしたオブジェクトの情報取得などを行うノードです。
「Line Trace For Objects」:BP/ABP
始点と終点のVectorを指定して、その線上にある最初の対象オブジェクトのヒットを取得します。
キャラクターがいるXY座標での地面の座標を取得するために使っています。
配列
配列の要素を削除、要素数を確認などをするノードです。
「Length」:BP/ABP
配列の要素数を取得します。
経路となる点の数を確認するために使っています。
「Remove Index」:BP/ABP
指定したIndexの要素を配列から削除します。
経路となる点の配列から、距離の近い点の要素を削除するために使っています。
ナビメッシュ
ナビメッシュを使った処理を行うノードです。
「Find Path to Location Synchronously」:BP/ABP
始点と終点のVector、ActorのControllerなどの情報と、始点と終点のVectorからナビメッシュを使った経路探索を行い、Navigation Pathオブジェクトを作成します。
敵キャラクターの位置からプレイヤーキャラクターの位置までの経路探索に使っています。
以上です。
コメント