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

妹でもわかるUnrealEngine4

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

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

続HIT調査

f:id:una_unagi:20150808215739p:plain

妹「……その様子だとHitイベント起こす方法わからなかったの?」

「一応わかったといえばわかった。妖精をActorやPawnじゃなく、CharacterかPaperCharacterクラスにして、Add Movement Inputで動かすとHitイベントに反応が出た。主人公キャラを動かすのと同じ方法だね」

妹「そうするとCharacterクラスに秘密があるのか?」

「CharacterMovementの方かもしれないけど、Character専用だから結局そんな感じになる。」

妹「別にCharacterでもいいんだけど、上に乗っかった時に跳ねるのとか未解決だし、あれはあれでナゾが多い……」

「なんでCharacterだとHitイベントが起きるかってのもよくわからないからね。そんな説明や設定項目は見当たらなかったし。でもPawnにして他のMovement使って動かしても反応が無かった」

妹「本とかドキュメントとかも見て回ったるんだけど、書いてないというか、そもそもHit自体使ってない気がした」

「2Dのアクションゲームだと、キャラクターはだいたいOverlap的な考え方で処理してるかも。物理系のゲームを除けば。ダメージは受けたりはするけど、絵としては別に重なっても構わない感じで動かしてる。地面に関してはめりこんだら変だからBlock的だけど」

妹「別に使わないならないでいいんだけどさ、どういう時にHitイベントが起こるのか、起きないのか、そこらへんをはっきりしときたいんだけどな」

「普通の弾とかはHitしていいはずなんだけど、設定の問題かもしれないし、バグが原因という可能性も」

妹「はっきりしてない……」

「とりあえずHitで変なとこはOverlapに切り替えてみては?」

妹「だけどOverlapだとちゃんとあたったのかわかりにくくない?」

「キャラの本体よりちょびっとだけ大きい判定を作って、そこにOverlapしたら当たったということでいいと思うけど」

妹「それだとコリジョンを沢山作らないといけなくなるから、敵ごとに作ってたら大変なことにならない?」

「その点に関してはいくつか解決策がある。1つはブループリントでコリジョンを生成する。スポーンした時に、メインのコリジョンの位置と大きさから計算して、自動的にちょっとだけ大きく設定すれば良い。で、それをクラス化して継承する。当たった方向が知りたい場合は上下左右に小さいコリジョンを、これまた自動的に配置する」

妹「たしかに自動でやった方がいいような気はする。うまく出来るかわからないけど」

「もう1つは大きさごとに3種類ぐらいに分けてクラスを作って、そこにコリジョンは全部設定して、継承したクラスで絵とか動き方とかの設定をする。タイルベースのゲーム……例えばスーパーマリオブラザーズで言うと、クリボートゲゾーって同じ大きさだし、判定も一緒と考えられる。同じクラスにして上から当たった時にどうなるかは違うけど、そこは継承先のクラスで書けばいい。でもクッパは大きいから別のクラスにする」

妹「どっちがいいの?」

「自動化出来そうなら自動化でいいと思うよ。複雑すぎて上手く自動化する自信がなければ別クラスで。別クラスにしても可能な部分は自動化した方がいいと思うけど」

妹「特殊な動きをするやつは自動化とか共通化とか難しくない?」

「継承元でコリジョンを多めに作っておけばいい。要らないのは使わないか継承先で無効化すればいいから、大抵のキャラには対応出来る。でも複数のアクタがうにょうにょして動くようなのは専用クラスがいいかも。楽するために継承するんだから、専用に作った方が楽な時はそうする」

妹「たくさんコリジョンが増えそうだなあ……」

「ある程度はしょうがないよ。Hitが機能してるとしても、なんだかんだでいろんな方向に色んな形のコリジョンが欲しくなるものだから。アクションゲームの主人公とか、見えないOverlapコリジョンがめちゃくちゃいっぱいくっついて動いてる」

妹「Hitはいまいち信用できないし、Overlapもちょっと研究してみる」