3dcg unreal engin4

UE4で草がキャラクターをよける仕組みを実装する方法

よくゲームでキャラクターが歩いたときに草が動的にキャラクターをよけるようになっていることがあると思います。わかりやすいように極端にしていますが、以下の画像のような感じです。

UE4でこの仕組みを実装する方法を解説していきます。

UE4で草がキャラクターをよける仕組みを実装する方法

マテリアルでプレイヤーの座標を取得

まずマテリアルでプレイヤーの座標を取得したいので、マテリアルパラメーターコレクションを使います。コンテンツブラウザで右クリック→「マテリアルテクスチャ」→「マテリアルパラメータコレクション」から作成しましょう。名前はPlayerPosにします。

マテリアルパラメーターをダブルクリックで開いて、Vector ParametersのプラスボタンでVectorを追加します。名前をpositionに変更しておきましょう。

レベルブループリントを開いて、「GetPalyerCharacter」→「GetWorldLocation」→「Set Vector Parameter Value」とノードを作成してつなぎます。

「Set Vector Parameter Value」のCollectionを先程作成したPlayerPosにして、Prameter Nameをpositionに変更します。そして「イベント Tick」につなげましょう。以下のようなノード構成になっていればOKです。

ここではプレイヤーキャラクターの位置情報をマテリアルパラメーターコレクションのpositionに渡しています。これでマテリアル内でプレイヤーの位置情報を扱うことができます

マテリアルを組む

草のマテリアルを開いて、マテリアルパラメーターコレクションをドラッグオンドロップしましょう。Prameter NameをPositionに変更します。

まずキャラクターの周囲にだけ影響を及ぼしたいので、マスクを生成します。以下のようにノードを組んでください。

まずブループリントから受け取るpositionは4vectorなので、ComponentMaskで3Vectorにしてあげます。

Distanceノードで「キャラクターの位置」と「ワールドの位置」の距離をみて、欲しい値になるように任意の値でDivideしてあげてます。clampで0~1にしてあげて、マスクにしたいので最後に「1-x」で反転しています。

こうすることで以下のようにキャラクターの周囲にマスクを作成することができます。Distanceの値を変えることでマスクの影響範囲を変更することができます。

次にすることはワールド位置からキャラクターの位置を引き算して、キャラクターから外側に向けてのベクトルを作成してあげます。方向だけほしいので「Normalize」します。強さを自由に変更できるようにパラメーターを作成してMultipllyします。

上記の2つのノードを最終的にMultipllyで合体します。これでキャラクターの一定の周囲だけ、外向きのベクトルを持っている状態にできます。これをマテリアルの「ワールド位置オフセット」に接続しましょう。

これで完成です!Distanceを変更すると半径を変更。Intensityを変更すると強さを変更できます。結構簡単ですね。

草の上の方だけ揺れるようにする

上の方だけ揺れるようにしたいので、草の下から上のマスクをMultipllyします。最終的に以下のようなノードになりました。

さらにこれをもともと作っていた草の揺れと合体させましょう。これは単純にMultipllyすれば大丈夫です。草のゆれについて知りたい方は以下の記事を参照してください。

UE4のSimpleGrassWindを使って簡単に草をゆらす方法
UE4のSimpleGrassWindを使って簡単に草をゆらす方法

こんにちは、CGフリーランスとして活動している西川です!Youtubeと ツイッター、インスタもやってます。お問い合わせはこちら。 ゲームの背景によく使われる草。けどただ配置しただけだと味気ないですよ ...

続きを見る

まとめ

この仕組みをステップで分けると

まとめ

  • キャラクターとワールドの距離からマスク生成
  • キャラクターとワールドの位置を引き算してベクトル生成
  • 上の2つを組合わせる

でした。理屈がわかると結構かんたんですね。

以上になります。もしご質問等ありましたら、お気軽にツイッターから聞いてください。新しいことに挑戦していきましょう!それでは。

Sponsored Link

-3dcg, unreal engin4
-,