学習ノート

学習者ゆえ、記事の内容は間違っていることもあります。ご了承ください。

視聴メモ「コリジョンを使ってコインを拾ってみよう!」(1)

今回のメモの範囲(Start ~ 1:01:00)


www.youtube.com

UE4(4.25.0)の初心者向け動画を視聴して、UE5(5.0.0早期アクセス)の学習をします

※ 全内容のメモではありません 学習者は元動画の視聴を強くお勧めします

※ 略記 UE = Unreal Engine , BP = Blueprint

 Agenda

 

1. コリジョン(あたり判定・衝突判定)について

1.1. コリジョン用のコンポーネント

詳細パネルのシェイプ欄で大きさを変更できる

 

1.2. コリジョン用のアクター

  • カプセルトリガー
  • スフィアトリガー
  • ボックストリガー
  • トリガーボリューム ※ブラシ編集で形状を変えることができる

 

BPにコリジョン用のコンポーネントを設定するのではなく

コリジョンを検出するためのアクターを利用する方法

 

1.3. コリジョン用のイベントノード

  • Hit(接触した時)
  • ActorBeginOverlap(重なった時)
  • ActorEndOverlap(重なった後に離れた時)

 

それぞれ衝突した相手側の情報を取得することもできる

 

ActorBeginOverlapとOn Component Begin Overlapでは

後者の方が取得できる情報が多い

 

1.4. コリジョンのフィルター機能

docs.unrealengine.com

 

コリジョンのフィルタについて迷うことがあったら

上記の公式ドキュメントを確認するとよい

 

詳細パネルのコリジョンコリジョンプリセットで確認できる

プリセットが用意されているので自分で属性を調整しなくてもよい

 

コリジョンプリセットのObject Typeは設定から増やすことができる

設定 -> プロジェクト設定 -> エンジン -> コリジョン -> OBJECT CHANNELS

 

トレース応答は線でのチェック(ライントレース)

オブジェクト応答はコリジョン領域でのチェック

 

ライントレースは、当たった位置の距離を取得できる

同じことをコリジョンでやろうとすると大変

 

1.5. TIPS

1.5.1. コリジョンの処理の重さ

コリジョンはスフィアが一番処理が軽い(中心からの半径で計算する)

次がボックス、カプセルの順(カプセルはスフィアを縦にずらしたイメージ)

ただ重さにそれほど差はないので、シーンに合わせた使い分けの方が大切

 

コリジョンは細かくつければつけるほど処理が重くなる

# 初心者の段階で作るぐらいものでは気にする必要はなさそう

 

またコリジョンは検出頻度は、Tickと同じフレーム単位

フレームレートが高くなるとコリジョン検出処理の負荷が高くなる

 

1.5.2. コリジョンの表示

表示モードをプレイヤーコリジョンに変更する

コリジョンが設定されている部分に色がつく

 

1.5.3. コリジョンと物理

コリジョンと物理は異なる

衝突した結果、モノが動くのは物理の役割

 

1.5.6. コリジョンの形状変化

詳細パネルのトランスフォームとシェイプどちらでも変更可能

 

併用することもできるが、大きさがわかりづらい

やるとしたらシェイプを100などの区切りのよい数値にして

トランスフォームで細かい数値を加算するなど

 

# まずはシェイプのみを使うことにして使い分けは経験を積んでからでよさそう

 

1.5.7. コリジョンのオン・オフ

コリジョンはSet Collision Enabledノードでオン・オフの切り替えができる

遠くのキャラクターのコリジョンをオフにして処理が重くならないようにする

よく利用されるテクニック

 

1.5.8. コリジョンの同時検出

1つのアクタが複数のコリジョンを同時(1フレーム内)に検出することはできない

このような場合、複数となる側に衝突した場合の処理をしかけておく

 

# 例えば、キャラクターに銃弾が当たったときにキャラクターの体力を減らす処理は

# キャラクター側ではなく、銃弾側にしかけておくとよい

 

1.5.9. コリジョンチェックのテクニック

Print Stringノードを使うとプレイ中にコリジョン発生時の情報を画面に表示できる

 

例えば、ActorBeginOverlapノードとPrint Stringノードの実行ピンをリンクし

さらに前者のOther Actorピンと後者のIn Stringピンをリンクする

(自動でGet Display Nameノードが間に入る)