妹、projectileが止まったまま落ちてこない
妹「前も言ったかもしれないけど、途中で引っかかったprojectileを落とす方法がなんかないかなあ……。あと上に乗った時ジャンプが出来ないのも困る」
「projectileは一度何かに当たって止まっちゃうと上手く動かないみたいなんだよね。当たって消える、発射した弾みたいにして使う分にはそれでいいんだろうけど。仕様なのかバグなのかよくわからんけど」
妹「弾じゃないんだけど、これ以外に使えそうなMovementがないというか。ただアイテムが上から普通に落ちてきて、何かにぶつかったら止まって、邪魔な物がなくなったらまた落ちて来て欲しいだけなんだよ」
「物理オンにしたら駄目なの?」
妹「本見てると物理は細かい制御がむつかしいから良くないって書いてあって……じゃあどうすればいいのかというのはいまいちわからなかったんだけど」
「CharacterMovementは?」
妹「動きはまともになるんだけど、人型のキャラクター以外に使わない方がいいって公式のドキュメントに書いてあって……じゃあどうすればいいのかというのは(以下略) あと、CharacterMovementは上に乗るとポヨンポヨン跳ねちゃう問題が」
「あー、その問題はあったね。どうやって解決したんだっけ?」
妹「解決してないんだよ……」
「そうだっけ。projectileを使わず、物理エンジンも使わず、全部自力動かすという方法がある。具体的にはティックのイベントで下に動かす。ただ重力的に動かそうと思うと、だんだん速くしないといけない。最初は1動かして、次は2、その次は3という具合に、だんだん速くなる。途中で物にぶつかったら0に戻すか、跳ね返らせるか。その辺の計算式はアクションゲームの本に書いてあるから、作れない事はない」
妹「すごくめんどくさそう」
「イベントじゃなくて新しいコンポーネントとして作ってもいいんだろうけど……まあめんどくさいね。だったら簡単そうなのは、動きが止まっちゃうと駄目だから、時々SetVelocityとかで微妙に力を加える。これでも動くようになるはず」
妹「それもなんかあやしい解決法だなあ。物理をオンにしてZ軸(縦方向)だけ効かせた方がマシかなあ」
「ああ、そういう手もあるのか。それでいいじゃん」
妹「でもそうすると結局物理を使う事に……」
「物理といっても軸一つならそうそう変な動きしないと思うよ。Projectileの飛ばす機能全然使ってなくて、ただ落とすだけならそれで良さそう」
妹「でも上に乗ってジャンプ出来ないのもだし、projectile自体に問題ある気がするんだけど」
「ジャンプに関しては、ちょこっと飛べることもあるし、あと下に降りる時に妙に速いんだよね。なんか下方向に強い力をかけられてる気がする」
妹「projectileのバグ」
「CharacterMovementの問題かもしれないし、元々そういう設計なのかもしれないけど、それを調べるにはC++のソースコードを読まないと無理かな」
妹「読めばわかるのか?」
「理屈から言えばソースコードを読めばどういう理由でどういう動作になってるか全部わかるよ。ただC++はあんまり得意じゃないし、UE4のソースコードも読み慣れてないから、時間かかると思うよ。そのあいだにUE5とかに出ちゃうかも。ソースコード無いと本当にお手上げになるから、それ考えたらだいぶマシだけど」
妹「それはわたしも読んでいいのか?」
「読んでもいいけど……中身ぜんぶ英語だよ?」
妹「よし、あきらめよう。Z軸だけ物理作戦でいく」
追記 その後この問題の解決法がわかりました。 imoue.hatenablog.com