おはようございます。しゅみぶろぐです。
Godotを使うべく、まずは言語であるGDscript学ぼうと思った矢先
神サイトを見つけました。
それが『Learn GDScript From Zero app』です。無料で初心者向けに日本語でわかりやすく、GDscriptの基礎を学ぶことができます。
今回はその『Learn GDScript From Zero app』を使って感じたことを共有していきたいと思います。
GDScriptって?
GDScriptはGodotというゲーム開発エンジンで主に使われるプログラミング言語です。

Godot専用の言語ですので「ゲーム開発のためだけに新しい言語は…」という方も多くいると思います。
安心してください。その抵抗消えますよ。(履いてはいません)
なぜなら、
GDScript ≒ Python
だからです。
関数の定義の方法が def ではなく func になるなど一部違う場所はありますが、構造や考え方はPython(こっちも基礎しか知らないが)とおおかた同じように感じます。
「ゲーム開発のためだけ」の言語ではなく、Pythonなどほかの言語にも生かせるため学んで損は絶対にないはずです。
Learn GDScript From Zeroとは??
Godotに特化した教育コミュニティ「GDquest」が初心者に向けて公開しているアプリ(ブラウザ)です。
誰もが無料で利用することができ、僕自身もGDScriptの基礎を学ぶのに活用しました。
学習→演習の繰り返しで、視覚的にも論理的にもわかりやすく理解することができました。

プログラミングとかコードとかがよくわからないけれど、コードを実際に書いてゲームを作ってみたい。という方にはとてもおすすめできるアプリです。
また、Pythonなどを触っている方は少し簡単に感じてしまうかもしれませんが、GDScriptならではの機能や特色もあるため時間に余裕のある場合はやっておくとよいと思います。
所要時間
僕が一通りこのサイトを利用してかかった時間は約3~4時間でした。
Pythonの基礎に触れたことがあったため、少し早く終わったかもしれません。
プログラミング言語というものに初めて触れるという方も5~6時間もあれば終わると思います。
基礎を一瞬でマスターできます。
良い点
初心者に優しい
とにかく初心者に優しいつくりになっています。プログラミングがどんなものなのか、コードを書く時の考え方なども細かく書いてあり、初心者の僕の頭にもわかりやすく入ってきます。
GDScriptだけじゃなくてプログラミング全般の考え方入門にも使える勢いです。
実際にコードを書きながら学習できる
全部で27個もの単元に分かれていて、各単元ごと1,2個の演習問題(実際にコードを書く問題)があります。
学んだことをすぐにアウトプットできるため、理解を深めるだけでなく記憶への定着も期待できます。
無料
正直これひとつだけとっても優勝です。
無料は正義。これに尽きます。
ゲーム感覚で楽しめる


上の画像のように、プログラムがゲームのどんな場面で使われていてどんな意味を示しているのかを学習できる単元もあります。
ゲームをつくっている感や、ゲームに触れている感があって楽しく取り組むことができました。
悪い点
日本語訳が不完全
このアプリの唯一の欠点はここだと思います。
全体の約93%が翻訳されていますが、その7%も厄介かつときどきコードまでも翻訳されてしまっています。

例えば、上のような文字列のコードが問題文では

のように思いっきり日本語になっていたりします。

たまにこんなこともあったり…。わかるか。
つまずいたところ
ここは、僕が紹介したサイトを使っている最中につまずいたことを共有しておきます。
まだ学習に取り組んでいない、GDScriptに挑戦するか悩んでいる、という方は読み飛ばしていただいて構いません。
ERROR Function “関数名” not found in base self. というエラー

このエラーは、このサイトの仕組みを少し知っておかないとつまずきやすいと思います。
実際、こんなミスをしました。

「自分で定義する関数名は、ルールにのっとれば何でもよいはずなのに…。」
実際そうなんですが、よくよく考えたら僕は関数を定義しただけで、呼び出してないんです。
なのに出力されているということは、、、サイト側が「出力」を押すと自動的に裏で draw_three_squares()関数を呼び出しているということになります。
よってdraw_three_square()として定義してしまうと、サイト側がその関数を呼び出せずにエラーを吐いてしまうわけです。
lerp()関数とは
線形補間?補間係数?難しい言葉ばかりで理解が難しかった部分をかみ砕いて共有します。
ざっくりいうと、lerp()関数は一点から一点へとどんなスピードで動かすかを指定する関数です。
3つの引数からなります。それぞれ、

を示します。はい、思いましたね。
「なめらかさってなに??」
と。僕もです。
おそらくここを理解してしまえば、lerp()関数の山場は乗り切ったといえると思います。
言い換えると、「A:出発地点からB:到着地点まで1フレームあたりCの割合で進む」です。
例えば…
leap(0, 100, 0.1)
と数値を代入すると、内部では1フレームごとに
のような計算をしていて、以下の表のようになります。
| フレーム | 位置 | 計算式 |
| 0 | 0 | |
| 1 | 10 | 0 + ( 100 – 0 ) * 0.1 = 10 |
| 2 | 19 | 10 + ( 100 – 10 ) * 0.1 = 19 |
| 3 | 27.1 | 19 + ( 100 – 19 ) * 0.1 = 27.1 |
| ・・・ | ・・・ | |
| ∞(理論上) | 100 | 100 |
実際にこの計算をフレームごとに∞回繰り返すことは不可能ですので、「おそらく現在地が99.99になったら100とする」のような便宜的な処理が行われていると考えられます。
よって C = 0.1 であれば、到着地点100に近づくにつれて減速する動きを表現することができます。

今回のこのコードは、FPS60とすると delta = 1.0(s) / 60(fps) ≒ 0.0167 であるので、Cにあたる値は C = 2 * delta = 2 * 0.0167 ≒ 0.0334 進む割合 3.3%で先ほど C = 0.1 で考えた表と同じような動きをしていることがわかります。
3 / 2 = 1 になる?

pythonに軽く触れていたためか、この出力結果に違和感を持ちました。
調べてみるとそこまで難しいことではなく、GDScriptでは
整数(int)同士の計算だと、整数型(int)で返されてしまうみたいです。
逆に言うと、一つでも浮動小数点数(float)が計算中にあれば結果は浮動小数点数(float)として帰ってきます。
print( 3.0 / 2 ) #出力:1.5
print( 3.0 / 2.0 ) #出力:1.5
まとめ
『Learn GDScript From Zero app』はGDScriptを学びたい人だけでなく、プログラミング全般を学びたいという人にもおすすめできるサイト。
●良い点
・初心者に優しい
・実際にコードを書きながら学習できる
・無料
・ゲーム感覚で楽しめる
●悪い点
・日本語訳が不完全(翻訳率93%)
ほかの言語と構造が似ているのは本当にありがたいです(将来の役にも立ちそう…)。
GDScriptの基礎学習も順調に終わったということで、しばらくはGDScript、Godotに触れてその感想や進捗を共有していこうと思います。
みなさんもこのサイトを通してGDScriptを学んでみてください!!
ここまで読んでいただきありがとうございました。
それではーー。

コメント