質問者はゲーム作成初心者です。
Third Personテンプレートを使っています。
[こちらのサイト([UE4] スプライン上を動く足場の作り方|株式会社ヒストリア][1]を参考に、動く壁を作ったのですが、キャラクターが移動しているかどうかによって、以下のように動作します。
※壁がキャラクターに向かって迫ってきている状態です。
キャラクター移動時:壁にぶつかって押し戻される
キャラクター静止時:壁をすり抜ける
常に、移動時のように、壁に押しのけられてほしいのですが、うまくいきません。
キャラクターの移動時にしか、キャラクターが他のアクターと重なっていないかの判定がされていないのだと思うのですが、対策の仕方が分かりません。
キャラクター静止時にも判定を行う方法、もしくは、他の方法があれば、壁に押しのけられる動作の実装方法を教えてください。
よろしくお願いします。
alwei
(alwei)
2
動く壁というのはAdd Actor Local OffsetもしくはSet Actor Locationで移動させていますか?もしそうであれば、Sweepのフラグにチェックをつけてみてください。
Set Actor Locationで移動させています。
Sweepフラグにチェックを付けたところ、キャラクターにぶつかって停止するようになりました。
しかし、希望しているのは、キャラクターを押しのけて壁が進み続ける動作ですので、少し違うんです…
まずはUnrealEngineにおいて「ぶつかる」という事象を感覚的に理解する必要があります
Collisionの検知ルールは基本的に「自分が」「相手に」ぶつかったかどうかです
逆はありません
そして、Collisionの判定結果は、「自分」に対してしか解決されません
この場合では、ぶつかった際に「自分」を押し戻すことはできますが、「相手」を押し出すことはできません
上記がわかりづらければ、チェスか将棋を思い浮かべてもらえばよいです
駒は一度に一つずつしか動かせず、移動先に別の駒があれば、動かすのを諦めるか相手の駒を取り除かねばなりません
駒で駒を弾き飛ばすことはできませんよね?
つまり、押し出す動作を実現するためには、相手に動いてもらう(移動先を譲ってもらう)必要があります
下記は、自分が動いた分だけ相手を押し出す動作を示したBPです
参考にしてみてください