NEW!! ハイスペラボ

敵にGodotくんモデルを使ったらエンジンが崩壊した話 - Godotのチュートリアル未完走でゲームを作ってみた話 #3

eye-touch

今回の記事ではDay7 ~ Day51までにあったことをまとめていきます。 ではいこう!

〜注意事項〜 この記事は、「条件分岐」や「関数」など、プログラミングの基本的な概念を知っていることを前提に書かれています。
基礎的な内容にはあまり触れていないため、もしそういった知識がまだない場合は、入門向けの記事を先に読むことをおすすめします。 (今はちょっと余裕がなくて書けていませんが、今後は初心者向けの記事も投稿する予定です。お楽しみに!)
また、すでにC#をしっかり理解している方にとっては、退屈な内容に感じられるかもしれません。
ですが、初心に戻って基本の意味を改めて確認してみるのも、新しい発見につながるかもしれません。

~Day7 - Day51まで一気見!~

一気にまとめていきたいと思います。

-Day7 ~ Day10 (2025/6/29 ~ 2025/7/2)-

この期間はとりあえず、主人公のキャラデザを完成させて、主人公のモデル作りに取り掛かりました。

当時描いたキャラクターの絵
主人公のデザイン画
作成途中の写真
Blenderでのモデリング作業の様子

-Day11 ~ Day17(2025/7/3 ~ 2025/7/9) -

この期間は私が考えていた攻撃の1つである。LightBallを作り始めた。低速の遠距離攻撃というイメージです。 ちょうど、当時2025/7/5に大地震が起こるっていう予言があったらので結構そわそわしてたこともあって、停滞している時期もありました。

当時のメモ

Day12 今日はコーディングもブレンダーもしなかった。世間だと明日、日本が壊滅する規模の地震が起こるという噂をよく耳にする。これはあくまで「たつき諒氏」の予言であり、100%的中というわけでもない。逆に100%ハズレとも言えない。もしも実際に予言通りに大地震が発生し、PCが地震によって壊れ、復旧したけどファイルが破損してて使えないとかなったら発狂どころの話じゃないのでGithubにBackUPを取っておいた。ちなみにこのリポジトリは非公開なので見ることはできないということを知っておいてほしい。

当時は予言が当たるとは思っていなかったけどもしも起こったら最悪だったのでこういう感じでした。

Day13は、 //-----------------------------<パラメーター>---------------------------------// という私が考えた独自のコメントを使って、コードの方の整理をしました。

整理されたコード
可読性を上げるための独自ルールを導入

あと、DiscordのGodotの日本コミュニティーに入ろうと思ってやってDiscordの登録をしました。ちょうどこの辺りでPart0の記事ができた頃っすね。あと、ファイルパスの修正をしました。

Day14では、LightBallのインスタンス化した後の生成位置の調整をしました。あと、日本のGodotコミュニティーで進捗と質問をしました。

本当は写真を用意したかったのですが、昔すぎてなくなってました

Day15,16,17と発射関数を作りました。この作業中に学んだことがあります。Day17のことでした。その時はプレイヤーの向いている方向にLightBallを飛ばそうとしていたのですが、Playerがこの時もですね、なぜかGetNodeでうまく取得できない問題が起きていたのですが、その時にPlayerから直接Rotation(向いている方向のデータ)を取るのではなく、手間ですが、Playerの方で変数にして、それを取得するという方針でやってなんとか動くようになりました。その時に私は「視点を変えてみる」ことの重要さに気づきました。この気づきのおかげで今のコーディングは当時よりも経験があるということもあり、倍ぐらいのスピードで進めれています。

この考え方は皆さんも持つといいのではないでしょうか。(元々気づいていた人からしたらくどいかもしれませんねすいません。)

-Day18(2025/7/11)-

この日はカメラの方のコーディングと落下判定&リスポーンの機構を作りました。その時に使ったTimerノードをどうやら当時の私は癖が強いと感じたようです。

Camera作成途中の写真
「Camera」

当時のメモ(切り抜き)

Day18 今日は昨日宣言したカメラの角度の調整のことをすっかり忘れてプレイヤーが落下したら元の場所に戻されるという仕様を作っていた。今回初めて触ったTimerノードだが、まあまあ癖の強いノードだと感じた。OneShot===>は?、Auto Start===>何をオートスタートするのでしょうか。って感じでチンプンカンプンでしたが、なんとか作り切ることができました。GlobalPositionが-10以下になったら0.8秒待って元の場所に戻るというふうにした。仕組みはこうだ。まずはifでGlobalPositionが-10になっていないかを検知して、それを検知したらタイマーをリセットして1フレーム後にスタート。そしてタイムアウトしたら元の場所に戻すというふうになるように作った。コードを書くのは関数をAIに聞くぐらいですみ、サクッと書くことができた。問題はそのあとだ、このままだと落下して-10以下になった時永遠とタイマーがリセットされ始まることができない。つまり場所を元の場所に戻せないということだ。私はそれを対処するために_ResetTimerという定数(フラグ)を作り、それを落下死判定がない時は1、でY-10以下且_ResetTimer==1の時に場所をリセットするというふうにして、そのあと_ResetTimerを0にし、何度もリセットが起こらないようにした。また、今まで放置していた、ボールを出したあと永久に進み続けて読み込まれ続けてどんどん重くなるという問題を対処するために、プレイヤーと同じようにY-10以下になったらメモリからの解放をさせるようにした。

つまり、この日は落下判定とリスポーン機構を作りました。初めて触った「Timerノード」は、当時の私にはかなり癖が強く感じられました。

  • OneShot?(1回だけ?)
  • Auto Start?(勝手に始まるの?)
Camera作成途中の写真
TimerNode

混乱しながらも、「Y座標が-10以下になったら0.8秒待ってリスポーン」という仕組みを構築。if文で何度もタイマーがリセットされないよう、_ResetTimer というフラグ管理用の変数を使って制御しました。今思えば基本的なフラグ管理ですが、自力で解決策にたどり着いたのは大きな一歩でした。

-Day19 ~ Day24 (2025/7/12 ~ 2025/7/17) -

この期間は主にカメラの作成をしていました。カメラを作るにあたって当時見つけた桜井政博のゲームを作るにはのカメラの回を見て設計していました。エラーが出たりしましたが、ほとんどファイルパスのミスでした。

-Day25 ~ Day30(2025/7/18 ~ 2025/7/25) -

この期間はPowerStarというチャージ攻撃を作りました。長押しで星を貯めて、溜まった量だけある星が前方に飛んでいくという攻撃です。まあ、どの攻撃も見栄えは良くなかったですけどね。

-Day31(2025/7/26) -

この日は私のゲーム制作史上最もやばいことが起きました。敵を作って攻撃を当ててみようということをしていたのですが、その敵キャラのモデルにGodotのロゴのあの人のモデルを敵のモデルにしてビルドしたらGodotEngineが急に落ちて、依存関係がめちゃくちゃになったんですね。でその日はもう制作辞めて別のことをしていました。

-Day32 ~ Day47(2025/7/27 ~ 2025/8/12)-

この2週間でですね。Day31のやつを復旧するがてらバージョンをあげてみるかと試してみてコードの書き方とか仕様が変わっていて今のコードが使えないというふうになってバージョンアップを断念したり、ファイルのフォルダ構成やノードツリーを整えてみたりしてました。まあ、依存関係が壊れてただけでコードは無事だったのですけど。バージョンを上げたり下げたりしてて結構時間食いました。

-Day48 ~ Day51-

序盤で作った、プレイヤーのモデルの調整をして、ボーンを入れてアニメーションを入れようとしていたのですが、ボーンを入れる段階で終了しました。

~締め~

今回の記事では、Day7からDay51までの制作期間を一気に振り返りました。振り返ってみると、順調に進んでいた日よりも、止まったり、悩んだり、トラブルに巻き込まれたりしていた日の方が圧倒的に多かった気がします。ですが、その一つ一つが無駄だったかというと、今となってはそうは思いません。視点を変えることで解決できた問題や、環境トラブルを通して学んだバックアップの大切さ、設計を見直す重要性など、この期間があったからこそ今の制作スピードや考え方があります。派手な進捗は少ないですが、基礎体力を作っていた期間だったと言えるかもしれません。次は、この積み重ねをどう形にしていくのかを書いていこうと思います。