読者です 読者をやめる 読者になる 読者になる

妹でもわかるUnrealEngine4

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

妹、当たってるはずなのにHITしない

妹「ヒットしないんだけど……」

「中ヒットの話ですか?」

妹「それじゃなくて……OnComponentHitの話。敵を攻撃出来るようにしたんだけど、当たってる雰囲気なのに、当たってないことがある」

「どういう場合?」

妹「たとえばこんなの」

f:id:una_unagi:20150802200553g:plain

妹「攻撃が当たると、敵がぶっ飛んでいくんだけど、こういう止まってるやつにあたってくれない。あと後ろに下がってるやつもかな」

「この杖みたいなのはどういう風に出してるの? コリジョンの設定は?」

妹「どういう風にといわれても、スポーンさせてるだけだよ。コリジョンはBlockにしてある。」

「うーん、多分これヒットしてないってことだと思う。コリジョンは重なってるけど、当たってない」

妹「??? 重なってるってことは……当たってるのでは?」

「当たってるんじゃなくて、埋まってるというか、めりこんでるというか。ともかくUE4的にヒットはしてないと考えてる状況」

妹「でもこっちに向かってきてるやつには当たったよ?」

「こっちに向かって動いてるからヒットしたんだと思う。HitがOvarlapと違うところの1つに、必ず当たった方向がパラメータに含まれてるというのがある。右側に当たったとか、上に当たったとか、そういうの。逆に言うとそれがわからない状態はヒットじゃない。どっちかがもう一方コリジョンを押す方向に動くことで、はじめて当たった方向がわかって、ヒットとしたとかんがえることが出来る」

妹「うーん、でも攻撃したキャラがこっち側に居るわけだから、その反対側が当たってるとすれば問題はなさそうな」

「Hitの仕組みはコリジョン同士の当たり方だけだから、誰が攻撃したことによって発生したコリジョンとか、全然計算に入ってない」

妹「するとどうしたらいいのだ? いくらなんでも止まってる敵を攻撃できないというのは……」

「攻撃用のコリジョンをOverlapにしたらいいんじゃないかな。Ovarlapだったら方向とか関係なく、単純に今重なってるかどうかだけでチェックできる」

妹「うーん、でも、重なって欲しくはないんだよ。これがビームとかカマイタチとかだったらそれでいいんだけど、実際に物があって当たってるわけだから、それで当たらないのはなんか納得いかない」

「そういうことなら攻撃判定を移動式にすればいい。シューティングの弾みたいに。自キャラの内側から撃ち出す感じで。そうすればコリジョンの移動方向がはっきりするから、相手が動いてなくてもヒットの判定が出るはず」

妹「内側って……自分の内側に手とか武器とかあって、それが飛んでいったら、かなりキモイことになると思うんですが」

「絵はそのままでいいんだよ。ただ絵の方に付いてるコリジョンを無しにして、絵とは別に透明のコリジョンを作って発射する。もちろんそのまま遠くまで飛んでいったら困るから、適度な距離で消えるように時間とか調節する」

妹「それなら作れそうな気がする。でも攻撃した後しばらく攻撃判定が残るみたいのは?」

「消える直前はゆっくり動かすとか。でも考えてみると、攻撃ボタン押した後しばらくして当たるってことは、敵から接近してきてるんだろうから、その場合は攻撃判定が静止しててもヒットになるんじゃないかな? 発射直後さえ何とかなってればよさそう」

妹「敵がワープしてきたりとか」

「ワープ……それだとたしかにどっちも止まった状態ということでヒットしないだろうけど……ワープ直後だから無敵ってことにしたらどうかな。もしくは攻撃を避けるためにちょっと離れたワープさせる。どっちにしてもプレイヤー的に違和感なさそうな気がする」

妹「さすがわたしの兄だけあって卑怯なことをポンポン思いつくなあ」

「卑怯じゃないから。工夫だから」