aziogroup
(aziogroup)
1
こんにちは
現在サードパーソンテンプレートを用いてカメラが水中に入ったらカメラにエフェクトをかけるということをしようとしているのですが、Overlapイベントがキャラクターが移動したときのみしか発生しません
上記を実現するために下記の手順を踏みました
- テンプレートに付属しているThirdPersonCharacterのFollowCameraの子にSphereCollisionを配置する
- SphereCollisionは OverlapAllDynamic / Generate Overlap Eventを有効にする
- イベントグラフにて On Component Begin Overlap (Sphere) イベントを置き、Print String等であたったことがわかるようにする
- フィールド上に水中を模した大きなBoxCollisionを持ったアクタを設置しSphereCollisionと同じように設定をする
これで3人称視点でカメラを動かし、水中を模したBoxCollisionにカメラが侵入すればOverlapイベントが走るかと思ったのですが、実際にはキャラクターをWASDまたはジャンプなどキャラ自体に動きをもたせた状態じゃないとOverlapが発生しないという事態になりました。
例
- カメラは水の中でWASDを押してキャラ移動 : 移動した時点でOverlap発生
- カメラは水の外 / キャラクターのみ水中でWASDを押してキャラ移動 : Overlap発生せず
- キャラクターを移動させっぱなしの状態でカメラを水中に入れたり出したり : 水中に入る度にOverlap発生
- キャラクターは移動させっぱなしの状態でカメラは水の外 : Overlap発生せず
上記のようにキャラが移動するときのみしか当たり判定?が働いてないように感じられます
一通り調べては見たのですがコリジョンを使用した方法の解決策がわかりませんでした
どなたか知恵を貸していただけなしでしょうか、よろしくお願いいたします。
環境
- Windows 10 64bit
- Unreal Engine 4.19
- ThirdPerson テンプレート
unaunagi
(unaunagi)
2
1つのアクターに複数のコリジョンがあると、思ったように作動しないことがあります。
正確な条件はわからないんですが、衝突の仕方によって反応したりしなかったりという、ちょっと困った状態になります。
このケースも、キャラクター本体のカプセルコリジョンと、カメラにくっついたコリジョンと、2つあるのが原因だと思います。
この問題の解決方法はわからないのですが。とりあえずカメラにくっつけてるコリジョンを、別のアクターにすれば、想定した動作になると思います。
1つのアクターに1つのコリジョンという形になるので。
TickイベントとSetActorLocationで常にカメラを追尾する別アクターにするか、あるいはChildActorComponentとしてキャラクターにくっつけるのでもいいかもしれません。
aziogroup
(aziogroup)
3
回答有り難うございます
同じものをPawnで作ってみた所想定通りの動きをしたためCharacter固有の問題のように感じられました
Sweepはルートのコリジョンしか参照しない件などでも引っかかったので1アクターにつき1コリジョンという制約のもとやったほうが良さそうですね
今回はChildActorComponentで対応したいと思います、ありがとうございました
【-- 04/10 1:50 追記 --】
ChildActorにしてみた所、質問したときと同様移動時しかOverlapが働きませんでした。Pawnにもつけてみた所移動関係なく発生したためCharacter自体なにか移動時以外はコリジョンを一切チェックしないなど有るのかもしれません…
aziogroup
(aziogroup)
4
結果としましてはPawnの Use controller Rotation Yaw にチェックが入っているとキャラ移動時のみしか反応しないということが判明しました
チェックを外して独自でカメラの挙動を用意することで動くようになりました
今回はunaunagiさんが提案してくださった別アクターにして毎Tickアクタの位置をカメラ位置に移動させる方法でやりたいと思います
ありがとうございました