年末年始なのでGodotでゲームでも作ってみる 2日目

初日はサンプルを動かすところまでで力尽きてしまったので、今日はドキュメントを読み進めながら新しいプロジェクトを作るところまで進みたい。

今日の目標

  • Hello worldを目指す

ドキュメントを読む

Godotはドキュメントが充実している。残念ながら日本語の翻訳は追いついていないようだが、少なくとも英語版については分かりやすくてしっかりしたドキュメントが用意されていて、最初の導入はそれを読めばなんとかなりそうだ。

Step by stepガイドには、エディタの説明やGodotに登場する設計・思想の説明が用意されている。Godotのエディタは比較的シンプルで直感的に使えるが、Your first look at Godot’s editorあたりを読んで各UIパーツの名前を覚えておくと、以降ドキュメントなどを読み進めやすくなる。

Scenes and nodesInstancingのページには、シーンやノード、オブジェクトのインスタンス生成などについての説明がある。このあたりの考え方はUnityやSceneKitなどとかなり近しいので、その辺りに触れたことがある人はスキップしても問題ないのではないかと思う。

新しいプロジェクトを作る

このStep by stepのScenes and nodesを読み進めながら、新しいプロジェクトを作ってみる。

Project ManagerのNew Projectから新しいプロジェクトを作る。RendererにはOpenGL ES 3.0とOpenGL ES 2.0のいずれかを選択できる。今回は特に古いデバイスで動かしたいとかブラウザ上で動かしたいというような目的はないので、OpenGL ES 3.0を選んだ。

Sceneを作る

Godotには他のゲームエンジンと同様にSceneという概念がある。一つのゲームの中に「オープニングシーン」「メニューシーン」「バトルシーン」「結果表示シーン」のように複数のSceneを含めることができる。

後で理解すれば良い話だが、Sceneは「複数のNodeから構成されるNode」でSceneの下に別のSceneを読み込んでくっつける、というようなこともできる。Sceneという名前からは少しイメージしにくいがキャラクターやUIなど、グループで管理した方が都合が良いNodeもSceneとして作って利用することができる。

Godotアプリケーションでは、最低一つのScene(メインシーン)を作成する必要があるので、とりあえずシンプルなシーンを一つ作ってそれを実行してみる。

画面左上のScene dockからシーンを追加することができる。明示的に2D Sceneや3D Scene、User Interfaceを作っても良いし、他のNodeからSceneを作ることもできる(SceneはただのNode)。2D Sceneを作ってからそこにNodeを設置した方が分かりやすそうな気もするが、とりあえずドキュメントに従ってLabel nodeをRoot nodeとするSceneを作るため、Other Nodeを選択する。

作成できるNodeの種類がリストアップされる。Label nodeを選択してCreateを実行するとLabel nodeが作られる。

Labelという名前のScene(Node)が作られた。

追加されたLabelにはまだテキストが入力されていないので、InspectorからText欄に適当な文字を入力する。Inspectorでは他にも左寄せ/中央揃え/右寄せといったアラインメントの設定やクリッピング(Textが長くなった場合にLabelのサイズを拡張するのか、元のサイズを維持して表示を省略するのか)などの指定が可能。

テキストを指定したら、実行して表示を確認したい。GodotはScene単位でプログラムを実行する。Sceneを実行する前に、作成したSceneをファイルとして保存する必要がある。Label.tscnというファイル名で保存した。

エディタ右上のPlaytest buttons郡の中に、「Play Scene」というボタンがある。このボタンをクリックすると現在エディタで作業中のSceneを実行して動作確認することができる。

Hello Worldを画面に表示できた。ウィンドウを閉じるか、エディタのPlaytest buttonsにあるStopボタンを押すとプログラムを終了できる。

ちなみに、Play Sceneの代わりにPlayボタンを押すと上記のようなダイアログが表示される。ここでSelect Currentを押すと、現在編集中のSceneがこのアプリケーションのメインシーン(アプリケーション起動時に一番最初に実行されるScene)として設定されることになる。後で、メインシーンを別のSceneに変更したい場合はProject Settingsメニューから設定し直す必要があるので一応頭に入れておく。

なお、Labelを表示するだけのSceneを作る場合はLabelをルートノードにしたSceneを作っても良いが、通常のSceneには複数のNodeが含まれることになる。複数のNodeを追加する場合は最初に2D Sceneをルートノードとして追加して、その下にAdd Child Nodeでノードを追加していけば良い。

イメージの追加

画像を追加する場合は、まずFinderからFileSystem dockにドラッグしてインポートを行う。

FileSystemにインポートされた画像をWorkspaceにドラッグすると、その画像を使ったSpriteノードが作成される。

まとめ

公式ドキュメントに従って、エディタの簡単な使い方とScene / Nodeの追加の仕方を学んだ。もうゲームは半分完成したといっても過言ではないだろう。あとはスクリプトの書き方を学び、作るゲームの内容を考え、素材を用意して実装し、プログラムの書き出しについて学ぶぐらいしか作業は残っていないはずだ。コンディション維持のために今日はこれぐらいにしてストレッチに励もうと思う。

年末年始なのでGodotでゲームでも作ってみる 1日目

特に深い理由はないものの、今年の年末年始は久しぶりにゲームでも作ってみようかという気分になった。Godot Engineというフリーのゲームエンジンが気になっていたので、今回は休みの間気力が続く限りGodot Engineを試してみようと思う。

Godot Engineとは

Godot EngineはiOS / Android / Windows / macOS / HTML5…など様々な環境に対応したゲームを作ることができるゲーム開発環境で、無料で利用することができる。2D/3Dの両方に対応している。登場する概念や設計・思想はUnityやCocos2d、SpriteKitなどといった近年のゲームエンジン/フレームワークのそれに近しく、ドキュメントも充実しているので学習の材料として良さそうだったので、今回これを勉強していくことにした。

今日の目標

  • Godotをインストールする
  • Godotでサンプルプロジェクトを開いて実行してみる

新しいことを始めるときに、全容が見えないうちに高すぎる目標を掲げることは避けたい。初日は環境を構築してサンプルが無事に動いたら上出来ぐらいのテンションで行きたい。

Godotのインストール

公式サイトからGodotの最新版をインストールする。2021年12月29日現在の最新版は3.4.2。

DownloadページからGodotをダウンロードする。独自言語であるGDScriptが使えるStandard版とC#が使えるMono版がある。せっかくなので独自言語であるGDScriptを使うStandard版をインストールした。なおbrew caskを使ってもインストールできるようだ。Zipファイルを解凍して出てきたGodot.appをApplicationsディレクトリに移動するだけでインストールは完了。

起動してみたところ。「プロジェクトが一つもないけど、Asset Libraryにある公式のサンプルでもみてみる?」とのことなので「Open Asset Library」を開いて公式サンプルを見てみようと思う。

Asset LibraryのDemoのリストを見ていると、Skeleton2D DemoというシンプルそうなDemoがあったので、こちらを試してみよう。

詳細画面で「Download」を押すと、Asset Libraryからローカルにプロジェクトがダウンロードされる。

ダウンロードしたデモをインストールする場所を指定する。Project Pathには実在する空のフォルダのパスを指定する。

「Install & Edit」を選ぶと、指定した場所にプロジェクトがインストールされエディタが起動する。

エディタの右上にある「Play」を押すと、プロジェクトを実行して動作を試すことができる。

ゲームが起動した。矢印キーでキャラクターを操作できる。

ゲームを終了してエディタに戻ったら、「Quit to Project List」でプロジェクトを閉じてプロジェクト一覧画面に戻ろう。

プロジェクト一覧画面(Project Manager)に行くと、今開いていたSkeleton2D Demoプロジェクトがリストアップされている。別のデモを試したいときは画面上部のタブを「Asset Library Projects」に切り替えると、そこから先ほどのようにデモを検索してインストールすることができる。

まとめ

インストールはバイナリをzipからコピーするだけ、パスの設定なども不要で躓く点はなかった。サンプルプロジェクトも動いたことだし、今日はここまでにしておいてあとは体調を整えることにでも時間を使いたい。プログラマーはやはり体が資本。少し寒いがランニングにでも行こうと思う。アスファルトの上を走ると膝が痛くなるのが悩みだ。ずっと昔スポーツで膝の半月板を痛めたことの後遺症だと思っていたが、少し前にCTをとってみたらそれが原因ではなく姿勢の悪さ(骨盤の歪み)が原因だと言われた。実際、その後足を組むのをやめて、ストレッチの時間を増やしてから膝の痛みはかなり軽減した。そんなことを思い出した。明日は公式ドキュメントを読みながらプロジェクトを作ってみよう。

PythonとGolangのCSVの処理速度の違いを調べる

大量のデータをバッチ処理するようなプログラムを用意するときに、PythonとGolangのどちらを使うべきかいつも悩む。処理速度は悩むポイントの一つだ。近々大量のCSVを扱うプログラムを書く予定があったので、PythonとGolangでどの程度CSVの処理速度に違いがあるのか実験してみた。

実験は手元のiMac (Intel Core i5 3.4GHz / 40GB 2400MHz DDR4 RAM / Fusion Drive) で行った。

“PythonとGolangのCSVの処理速度の違いを調べる” の続きを読む

M1(Apple silicon)のMacBook Pro

ARMベースのM1チップを搭載したMacが発売されたので、アプリの開発/動作確認用に1台購入した。幸い、Rosetta2の出来がよいようで、自分の出しているMacアプリは基本的にARMベースのMacでも無事に動くことが確認できた。アプリの動作確認ついでに、マシンのパフォーマンスがどれぐらいなのかテストしてみた。

“M1(Apple silicon)のMacBook Pro” の続きを読む

m4aファイルをwavに変換するクイックアクション

ここ数年、ギターの録音はAmpliTube for iPhone/iPadを使うようになった。AmpliTubeでは、録音したトラックをm4aファイルとして書き出すことができるのだが、Cubaseではm4aを直接読み込むことができないので、一度wavファイルに変換して読み込んでいる。この作業が毎回手間なので、Finderから右クリックで一発でwavに変換するためのクイックアクションを作った。

“m4aファイルをwavに変換するクイックアクション” の続きを読む

動画の無音部分を自動でカットするアプリをリリースしました

先日この記事で書いた、動画の無音部分を自動でカットする処理をmacOSアプリとして実装して、VSSRという名前でリリースしました。

“動画の無音部分を自動でカットするアプリをリリースしました” の続きを読む

Google ColabでMask R-CNNを試す

最近のARのオクルージョン処理、あるいはバーチャル背景の実装の裏側には、Image Segmentationの技術が使われているようだ。こういう機能には、カメラの深度センサーを使うものだろうと思っていたが、2D映像からの解析で十分なスピードと精度が出るとは意外だった。

調べていたところ、Google Colabで学習済みのMask R-CNNのモデルを使ってImage Segmentationを動かすための記事があったので、これを元にImage Segmentationを試してみた。

“Google ColabでMask R-CNNを試す” の続きを読む

Privateレポジトリへの依存があるプロジェクトをBitriseでビルドする

Swift Package ManagerでPrivateなレポジトリのパッケージへの依存を含むプロジェクトをBitrise上でビルドしようとして、認証周りで少しハマってしまった。

“Privateレポジトリへの依存があるプロジェクトをBitriseでビルドする” の続きを読む