UE5でプレイヤーとだけぶつかるもの、プレイヤーとだけ重なるものを作りたいです。
そんなときは、コリジョンプロファイルを使って実現しましょう。
やりたいこと
敵キャラが歩き出す起動用トリガはボックスコリジョンで、キャラクタ本体の後ろに配置してあります
これにプレイヤーが触れたら歩き出すようにしたいです。
しかし単に設置した状態だと、ファイヤーボールなどの飛び道具とぶつかってしまう問題があります。
OverlapやHitイベントのOtherActorとして応答してしまいます。
コリジョンも含めてキャラクターという扱いになっちゃうので。。。
これを避けるため、コリジョン設定でプレイヤーとだけ重なる設定にしましょう
実現方法
これにはプレイヤー専用のチャンネルの作成と、
そのチャンネル応答をプレイヤーと起動トリガーに設定が必要です
プロジェクト設定を開いてエンジンのコリジョンに進みましょう
まずプレイヤー専用のチャンネルを作ります
「Object Channels」の「新規のオブジェクトチャンネル…」ボタンを押し、名前は「PlayerOnly」、デフォルト応答を「Ignore」(無視)とします
デフォルト応答をIgnoreにしていると、すでに設定されているプリセットはみんなPlayerOnlyチャンネルを無視する設定になります
関係者以外利用禁止って感じです
BlockAllとかはAll(全部)といっているので、本当はプレイヤー専用もブロックに変更したほうがよいかもです
上図は Pawn プリセットで、キャラクターは基本これですが、これも PlayerOnly への応答は無視になっています。これはこのままとしましょう。
Pawn とは別途、「プレイヤーのカプセルコンポーネント」専用のプリセットをオブジェクトタイプ Pawn で作ります
さきほど作った専用チャンネルの応答をブロックに設定しています。
※ Cameraをオーバーラップにしているなどのその他の応答はご自身のプロジェクトに合わせてください。
あとはオブジェクトタイプ PlayerOnly で、Pawn だけブロックする「プレイヤーだけぶつかるやーつー」と
同じくPlayerOnly で、Pawn だけオーバーラップする「プレイヤーだけ重なるやーつー」をつくりましょう
無視が優先で、片方が無視だとOverlapやHitイベントは発生しません。
補足
「BlockOnlyPlayer」は「Pawn」をブロックするので、相手が「Pawn」ならなんでもHitイベントが起きるかというと起きません。プロファイル「Pawn」は「PlayerOnly」を無視しているのでそのイベントはおきません。
一方、同じオブジェクトタイプ「Pawn」でも、プロファイル「PlayerCapsule」は、「PlayerOnly」をブロックしているので、お互いブロック同士でぶつかり、Hitイベントが発生します。
結果、プレイヤーだけがぶつかりHitイベントが起きて、ほかのものはすり抜けます。
OverlapOnlyPlayerは「Pawn」に重なれる設定で、ブロック対オーバーラップだと、まずブロックするプレイヤー側のHitイベントが起きて、重なって、OverlapOnlyPlayer側のOverlapイベントが起きるという結果になります。
Pawnを絡めるのがなかなか難しい感じしますが、
直接オブジェクトタイプとしてプレイヤーを作っちゃうと、
ポーン共通の反応箇所も全部見直すことになりそうなので、これが手間が少ない方法なのかなと思います
【UE5】コリジョン管理・処理に関する講演メモ・補足 : Collision Data in UE5: Practical Tips for Managing Collision Settings & Queries | Unreal Fest 2023 – ぼっちプログラマのメモ (hatenablog.com)
- Playerキャラに特殊なObjectTypeを設定することができるが、別処理にて他キャラクタ(Object Type:Pawn)と同じ反応を期待している処理が既にある場合は難しい
- プレイヤーのObject Typeを変更するのではなく、Collsiionフィルタリングで実現する
おかずさんのブログ記事に載っていました。英語ではしんどいので大変ありがたいです。
※ただし初心者にはハードめな記事(というか講演)です(;xωx)
利用
準備ができたら、
プレイヤーとだけ重なれるトリガーにOverlapOnlyPlayer
プレイヤーのカプセルコンポーネントにPlayerCapsule
のコリジョンプリセットを設定しましょう。
これで起動させられるのはプレイヤーだけになるだけでなく、プレイヤー以外には重なるイベント自体発生しないので相手がプレイヤーかの判定も不要となります。
Before
After
地面や障害物・敵キャラ同士など、色々なものと重なったりぶつかったりしているので、プレイヤーかの判定だけでも、キャラがたくさんいれば結構たくさんの処理が発生していました。
なので、処理負荷的にもかなり減っていい感じです。
つづく
- 第1回:やることリスト
- 第2回:サイトマップ 構成要素一覧
- 第3回:走る・跳ぶ(Blender→UE5)
- 第4回:Bダッシュ
- 第5回:ダッシュ中は高く跳べる
- 第6回:ミニとノーマルサイズの変化
- 第7回:敵に当たったらダメージ
- 第8回:ステージ作りステップ1
- 第9回:ステージ作りステップ2
- 第10回:跳ねる壊れるレンガブロック
- 第11回:ハテナブロック+コイン
- 第12回:パワーアップキノコ(たまねぎ)
- 第13回:ファイヤーフラワー(赤ピーマン)
- 第14回:ファイヤーボールで攻撃
- 第15回:踏みつけ攻撃
- 第16回:ブロック越しに攻撃
- 第17回:スターで無敵
- 第18回:亀キャラを作る
- 第19回:亀キャラの動作
- 第20回:プレイヤー専用コリジョンでファイヤーバグ対策
コメント