視聴メモ「コリジョンを使ってコインを拾ってみよう!」(2)
今回のメモの範囲(1:01:00 ~ End)
※ 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」でググる
# コリジョン判定は正確になるけど、処理負荷が高いとのこと
# 当面はこんな場合の対策があるぐらいを覚えておけばいいかな