妹でもわかるUnrealEngine4

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

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

サンプルゲーム、シリージオの遊び方

妹「シリージオっていうゲーム遊んでたんだけど、ひどい目にあったよ。弾いくら当てても死なない敵がいて全然クリア出来ないから、腹立って調べたら自機の色を変えて弾の色を変えて戦わなきゃいけないとか。しかも変える方法がホイール回転とか。こんなの絶対わかんないだろ……」

「こないだのターン制ストラテジーもだけど、制作動画が付いてるから、それ見たらわかるってことなんじゃないかな?」

妹「そんなのもあった気はするけど、何言ってるかわからんないから見てないよ。自動字幕を自動翻訳してもろくなことにはならないと学習した」

「結果的に勉強になったからいいのでは」

妹「でも結局クリア出来てないんだよ。ウェーブとか色々言ってるから、クリア自体はありそうな気がするんだけど。ゲームを練習するのと、ブループリントを調べるのと、どっちがてっとり早いかと考えてるところ」

「あ、クリア出来た」

f:id:una_unagi:20150915232337p:plain

妹「なんでわたしがクリア出来ないのに兄が出来てるんだよ!」

「そう言われても困るんだけど。普通に敵倒していったら終わったよ。たしかに無限に敵が出てくるタイプじゃなかった。とにかくで逃げて体力回復と時間稼ぎをして、その間に色をあわせる感じで」

妹「なんか納得いかないけど……それはそれとして、これレベルブループリントもゲームモードにもなんにも書いてないんだけど、どこに本体があるの?」

「調べてみるとほとんどの事は、自機のBP_Playerと、敵キャラ製造装置でレベルに配置済みのBP_EnemySpawnerに書いてある。敵の色と当たった弾が同じかとかは敵のBP_MasterEnemyに書いて、それを各色の敵が継承してる」

妹「BP_MasterEnemyは見た気がする。あとプロジェクト設定を見て武器変更ボタンがホイールなのもわかった」

「個別のブループリントはそんなに難しくないけど、複雑に絡み合ってるところはある。プレイヤーに書いてあるのは弾の発射と自動回復、あと死んだ時の扱いとかだから、ゲームの制御という点ではBP_EnemySpawnerにほとんど書いてある。出る敵の種類と数がエディタ上で設定出来る変数になって、標準だと20個の3セットだから計60匹倒せばクリアだと思う。

f:id:una_unagi:20150915234415p:plain

妹「もっといっぱい出てた気がする。バグなのでは……」

「ちゃんと数えたわけじゃないから違うとは言い切れないけど、そんなもんだと思うよ。あと各ウェーブで出た敵は全滅させないと次が出ない。だから敵が減ってきたら回復してから倒すと安定する」

妹「敵が2色出てくる時があるけど、あれも設定してあるの?」

「してある。BP_MasterEnemyの"クラス"の配列で設定してる」

妹「リファレンスじゃなくてクラスを使うの?」

「どういう種類の敵が出るかを設定したいだけだから、クラス名を設定出来るようにしてある。実際に敵をスポーンさせるのはゲームが始まった後だし、敵一覧にリファレンスを保存しなくていい。ちなみに確率は設定してあるやつ全部均等。赤の敵クラスを3つ青の敵クラスを1つ追加しておくと、赤75%で青25%というのも出来る」

妹「それで倒し終わると次が出てくると」

「あとややこしいのは敵を出すのにSetTimer by Function Nameノードを使っているところ。ここにカスタムイベントの名前を設定することで、定期的に呼び出して、そこで敵を発生させてる。SetTimer by Function Nameを使うと、敵を全部出した後もイベントが止められないから、何もせずに終了するように書いてある」

妹「SetTimer by Function Nameは使わない方がいいの?」

「この仕組みだとウェーブが増えるごとにタイマーの数も増えて、使わないタイマーが動き続ける状態になると思うんだよ。そこがちょっと気になる。各ウェーブの設定も構造体にしたらもっとシンプルになりそうだし。これは元々が実演しながら作ったプロジェクトみたいだから、そういう細かいところまで気にしてないというか、むしろ自分で気になるところを改造していく勉強材料に使う物なんだと思う」

妹「……あー、またやられた。これで勝ったと思うなよ! タッピーチキンならわたしの方が上手いんだからな!」