俺に解るように説明する "Godot Engine 3.x" 入門+

ゲームエンジン Godot Engine に関すること。入門とか使い方とかチュートリアルとか、あれとかこれとか。日本語解説。

Godot GDScript 14 「API と 関数 と 型」 ... global_rotate()

前回GDScriptネタを扱ったので、今回もちょっとコレをやろうと思う。玉転がしの11で「Area」ノードをglobal_rotate()関数を使って回転させたが、この関数、どこから見つけて来たのかに関して書いておきたい。 f:id:ore2wakaru:20180312180149p:plain まずは、ココ、APIのページをブックマークだ。Godot API — Godot Engine latest documentation


ノード と カテゴリ

インスペクターパネルを見ると、いろんな編集項目(プロパティー)があるが、親切にもカテゴリに別かれて並んでいる。「Area」ノードを例にとると、 f:id:ore2wakaru:20180312182401p:plain 4つのカテゴリに別れているのが分かる。

回転させたいなと思った時、インスペクターパネルを見て、カテゴリを見て、また、閉じている項目があれば開いていくと、Spatialカテゴリ > Transform > Rotation Degreesを発見する。で、ローテーションってあるし、ここをいじって回転させるんだなと思うわけだ。そしたら次の段階。


API と 関数

今度は、APIで調べる。一番最初にブックマークした所だ。サーチしてもいいし、スクロールして下って行ってもいいけど、さっきのカテゴリ、Spatialを探して開く。

そのページのMember Functionsの表にズラーと並んでいる中から、回転に関係するような用語(ローテーションとかローテートとか)を探してみる。すると、 f:id:ore2wakaru:20180312185403p:plain あった。これが使えそうだとなる。

後は使い方だが、下の方にMember Function Descriptionというのがある。運が良ければ、ここに使い方が載っている。 f:id:ore2wakaru:20180312190517p:plain 今回は、運がよかった。

axis(軸)はグローバルで、angle(角度)はラジアンで設定せよとの注意書きも載ってる。

大抵は、こうやって探せばイイと思う。


ここが分かれば、一気にAPIの見方が分かるというのがだ。ま、Member Functionsの表が、なんだか分からんごちゃっとした表から、すっきり分かる表に見えるようになる感じだ。

ここでも、global_rotate()関数を例にとる。
f:id:ore2wakaru:20180312202955p:plain

  1. この欄には、関数が返してくるが書いてある。この欄に"int"とあれば整数型、"float"とあれば浮動小数点型、"bool"ならtrue / falseのブール型(ブーリアン型)で答えを返しますよということ。中でも、"void"というのが一番分かりやすい。「答え(数値)は返しませんよ。」という型。
    今回はこれ"void"が当てはまっている。回転させるだけだから、別に、答え(数値)なんていらないだろ。回れと言った分だけ、回ってくれればイイだけだからな。
  2. 1個目のパラメータに軸(axis)の情報を入れるのだが、ここに入れる時は、Vector3型にしてねっていうこと。
  3. 上と同じ、2個目のパラメータに角度(angle)の情報をいれるのだが、float型にしてねってこと。

これが分かれば、Descriptionの方に書いてある

" void global_rotate ( Vector3 axis, float angle ) "

" global_rotate ( axis, angle ) "

のようにすっきりと見えるじゃないか。さらに熟練度が増し、

「グローバルで回す(軸、角度)」

のように、日本語で見えるようになったら大したものだ。免許皆伝だ。


クラス

インスペクターパネル上では4つ見えたから、4カテゴリでいいんだけど、「Area」ノードっていうのは、APIから探してみると、 f:id:ore2wakaru:20180312192502p:plain というように5つのクラスから出来上がっているのがちょっと注意かな?

「Area」ノード = (Area + CollisionObject + Spatial + Node + Object)クラス

なんか変だよね。「Area」ノードって言ってるのに、Areaクラス1つで出来ているんじゃないんだぜ。不思議だよね。

まー、でも、そのおかげで、「Area」ノードのプロパティを操作する時には、この5つのクラスに書いてある関数が使えるってことになる。

1こ増えてよかったな。


今回は「Area」ノードを例にとってみたが、インスペクターパネルを見て(又はAPI)、そこにSpatialカテゴリ(又はクラス)があれば、同様の事ができるってことだ。応用が利くだろ。覚えておこうぜ。