OpenAssetOrgのアセットで2Dゲームを作る⑨ キルゾーンによる矢の消滅
「撃った矢が画面外に飛び出した後もどこかをさまよってしまうので、キルゾーンを設置して消滅してもらうことにした。キルゾーンという言葉は軍隊からきてるらしいけど、ゲームエンジンではそこに入ったアクターを消滅させる、ゲーム世界の回りに設置する境界のような物」
妹「UE4以外でも使う言葉なの?」
「使う。そういう名前のゲームもあるけど、あれは軍事の方の意味でゲーム制作的な話とは違う。ともかくUE4だとKillZVolumeという名前のやつを置いとくと、そこに当たったアクターは敵も味方も全部消える」
「全部消えるのはKillZVolumeのデフォルトのコリジョンプリセットが、OverlapAllDynamicになってるからで、そこを変えて当たらないようにすれば消えないんだけど、キルゾーンといえば全部消すものだという印象」
妹「ノードとかなくても勝手に消えるんだ」
「消える。消える時にOverlapとかDestroyedとかイベントは発生するんだけど、一度当たったアクターが消えないようにするのは無理。だから条件次第でDestroyしたりしなかったりするようなのには、普通のTriggerVolumeとかを使う」
妹「ところで、なんで最初の図だと、カメラの範囲とキルゾーンの間にスキマあるの?」
「キルゾーンをカメラ外ギリギリに置くと、画面端スレスレにある矢まで消えちゃうんだよ。コリジョンの大きさの関係で、画面外に出るより先にキルゾーンに接触するから」
妹「そうすると矢が変な場所で消えちゃうのか」
「右端から左に向かってくる敵も同じで、最初はカメラ外に出現して、徐々にカメラの中に入ってきた方が自然に見える。でもキルゾーンが近すぎると出てくる前に消える、だからある程度のスキマが必要」
妹「スキマってどれぐらいあればいいの?」
「最低限必要なスキマは、キャラの横幅分。今回の場合だと32ピクセル=32cm。これだけあれば画面外に消えた後でキルゾーンに当たるはず。でもギリギリに作る必要もないから少し余裕を持たせて4キャラ分空けてる。ちなみに背景のグリッドは先日Proccesingで作ったやつのカスタマイズ版」