ゴドットを使ったゲーム開発 🤖

Skip to content

これは機械翻訳されたテキストであり、誤りを含む可能性があります!

この情報はどこから来たのですか?

これはゴドットの公式ドキュメントの言い換えに過ぎません。以下に、公式ドキュメントへのいくつかの便利なリンクを示します(できればPiggyのこの翻訳よりも公式ドキュメントを参照することをお勧めしますが、この方が好きならどうぞ!)

便利なリソース:

グラフィックはどうすればいいですか?自分で作る必要がありますか?

いいえ! ここでたくさんの無料アセットを見つけることができます:

その他の便利なリンク:

他のゲームエンジン?

好みがあれば、他のゲームエンジンを使用することもできます。他のゲームエンジンの例としては、

があります。他にもたくさんありますので、ぜひ試してみてください!

Godotとは?

Godot (発音はグドット)、は「ゲームエンジン」です。簡単に言うと、ゲーム(または通常のプログラム)を作成できるプログラムです。Godotは、2Dと3Dの両方で、他の多くのゲームエンジンが実行できることを実行できます。

Godotで作成されたゲームの例:Godot Showcase

Godotで作成されたのはインディーゲームだけではありません。Sonic Colors UltimateもGodotで作成されました!

Godot を入手するには

Godot は、以下の場所からダウンロードできます。

ダウンロードしてインストールするだけです (または Steam で実行します)。

プロジェクトを設定!

Godot を起動すると、このウィンドウが表示されます:

Godot プロジェクト

ここで、プログラミング言語として GDScript または C# が尋ねられます。GDScript は Python と非常に似ています。

GDScript と Python の違い (色なし):

def hello():
    text = "Hello world!"

    print(text)
func hello():
    var text = "Hello world!"

    print(text)

Python の変数では、変数名だけを書くことができます。GDScript では、var を最初に書く必要があります。関数を作成するには、funcdef の代わりに書きます。

シーンとノード

Godot における最も重要な概念の一つが、シーンとノードです。ノードから始めましょう。ノードは Godot におけるオブジェクトであり、何でも表現できます。プレイヤー、敵、メニューのボタン、画面上のテキストなど、何でも表現できます。シーンはノードの集まりです。

ここでは、非常にシンプルな例を作成します。

第1a部 - 「player」シーンの設定

Godotウィンドウの上部にある「2D」ボタンをクリックして、ビューを2Dビューに変更します。

ウィンドウの左側には、次のインターフェースが表示されます。

シーンの作成

「Other Node」ボタンをクリックし、「CharacterBody2D」を検索して選択し、「Create」をクリックします。これは2Dプレイヤーに使用されるノードです。おそらく、”CharacterBody2D”ノードの横に警告三角形⚠️が表示されていることに気づくでしょう。これは、いくつかの必要なものが欠けているためです。

ノードを右クリックすると、「+ Add Child Node…」ボタンがあります。これを使用して、Sprite2DとCollisionShape2Dの2つのノードを追加します。Sprite2Dはプレイヤーにグラフィックを追加するために使用され、もう1つは衝突をチェックするために使用されます。追跡しやすくなるように名前を付けることもできます。私のCharacterBody2Dには「Player」という名前を付けました。シーンは現在、次のように見えるはずです。

現在のシーン

Del 1b - ⚠️ CollsionShape2D の修正

警告三角形は、この場合、CollsionShape2D が実際に衝突していないことを示しています。これは、ノード(左側)をクリックすると、右側にパネルが表示されることで修正できます。ここには、変更可能なノードに関する大量の情報が表示されます。ぜひ、そこに表示されているものを色々試してみてください。ただし、今回は “Shape” に焦点を当て、RectangleShape2D などに設定します。衝突自体はここでは使用しません。

Del 1c - スプライト、グラフィックを追加する

Sprite2D の左側をクリックすると、右側に「Texture」というフィールドが表示されます。ここにプレイヤーの画像を追加できます。画像をフィールドにドラッグ&ドロップするだけです。

スプライトを追加した後の状態は次のようになります。

Sprite menu

第2部 - 入力追加、コントロール

ウィンドウの上部には、”Scene - Project - Debug - Editor - Help” というメニューがあります。 “Project” をクリックし、その後 “Project Settings” をクリックします。 ここで、多くの設定を含むメニューが表示されます。”Input Map” をクリックします。 ここで、キーボードのボタンを設定できます。

  • “Add New Action” フィールドに “left” と入力し、その後 “Add” をクリックします。
  • その後、”right”, “up” および “down” を追加します。
  • これらは “Actions” として認識されます。
  • 各 “Action” には、右側の + ボタンをクリックすることでボタンを追加できます。

Plus button

  • ここでは、キーボードをクリックし、その後 Add をクリックするだけです。
  • すべてのアクションにボタンを追加します。

第3部 - プレイヤーを制御するためのスクリプトを追加する。

ゲームロジック、つまりプレイヤー、背景、またはゲーム内の何らかの要素に対して何かを行うためには、スクリプトが必要です。スクリプトはコードであり、GDScriptまたはC#という2つの言語で記述できます。デフォルトはGDScriptです。

  • “CharacterBody2D” (私はそれを “Player” と呼んでいます) ノードを選択します。
  • 「スクリプトをアタッチ」ボタン (下記参照) を押します。

スクリプトをアタッチ

  • ここで、言語を選択できるウィンドウが表示されます (GDScriptを選択)。そしてパス (デフォルトのままにしておいて問題ありませんが、名前を付けても構いません)、その後「次へ」をクリックします。すると、「スクリプト」ウィンドウが表示されます。最初はあまり記述されていません。

extends CharacterBody2D

# Dette er en enkel karakterkontroller
# This is a simple character controller
# これはシンプルなキャラクターコントローラーです

このコードが現在行っていることは、コードが “CharacterBody2D” タイプノードに属するようにしているだけで、これは私たちのプレイヤーです。

ここに、プレイヤーを操作するために使用する関数を追加します。

extends CharacterBody2D

func _physics_process(delta: float) -> void:
   # Fortsetter fysikkprosessen
   # 続行する物理プロセス
   return

Physics Process?

_physics_process は、毎フレーム、つまりデフォルトでは1秒間に約60回更新される関数です。_process と呼ばれる別の関数もあり、こちらは常に更新されます。プレイヤーを一定の速度で動かしたい場合は、_physics_process を使用します。

ここに、プレイヤーを移動させるコードを追加します。

第4部 - 基本的な入力

第2部では入力ボタンを追加しました。今度はそれらを使用します。組み込みの*オブジェクト* Inputがあり、これを使用して、”Input Map”で設定したボタンが押されたかどうかを確認できます。

_physics_processコードに次のコードを追加してみてください。

if Input.is_action_pressed('right'):
   # 右に移動
   velocity.x = 100

# 移動と衝突判定
move_and_slide()

move_and_slide()とは何ですか?

move_and_slide()は、Godotに組み込まれた関数で、実際に移動させたいオブジェクトに使用します。これがないと、プレイヤーは移動しません。

Warning

行の間のスペースは非常に重要です。これはPythonにおけるのと同様です。

Godotウィンドウで再生ボタンをクリックした後、「right」をクリックするとどうなりますか?

今何も起こらない場合:

  • 「Input Map」で何かを設定しましたか?
  • rightRight を間違えていませんか? つまり、コードに書いた名前とInput Mapの名前が一致していますか?

ここまでの全コード
extends CharacterBody2D

func _physics_process(delta: float) -> void:
    if Input.is_action_pressed('right'):
        velocity.x = 100

    move_and_slide()

`'left'`, `'up'`, `'down'` のコードを追加してみてください。

`left` の場合、`velocity.x` はいくつである必要がありますか? `up``down` の場合はどうですか?

全コードはこちら
extends CharacterBody2D

func _physics_process(delta: float) -> void:
    if Input.is_action_pressed('right'):
        velocity.x = 100
    if Input.is_action_pressed('left'):
        velocity.x = -100
    if Input.is_action_pressed('down'):
        velocity.y = 100
    if Input.is_action_pressed('up'):
        velocity.y = -100

    move_and_slide()

第5部 - コードの修正

おそらく、方向キーを離してもプレイヤーが止まらないことに気づいたかもしれません。今、それを修正しましょう!

すべての if 文の前に、velocity を 0 に設定する行を追加します。velocity = Vector2() と記述することで実現できます。

Godot のすべての速度と方向は ベクトル です。これは今すぐ掘り下げるべき数学の概念ではありませんが、この意味がもっと詳しく知りたい場合は、こちらをご覧ください: Wikipedia vectors

全体コード
extends CharacterBody2D

func _physics_process(delta: float) -> void:
    velovity = Vector2()

    if Input.is_action_pressed('right'):
        velocity.x = 100
    if Input.is_action_pressed('left'):
        velocity.x = -100
    if Input.is_action_pressed('down'):
        velocity.y = 100
    if Input.is_action_pressed('up'):
        velocity.y = -100

    move_and_slide()

ゲームを開始すると、プレイヤーを移動させることができます:

さらに、速度が単なる数値ではなく、別の場所に保存できるようにコードを修正できます。

たとえば(関数より前に)、速度を追跡する 定数 を追加することができます。

最後にconstでコード全体
extends CharacterBody2D

const SPEED = 100

func _physics_process(delta: float) -> void:
    velovity = Vector2()

    if Input.is_action_pressed('right'):
        velocity.x = SPEED
    if Input.is_action_pressed('left'):
        velocity.x = -SPEED
    if Input.is_action_pressed('down'):
        velocity.y = SPEED
    if Input.is_action_pressed('up'):
        velocity.y = -SPEED

    move_and_slide()

第6部 - 自分で色々試してみよう!

最初のセクション、「便利なリソース」に戻ると、さらに試せるものが見つかります。

その後は、独自のゲームを作成してみてください。何を作成するかはあなた次第です!全く新しいものを作りたい場合は、そうしてください。すでに存在するゲームを模倣してみたい場合は、そうしてください!学ぶ最良の方法は、試してみることです!