イベントHitが発生しない問題・解決編
妹「HitじゃなくてOverlapにしてみようと思ってたんだけど、ノードにカーソル合わせてみると、何か気になる文章が出てきたんだけど……」
妹「言ってる意味はよくわからないけど、CharacterMovementとか、PhysicsをONにするとか、SetActerLocationでSweepをONにしないと動きませんって書いてある気がする」
「言ってる意味はよくわからないけど確かにそんな風に見える。CharacterMovementでもPhysicsでもないから、Sweepでってことになるけど、でもSweepはONにしても動き方変わらなかったんだけどな?」
妹「じゃあバグ?」
「ちょっとSetActorLocationのドキュメントを見てみる」
「あっ……」
Should we sweep to the destination location, stopping short of the target if blocked by something. Note:If the root component has no collision this will have no effect.
妹「なんて書いてあるのだ?」
「Sweep状態だと途中でブロックされて予定より短い距離で止まるよ。でもrootコンポーネントがコリジョンを持ってなかったら効果ないから気を付けてね……みたいな事が書いてある」
「rootコンポーネントというのは、この場合Sceneってやつになるんだけど」
妹「MoveComponentTo使う時にルートからの相対位置で指定するから、それ用に作ったやつだ」
「このSceneはコリジョンは持ってない。PaperSpriteコンポーネントにBlockのコリジョンを設定してるから、これをrootに持ってきて、使ってないはSceneを消す」
「こういう風にするとHITするようになる」
妹「コリジョンってrootにないと駄目だったのか」
「いやroot以外のコリジョンも有効なんだけど、rootにも何か無いと他のも効かないみたい」
妹「rootのコリジョンはBlockじゃないと駄目なの? Overlapとか」
「試してみた感じだとrootのコリジョンでBlockしてる場合だけ、他のBlockも有効になる感じ。Overlapを親にすると全体的に透けてしまう」
妹「うーん、そうするとCharacterのコリジョンはカプセル型以外に出来ないってことなのかな? カプセル無効にするとHitしなくなるわけだし。Y軸を思いっきりずらして、反応しないようにすればいいのかな。」
「形の問題ならrootのコリジョンを小さくして、それより大きいのを子につければ大丈夫だけど、基本的にはrootに中心部分のBlockコリジョンを置くのが良さそう」
妹「ようやく長く続いたHitとの戦いが終わった……」