Unreal Engineのクロスに触れてみる(3)

こんにちは。プログラマのテッピーです。

近頃はコロナ禍による混乱した世の中もだいぶ落ち着いてきましたね。
ゲーム業界のイベントも再び現地開催されるようになってきて喜ばしいことです。

テッピー自身はまだ大規模なイベントの人混みに入っていくほどは立ち直っていませんが、独り食事に行くお店を換気が強い焼き肉屋さん以外からも選ぶなど徐々に元の生活に戻ってきています。

そんな折、久しぶりに技術ブログの筆を執り、参考に過去の記事を見返していたところ・・・。

見つけてしまいました、前回からの続きの記事を。執筆日時は驚きの5年前(?!)です。
おそらく前回の記事と一緒に書き溜めていたはずなのに、存在をすっかり忘れてホコリをかぶっていました。

懺悔懺悔。

兎にも角にもケジメとして本記事を公開してこのシリーズに幕を引こうと思います(クロスだけに)。
どうぞお付き合いください。

前回までの「Unreal Engineのクロスに触れてみる」

前回の拙文では、横棒から垂れたクロスボールが一体になったスケルタルメッシュモデルに物理アセットクロスアセットを設定して、ボールと接触するクロスを作ろうとしました。

そして失敗しました・・・。

失敗した原因は前回の最後に記述した通り、不正な単位系で作成したスケルタルメッシュモデルのスケールが極端に小さくなっていたことでした。

今回は、正しい単位系で作成したスケルタルメッシュモデルを使用して、物理アセットの設定からやり直した時のことを紹介させていただきます。

物理アセットの設定(成功編)

物理アセットをエディターで開くまでは同様なので省略します。

前回とは異なり、自動的に追加されたボディが、ボーンの数だけありますね。
カプセルの姿勢も整っていて、トランスフォームの調整が捗りそうです。

横棒とボールの形状にカプセルが合うように、トランスフォームを調整します。

お分かりいただけるでしょうか。
今度は、横棒とボールにカプセルをぴったりと合わせることが出来ました。

ここから失敗編では記載を省略した物理アセットの設定です

ここで一度、物理の『シミュレート』を開始してみましょう。

ボールが地面を転がっているのは問題なく、むしろいい感じですが、横棒が地面を転がっていることで、クロスが地面に埋まってしまうのは大問題ですね。

横棒とクロスが所属しているPole_Boneのボディの『Physics Type』『Kinematic』にして物理のシミュレートでは動かないようにします。

また、ボールが所属しているBall_Boneのボディの『Physics Type』『Simulated』にして物理のシミュレートで動くようにします。

『Default』でも動いていましたが、オーナーアクターKinematicな場合にはそちらに従ってしまうなど、確実さに欠けそうだったので変更しておきました。

再度、物理のシミュレートを開始します。

横棒とクロスが空中に浮かんでいるのは良いですが、今度はボールが宙に浮くという問題が発生しています。

Ball_Boneの『コンストレイント』を開くと、横棒とクロスが所属しているPole_Boneと、ボールが所属しているBall_Boneがジョイントコンストレイント(制限)されていることが分かります。

Pole_BoneにBall_Boneがぶら下がっている状態になってしまっているのですね。

Pole_Boneとのコンストレイントを解除します。

再度、物理のシミュレートを開始します。

Pole_BoneとBall_Boneのコンストレイントが解除されたことで、横棒とクロスから離れた位置へボールが自由に転がっていけるようになりました。

物理アセットの設定は以上で終了です。

次はクロスアセットの設定

スケルタルメッシュをエディタで開きます。

『セクション選択』を有効にして、クロスとして動かしたい部分を選択。

右クリックメニューから『セクションからクロスアセットを作成』を選択。

『Collision』『Physics Asset』で先ほど設定をした物理アセットを選択。

『作成』ボタンを押して、クロスアセットを作成します。

右クリックメニューの『クロスアセットの適用…』で作成したクロスアセットを選択して適用。

『クロスペイント』ウィンドウ『Assets』の右にある『[+] Import APEX file』を押して、表示されたウィンドウをキャンセルで閉じます。

この”おまじない”によってクロスペイントウィンドウのAssetsにクロスアセットが表示されて、クロスペイントが可能になります。

クロスアセットを選択して、『Enable Paint Tools』でクロスペイントを有効化。
『Tool Settings』『Paint Value』クロスの可動範囲を設定します。

今回作成したスケルタルメッシュモデルでは、クロスとして動かしたい部分の大きさが『200センチメートル』四方なので、そのまま『200.0』を設定してみました。

あとはクロスとして動かしたい範囲をペイントしていくだけです。
横棒の手前ギリギリまでペイントしていきます。

ペイントが終わった後は、ペイントツールを無効化することで、ペイントした部分クロスとして動作するようになります。

クロスアセットの設定も、以上で終了です。

レベルに配置して動かしてみる

必要な設定が終わったので、スケルタルメッシュをレベルに配置します。

キャラクターを操作して、ボールをクロスに向かって転がしてみました。

なかなか良い感じに動いているように見えますね。成功です!

今回はここまで

少々長くなってしまいましたね、最後までご覧くださった方、ありがとうございました。

成功に至るまでの過程で、前回はBlenderで初歩的なミスに躓いてしまいましたが、結果としてBlenderとUnreal Engineの両方で試行錯誤してみる良い機会となりました。

旗を作って風ではためかせてみただけの前々回と比べると収穫も多く、Unreal Engineのクロスの理解が多少なりとも進んだような気がします。
(まだまだ分からないことのほうが多いですし、勘違いもしているかもですし、5年の月日の間にUnreal Engineは4.Xから5.Xへメジャーアップデートしましたが…)

次はもうちょっと複雑な形状のスケルタルメッシュモデルで何かをやってみたいですね。
そのためにも、面白そうな次回のテーマを考えながら、学習を継続できればと思います。

それでは改めまして、ご覧くださり、ありがとうございました。