SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Godot Engine 2Dゲーム開発入門

【Godot Engine 2Dゲーム制作 Part4】UI部品を作成し、リストダイアログをつくろう

Godot Engine 2Dゲーム開発入門 第6回

リストアイテムのスクリプトの作成

ListItemシーンのスクリプトの作成

 まずlist_item.tscnを開いて、ルートの「ListItem」ノードにスクリプトをアタッチします。

 「ListItem」ノードを右クリックして「スクリプトをアタッチ」を選択します。「ノードにスクリプトをアタッチする」ダイアログが表示されますので「テンプレート」にチェックを入れて、そのまま「作成」ボタンを押します。

 res://scn/list_dialog/list_item.gdと保存されたはずです。

 続いて、「ListItem」(Button)ノードを選択した状態で、右側のサイドバーの「ノード」ドック>「シグナル」タブを選択します。

 「BaseButton」>「pressed()」を右クリックして「接続」を選択します。「メソッドにシグナルを接続」ダイアログが表示されますので、ノードツリーから「ListItem」を選択して、「受信側メソッド」が「_on_pressed」の状態で「接続」ボタンを押します。

接続
接続
「メソッドにシグナルを接続」ダイアログ
「メソッドにシグナルを接続」ダイアログ

 list_item.gdをScriptビューで開き、次のように書き換えます。

list_item.gd
extends Button

signal item_pressed(id: int)

var m_id: int


func set_info(id: int) -> void:
	m_id = id


func _on_pressed() -> void:
	item_pressed.emit(m_id)

 _on_pressed関数は、先ほど接続したボタンを押した時に呼び出される関数です。

 ここではitem_pressedというシグナルと、m_idという変数を使って、リストアイテムに必要な処理を実装します。

 item_pressedシグナルは、item_pressed(id: int)という形で宣言しています。このシグナルはitem_pressed.emit(int)の形で実行することで、数値を送ることができます。

 変数m_idは「メンバー変数のID」の略です。リストアイテムは初期化する時に、set_info関数などの手段で各要素にIDを設定します。ボタンが押されて_on_pressed関数が呼び出されると、このm_idの値を返します。

ListItem2Rowシーンのスクリプトの作成

 続いて「ListItem」シーンを継承した「ListItem2Row」シーンのスクリプトの作成です。

 まずlist_item_2_row.tscnを開いて、ルートの「ListItem2Row」ノードにスクリプトをアタッチします。

 「ListItem2Row」ノードを右クリックして「スクリプトをアタッチ」を選択します。「ノードにスクリプトをアタッチする」ダイアログが表示されますので「テンプレート」にチェックを入れて、そのまま「作成」ボタンを押します。

 res://scn/list_dialog/list_item_2_row.gdと保存されたはずです。

 list_item_2_row.gdをScriptビューで開くと、先頭の行が次のような形になっているはずです。

list_item_2_row.gd
extends "res://scn/list_dialog/list_item.gd"

 上手く継承できない場合は、次の点を見直してください。「ノードにスクリプトをアタッチする」ダイアログで、「継承元」が「Button」になっている場合は、「継承元」の右端にある「フォルダーアイコン」をクリックして「list_item.gd」を選択してから作成します。そうすれば上手くいきます。

 これまでは既存のノードを継承していましたが、今回はlist_item.gdを継承しています。この行は、次のように書き換えることもできます。あとでフォルダー構造を変更する可能性を考えると、こちらの方が便利だと思います。

extends "./list_item.gd"

 それではlist_item_2_row.gdを、次のように書き換えます。

list_item_2_row.gd
extends "./list_item.gd"


func set_info_ex(id: int, title: String, desc: String) -> void:
	set_info(id)
	%Title.text = title
	%Desc.text = desc

 「ID」と「タイトル」と「説明」を登録するset_info_ex関数を定義しています。

 「ID」の登録はlist_item.gdで定義したset_info関数を利用します。

 「Title」ノードと「Desc」ノードには「固有名アクセス」を設定しているので%Title%Descの形式でアクセスできます。これらの記法を使い、それぞれのtitleに、引数のテキストを設定します。

次のページ
リストダイアログのスクリプトの作成

この記事は参考になりましたか?

Godot Engine 2Dゲーム開発入門連載記事一覧

もっと読む

この記事の著者

柳井 政和(ヤナイ マサカズ)

クロノス・クラウン合同会社 代表社員http://crocro.com/オンラインソフトを多数公開。プログラムを書いたり、ゲームを作ったり、記事を執筆したり、マンガを描いたり、小説を書いたりしています。「めもりーくりーなー」でオンラインソフト大賞に入賞。最近は、小説家デビューして小説も書いています(『裏切りのプログラム』他)。面白いことなら何でもOKのさすらいの企画屋です。 

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/21374 2025/08/07 11:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー