前往
大廳
主題

MotionWarping物体を飛び越える

當我玩家都王八蛋? | 2024-02-26 22:24:50 | 巴幣 0 | 人氣 75

最近興味があって、MotionWarp技術についていくつかの技術動画を見ました。要するに、特定のタイミングでアニメーションを再生し、同時にオブジェクトの位置を調整する技術です。例えば、あるアクションゲームでは、敵に向かって攻撃すると、プレイヤーの位置が自動的に敵の近くに調整され、プレイヤーがスムーズに敵を攻撃できるようになります:
これはゲームで非常によく使用される技術であり、例えばドアを開くときやNPCと対話するときなどに使用されます。
そのため、私はこのたびインターネット上の情報を参考にして、ランニングゲームを制作しました。障害物を乗り越える際に、障害物の奥行きに応じてプレイヤーの位置を調整します。
完成後の効果は以下の通りです
具体的な方法は、プレイヤーキャラクターが発する3つの異なるレイを使用して障害物を測定し、プレイヤーの移動位置を計算し、最後にアニメーションを再生してプレイヤーを移動させることです。障害物を検出するためにUEのTrace(RayCast)を使用します。Traceをどのように発射するかについては、次に詳しく説明します。

レイは3つに分かれます。

  1. 1.プレイヤーの向きに向かって発射され、前方に障害物があるかどうかを検出するためのものです。
  2. 2.1でのレイが障害物に接触した場合、接触点のベクトルと接触面の法線ベクトルを取得し、それらを基に新しいTraceを再び放出します(Warpの開始点と障害物の端の計算に使用)、そして法線方向に一定回数反復して障害物の長さを検出します。
  3. 3.2でのレイと障害物の接触点を基準に、法線方向に一定距離だけ移動してから新しいTraceを再び放出します(着陸点の計算に使用)。
先ずはGetActorForwardVectorを使用してプレイヤーの向きを取得することで、1.のレイを作成できます。
障害物に最初に当たった際に、ImpactPointと法線ベクトル(レイの延長方向を制御するため)を取得します。物体の表面の法線ベクトルは通常、前方向に向くようになっているため、これを考慮して-1を乗算する必要があります。
次に、上から下に物体の表面を検出するためのレイを発射します。これらのレイは、1.で当たったImpactPointを基準点とし、一定の距離で切面法線方向に間隔を置いて下方向に向けて発射されます。何回繰り返すかは、状況に応じて決定します。
2.で最初に接触したポイントをMotionWarpの開始点に設定し、最後に接触したポイントをエッジポイントに設定します(これにより、アニメーションがこれらのポイントに基づいて再生されます)。
最後の黄色いレイは、2.で障害物に接触したポイントを基準に、法線方向に定数倍のオフセットをかけ、下方向にレイを発射して地面に着地できるかどうかを確認します(着地点は2.のレイの最後の接触点から法線方向に定数倍離れています)。
これらのポイントを計算した後、アニメーションの調整を開始できます。新しいMontageを作成し、アニメーションの各時間ポイントにNotifiesを設定します(これにより、UEに対してこの時間帯にキャラクターをどこに移動させるかを指示できます)。
この障害物を越えるアニメーションには、MotionWarpが4つの時間帯で行われます。
障害物を片手で支える時、それをStartWarpとして設定し、このキーフレームからWarpを開始します。Warpが進行される際、キャラクターは先ほど計算された開始位置に移動します。
障害物を飛び越える動作(空中での回転中)では、このアニメーションセグメントをEdgeWarpとして設定し、以前に計算された障害物の端点に配置します。キャラクターがEdgeWarpを行う際、その障害物の端点にキャラクターの位置を移動させます。
障害物の端にキャラクターを移動した後、着地するアニメーションを行います。着地から歩行に移る間のこのアニメーションセグメントをLandWarpと名付け、Warp中にキャラクターを着地地点に移動させます。
最後は、着地後に一定距離歩くアニメーションです(事前の計算では言及されていませんが、着地点を法線方向に一定距離移動させればよいです)。このアニメーションをWalkingと名付け、着地後にWarpの終了地点まで歩行します。
設定が完了したら、BP内で対応するノードを作成し、Warpの名前と対応する位置を指定します。
最後に、Montageを再生して完成です!
以上が今回MotionWarpプラグインを使用して制作したプロセスです。その中で最も考える必要があるのは、これらの位置(開始点、途中点、終了点など)をどのように計算するかです。また、異なるアニメーションに応じて位置と時間の調整も異なります。機能を完璧に実現するには、非常に時間がかかる作業です…
ゲーム:

創作回應

更多創作