ゲームが作れるようになるまでがんばる日記

ゲーム制作のことを中心にゲームに関することを書いています

Godot

『Godot勉強会 #1』のスライド資料

gamemakers.jp 『Godot勉強会 #1』のスライド資料が公開されたという。 いくつかゲームエンジンを触ってきて、2Dだと一番やりやすかったのはGodotだった。 これから、2Dでゲームを作ってみるならGodotを使おうかなと思っている。

完成

いつものワンボタンゲームを今回はGodotで作ってみた。思った以上にスクリプトは使いやすかった。ビジュアルスクリプトが廃止されたのも納得。 pic.twitter.com/wJC6b7Tx5d— toburau (@toburau) 2023年7月13日 だいぶ時間がかかってしまったが、Godotでのワ…

サウンド付け

Godotでサウンドの設定。 BGM用とSE用で再生の仕組みが別だったりするのかなと思っていたら、特に違いは無かったようだ。 AudioStreamPlayerでBGMもSEも再生した。 ちょっと躓いたのは、再生されているか調べるのは playing なのだが、メソッドだと勘違いし…

ゲームオーバー画面とリスタート処理

Godotでゲームオーバー画面とリスタート処理を実装。 プレイヤーの初期化部分が正しく出来ておらず、リスタートしても表示されないとか、表示するようになったけど、エネミーに当たらなくなっているとか、一つ一つ修正していって、リスタートも正しく行える…

タイトル画面

Godotでタイトル画面のシーケンスを実装。 てっきり実装したと思っていたプレイヤーの開始部分がまだ実装されていなかったので、まずはそこから実装。 背景や敵キャラは実装済みだったので、タイトル画面のボタンを押したらUIを消して、メインへシグナルを送…

Godot 4.1 リリース

godotengine.org gamemakers.jp Godotの最新バージョン4.1がリリースされた。 さっそくダウンロードして今作っているプロジェクトを開いてみたところ、アップグレードされるというダイアログが出た。OKを押して進めたが、特に問題なく実行できた。 変更され…

yieldとawait

引き続きGodotでUIの作成。 ボタンを配置したり、ゲームオーバーのメッセージを出すところなどを、ドキュメントを読みながら、真似して実装。 ドキュメントのスクリプトをコピーしていたところ、yieldという命令があって、そんなのあったかなと思っていたら…

HUD

Godotでタイトル画面とゲームオーバー画面用のHUDのためのシーンを作成。 とりあえず、ラベルでテキストを表示。このレイアウトが思ったように調整できなくて苦労する。フォントサイズにアライン、アンカーなどいまいちそのあたりの仕組みがよく分かっていな…

開始と停止

Godotでタイトル画面を実装するために、今まではキャラクターやBGが生成されるとすぐに動いていたので、開始と停止の機能を追加。 各ノードにstartとstopの関数を追加し、それをすぐにメインのスクリプトから呼び出せた。 イベントとかメッセージとか使わな…

実行中のノード

Godotでプレイヤーがやられてしまったときの処理を実装中。 実行中にノードがどのようになっているかは、実行するとシーンウィンドウに「リモート」「ローカル」の項目が現れるので、リモートを選べば、実行中のノード一覧を見ることができる。 エネミーが複…

コリジョン判定成功

Godotでコリジョンが当たらない問題を調査していたところ、原因がやっと分かった。 エネミーキャラはRigidBody2Dを使っているのだが、その移動は単純に座標であるpositionを変更しておこなっていた。 これを速度であるlinear_velociyの値で移動するようにし…

コリジョンチェック

今日もGodotのコリジョン部分のチェック。 以前の2Dチュートリアルのプロジェクトファイルを開いて、コリジョンをどう設定したのか比較してみたのだが、同じように設定しているように見える。なのに期待通りに動いていない。 まだ慣れていないシステムだとバ…

コリジョンデバッグ表示

Godotでプレイヤーとエネミーの動きを調整。 そして、相変わらず、コリジョン判定が正しく取れない。 Godotのメニューのデバッグに「コリジョン形状を表示」という項目があり、それをチェックしておくと、実行時にコリジョンが表示される。 試してみたところ…

エネミー生成

Godotでエネミーを生成し、ステージに追加。 プレイヤーとの当たり判定を取ろうとしたがヒットしたときのイベントが呼び出されない。イベントが正しく設定されていないのか、それともコリジョンが正しく設定されていないのか。 あとステージ上にエネミーが存…

背景のつなぎ目

Godotで背景のスクロールを実装した。 横にシームレスな背景画像を2つ並べてループさせているのだが、その2つのテクスチャのつなぎ目にラインのようなものが見えてしまう。 シームレスに作ったので、そのまま並べればきれいにつながるはずなのだが。 テクス…

描画順番

GodotでBGを設定。結局、エディター上で確認しながらサイズ調整した。 実行してみたところプレイヤーよりも手前に表示されてしまった。 ふとエディター上での順番をプレイヤーより上にBGの位置を変えてみたところ、期待通りにBGの前にプレイヤーが表示される…

メインシーンとBG

Godotでメインシーンを作成し、BGを設定。 とりあえず、BGの画像をメインシーンへ登録してみたところ、表示は出来たがサイズが期待したとおりではない。 さらにこれをループでスクロールさせなくてはいけないわけで。 ドキュメントでスプライト系を調べてみ…

エネミーの作成

Godotでエネミーを作成。 チュートリアルとエネミーの動きは違うけど、やるべきことはほぼ変わらないので、チュートリアルを真似して簡単に実装できた。 ステージがなくても各パーツから作っていくことができるというのもGodotの面白いところ。

プレイヤーのジャンプ

Godotでプレイヤーのジャンプを実装。 以前、Python版で作ったコードを参考にしながら実装した。 Godotのスクリプトの文法はPythonに似ているので、非常にやりやすかった。 多少パラメータを調整しただけで、内容的にはほぼそのままで書けた感じ。

プレイヤーのアニメーションとジャンプ

プレイヤーのアニメーションとジャンプの実装中。 ジャンプはコードで座標計算しようとしていたところ、プロパティにGravityの項目があったので、物理で動かせるかもしれないと、Area2Dについてドキュメントを見てみた。 ところが、エディタで表示されている…

プレイヤーのスクリプト

Godotでプレイヤーのスクリプトを実装中。 今まではチュートリアルで正解がある状態で試していたので、いざ自分で書き始めるといろいろとつまづく。 とくにデバッグの仕方がいまいち分からないので、コードを少し書いては実行して確認するのがなかなかうまく…

プレイヤーキャラクターのアニメとコリジョン

Godotでプレイヤーキャラクターのアニメーションとコリジョンの追加。 アニメーションは以前使ったアセットを流用。 プロジェクトフォルダにコピーするだけで、Godotのエディターで認識され、簡単に利用することができた。

画像データ

Godotでプレイヤーキャラクターの作成。 仮の画像をリソースで追加してみたところ、エラーになってしまって表示できなかった。また別の画像ファイルにしてみたら、今度は大丈夫だった。 画像データに問題があるのかなと思ったけど、ファイル名が長いのが問題…

別PCでクローン

GitHubに登録したGodotのプロジェクトを別のPCでクローンして、Godotのエディターで開いてみた。 とくに問題なく読み込むことができた。隠しフォルダの .godot は登録しなくても大丈夫そうだ。 もしかするとエディタのレイアウトとかの設定が入っているかも…

新規プロジェクト作成

Godotで新規プロジェクトを作成。今回はGitHubでファイル管理するために、リポジトリを作って登録。 プロジェクトのフォルダを見ていたら、隠しフォルダ .godot があったけど、こちらも全部登録する必要はあるのかな。 とりあえず、別環境でクローンして試し…

3Dチュートリアル終了

Godotの3Dチュートリアルを最後まで完了した。 最後に、完成品のプロジェクトへのリンクがあったので、ダウンロードしてみたが、動作しなかった。Godot 4.0にはまだ対応していないようだ。一応、プルリクエストに4.0対応のものがあったようだが、まだ取り込…

アニメーションのコピー

Godotの3Dチュートリアル中、アニメーションのコピーの仕方が分からなくて悩む。 ドキュメントにはアニメーションのメニューにコピーとペーストを使うとあったが、これは3.0のときのものらしく、4.0では無くなっているようだ。 で、検索してみたら、イシュー…

アニメーション

Godotの3Dチュートリアル中。 キャラクターにアニメーションをつける部分のドキュメントは4.0にはまだ対応していないとあったが、UIがちょっと見た目違うかなというくらいで、ほぼそのままの感じで実装できた。 ちょっとしたキーフレームでポジションと回転…

ミュージック再生

Godotの3Dチュートリアル中。 BGMの再生を実装。 autoloadsという仕組みで、起動時に自動的に読み込むというもの。最初あまり良くわからなかったが、ドキュメントを見てみたら、Singletons(Autoload)とあった。なるほど、シングルトンの仕組みなのか。

ゲームオーバー画面とリトライ

Godotの3Dチュートリアル中。 ゲームオーバー画面からリトライ部分を実装。 相変わらず、UIのレイアウトの仕組みがいまいちよく分からない。 リトライはシーンのリロードによって実現していて、 get_tree().reload_current_scene()で行っている。