学習ノート

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

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

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


www.youtube.com

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

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

※ 略記 UE = Unreal Engine , BP = Blueprint

 Agenda

 

1. コリジョンを使ってキャラクタが拾えるコインのBPを作ってみよう!

1.1. Shpere Collisionコンポーネントの追加

コインのBPにShpere Collisionコンポーネントを追加する

Shpereの半径を大きくしておくと、ゲーム内でコインを取るのがラクになる

 

# コインBPでイベントHitを利用すると厳密に接触しないといけない

# 高速に動くゲームなどではプレイヤーのストレスになる場合がある

 

1.2. コインを拾った処理の追加

コインのBPにコインを拾った処理を追加する

# サードパーソン(拾う側)に追加してしまう1フレーム内に同時に拾えない

 

コンポーネントパネルSphere Collisionを右クリックしてAdd Eventから

On Component Begin Overlapノードをイベントグラフに追加する

 

アクタをレベルから取り除く処理はDestroyActorノードを利用する

On Component Begin OverlapノードにDestroyActorノードをリンクする

 

1.3. キャラクターだけがコインを拾えるようにする

フィルタ機能を使って、キャラクターだけがコインを拾えるようにする

# コイン側に拾う処理を追加しているため、例えば動く床がコインに触れた場合も拾われてしまう

 

キャラクー(サードパーソン)についてコリジョンのObject Typeを確認する

 サードパーソン:Pawn

 

コインのコリジョンプリセットをCustomに変更する

オブジェクト応答をPawn以外すべて「無視する」に変更する

 

# 動く床はObject TypeはWorldDynamicなので触れても無視されるようになる

 

1.4. TIPS

1.4.1. 拡大・縮小に同一値を入力する方法

トランスフォームの拡大・縮小のXYZ値を同じ値で変更する場合は

カギのマークをロックする

 

1.4.2. 形状の変更をBPに反映する場合の注意点

詳細パネルでStaticMeshを選択し、そのトランスフォーム値を変更してBPに反映する

 

# DefaultSceneRootの値を変更してもレベル上では形状は変化するがBPに反映されない

# 継承関係の子の値の方が優先されると予想(Javaでもそんな感じだし)

 

1.4.3. ゲーム内でコリジョンを可視化する方法

詳細パネルのレンダリングのHidden in Gameのチェックを外す

デバッグに便利

 

1.4.4. 接触する設定

アクタ同士が接触するようにしたい場合は

コリジョンのオブジェクト応答の設定を両方とも「ブロック」にする

 

# 意図せずすり抜けてしまう場合は、どちらかが「ブロック」になってない場合が多い

 

1.4.5. DestroyActortとVisibleをオフにした場合の違い

DestoryActorを利用するとアクタが消滅するので当然Tickも止まる

Visibleをオフにした場合は、表示はされなくなるがTickは動き続けている

Set Actor Tick Enabledノードを使うとTickを止めることができる

 

# 非表示にしたら処理が軽くなるというのは危ない考え方

# 表示分の処理は軽くなるが見えないところで処理が動いている

 

1.4.6. コリジョンプリセットとObject Typeをゲーム中に変更する

以下のノードを利用する

  • Set Collision Profile Name(コリジョンプリセットの変更)
  • Set Collision Object Type(Object Typeの変更)
  • Set Collision Response to Channel(オブジェクト応答の変更)

 

1.4.7. コリジョン抜け対策

「Use CCD」でググる

# コリジョン判定は正確になるけど、処理負荷が高いとのこと

# 当面はこんな場合の対策があるぐらいを覚えておけばいいかな