いぬおさんのおもしろ数学実験室

おいしい紅茶でも飲みながら数学、物理、工学、プログラミング、そして読書を楽しみましょう

100日で50弾! Day 86/ Bullet43:クロスバースト

 100日チャレンジ『100日で50弾!』第43回、クロスバーストです。いや、要するに十字に弾を(少しの時間差で)撃つだけです。ただ、効果としてはこれまでのものと違う部分もあり、これも採用です。動画はこちら。

youtu.be

単純に空間内に(時間差で)撃っているだけなのにそれなりに立体的に見えるから不思議です。いつも同じ十字では面白くないですから、乱数を使って形をいろいろにしています。

 これまでとは背景その他いろいろ変わりましたが、一番変えたのは設計です。これまで、ほぼUnity流(?)は無視でした。コードを書くファイル(スクリプト)をある程度(かなり細かく)分けて、何かにアタッチ……というのが何とも変な感じで、最低限必要なところだけそうしていました。新年になったし、心機一転、新しく!……というわけで勉強することに。そうしたら、これは凄い。コードの見通しが極端によくなりました。早くこうすればよかった。具体的に何が違うのか、落ち着いて考えてみると……。
①「××をしたい」と思ったとき、コードのどこを見ればよいのか、すぐ分かるようになった。
②動作が思いどおりでなかったとき、原因がどこにあるのか、範囲の特定がしやすくなった。
③ゲームのステージの初期化や後始末が楽になった。
④「ステージ開始前にタイトルを入れたい」なども簡単になった。
……などなど。今まで、『コーディングの作法』みたいな本も何回か買っていますが、本気で勉強していませんでした。昔のBASICやFORTRANなどの頃のまま……までではないかも知れませんが、それに近かったです。普通にゲームは書けていたし、「困らないよ」という感じでした。が、もう戻れません。
 シューティングゲームを書こうとするとき、例えば自機の移動ができるようにすることから始めたりします。敵を出現させ、弾も撃たせます。このへんまではいいけれど、「これがステージ1。次にステージ2だ!」というとき、ほぼ確実に問題が起こります。あれが動かない、敵が現れない、音楽が鳴らなくなる、……。ステージ4まで作ったら、「次はタイトルを入れる!」……でまたトラブルが。要するに、各ステージが完全に独立にはなっていないわけです。なんとなく前のステージでセットした変数の値がそのまま、次のステージでも使われていたりして、たまたまうまく使われていたりするんですね。もうこうなるといったいどの変数をクリアしてやればよいのか、そしてそれはどこにあるのか、コードの動きを徹底的に追いかけないと分からないのです。
 さすがに最近はこれほどひどくはないけれど、いつも苦労はしていました。今まで大変だった分、今回の事件(?)は衝撃的でした!

 楽しくなりそうです。飛躍の1年にします。