Godotのtscnファイルの中身を見てみよう
作成日
更新日
tscnのファイルの中身を見てみよう。
中身
[gd_scene load_steps=6 format=3 uid="uid://53fufxjtuxa0"]
[ext_resource type="Script" uid="uid://d27and40r2ko1" path="res://main.gd" id="1_bh8me"]
[ext_resource type="PackedScene" uid="uid://csfvild1aafv" path="res://bomb.tscn" id="2_ht2g8"]
[ext_resource type="PackedScene" uid="uid://bwjsmijvflda0" path="res://gem.tscn" id="3_xoof4"]
[ext_resource type="PackedScene" uid="uid://djx73436xf0ag" path="res://start_view.tscn" id="4_1bvp3"]
[ext_resource type="PackedScene" uid="uid://beshrxxiqmc3f" path="res://game_over_view.tscn" id="5_lquwl"]
[node name="Main" type="Node"]
script = ExtResource("1_bh8me")
bomb_scene = ExtResource("2_ht2g8")
gem_scene = ExtResource("3_xoof4")
[node name="StartView" parent="." instance=ExtResource("4_1bvp3")]
[node name="GameOverView" parent="." instance=ExtResource("5_lquwl")]
解析
ChatGPTにコメントを書いてもらった。
- tscnファイルのコメントの書き方
; Godot シーンファイル(テキスト形式)
; シーン定義のメタ情報
[gd_scene load_steps=6 format=3 uid="uid://53fufxjtuxa0"]
; 外部リソース(スクリプトや他のシーン)を読み込む
[ext_resource type="Script" uid="uid://d27and40r2ko1" path="res://main.gd" id="1_bh8me"] ; メインのスクリプト
[ext_resource type="PackedScene" uid="uid://csfvild1aafv" path="res://bomb.tscn" id="2_ht2g8"] ; 爆弾オブジェクトのシーン
[ext_resource type="PackedScene" uid="uid://bwjsmijvflda0" path="res://gem.tscn" id="3_xoof4"] ; 宝石オブジェクトのシーン
[ext_resource type="PackedScene" uid="uid://djx73436xf0ag" path="res://start_view.tscn" id="4_1bvp3"] ; スタート画面のシーン
[ext_resource type="PackedScene" uid="uid://beshrxxiqmc3f" path="res://game_over_view.tscn" id="5_lquwl"] ; ゲームオーバー画面のシーン
; ルートノードの定義(ゲーム全体を管理するノード)
[node name="Main" type="Node"]
script = ExtResource("1_bh8me") ; main.gd スクリプトをアタッチ
bomb_scene = ExtResource("2_ht2g8") ; 爆弾シーンの参照
gem_scene = ExtResource("3_xoof4") ; 宝石シーンの参照
; スタート画面を Main にインスタンスとして追加
[node name="StartView" parent="." instance=ExtResource("4_1bvp3")]
; ゲームオーバー画面を Main にインスタンスとして追加
[node name="GameOverView" parent="." instance=ExtResource("5_lquwl")]
他のファイルも見てみる
; 爆弾(Bomb)シーンの定義ファイル(.tscn)
[gd_scene load_steps=6 format=3 uid="uid://csfvild1aafv"]
; 外部リソースの読み込み
[ext_resource type="Script" uid="uid://dkq5e0c5jfb2b" path="res://bomb.gd" id="1_p0vqg"] ; 爆弾の動作を制御するスクリプト
[ext_resource type="Texture2D" uid="uid://ql1oy6qyev42" path="res://assets/Tile.png" id="1_proq1"] ; タイル背景画像
[ext_resource type="Texture2D" uid="uid://v7qwabxiw4av" path="res://assets/Itemicon_bomb.png" id="2_xp4us"] ; 爆弾アイコン画像
[ext_resource type="AudioStream" uid="uid://cmoloyn2mrng7" path="res://assets/Fizz.ogg" id="4_6w74q"] ; 効果音(Fizz)
; サブリソース(内部的に使う形状)
[sub_resource type="RectangleShape2D" id="RectangleShape2D_nfxiy"]
size = Vector2(200, 200) ; 衝突判定の形状サイズ
; メインノード:爆弾タイル(当たり判定を持つ)
[node name="BombTile" type="Area2D"]
script = ExtResource("1_p0vqg") ; スクリプトをアタッチ
metadata/_edit_group_ = true ; エディタグループに属している(エディタ用)
; 衝突判定用ノード
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
scale = Vector2(0.25, 0.25) ; 小さめのスケール
shape = SubResource("RectangleShape2D_nfxiy") ; 上で定義した矩形シェイプを使用
one_way_collision_margin = 0.0
; 背景タイルのスプライト
[node name="Background" type="Sprite2D" parent="."]
scale = Vector2(0.25, 0.25)
texture = ExtResource("1_proq1") ; 背景画像を設定
; 爆弾アイコンのスプライト
[node name="Bomb" type="Sprite2D" parent="."]
position = Vector2(-1, -2) ; 少し中心からずらした位置に配置
scale = Vector2(0.06, 0.06)
texture = ExtResource("2_xp4us") ; 爆弾の画像を設定
; 効果音再生ノード(2D空間に対応)
[node name="SE" type="AudioStreamPlayer2D" parent="."]
stream = ExtResource("4_6w74q") ; 効果音ファイルを設定
; 入力イベントのシグナル接続
[connection signal="input_event" from="." to="." method="_on_input_event"] ; 入力イベントが発生した時に _on_input_event を呼び出す
読む
[gd_scene load_steps=6 format=3 uid="uid://53fufxjtuxa0"]
gd_scene
: シーンを定義するload_steps
: tscnファイルをロードするときに必要なステップ数- 外部リソース (
[ext_resource]
) の数に関係 - このシーンを完全に読み込むには何ステップ必要かを示すヒント
- Godotが自動で管理
- 外部リソース (
format
: ファイルのフォーマットバージョン- Godotのv4.x系では3が利用されているらしい。
[ext_resource type="Script" uid="uid://dkq5e0c5jfb2b" path="res://bomb.gd" id="1_p0vqg"]
ext_resource
: 外部リソースを定義するtype
: リソースの型を表すScript
は GDScript の.gd
ファイルを指す- 他には
Texture2D
,PackedScene
,AudioStream
など
uid
: Godot が内部的にリソースを識別するための一意のID- これは Godotのv4.x系から導入されたらしい
path
: リソースの場所を示すres://
はプロジェクトのルートを示す Godot の仮想パス
id
: この.tscn
ファイル内で参照するときに使う識別子- これは このファイル内でのみ参照される値で、
uid
とは異なる - この値は変更してもOK
数値_名前
の形式にする
- これは このファイル内でのみ参照される値で、
- `[sub_resource type="RectangleShape2D" id="RectangleShape2D_nfxiy"]
size = Vector2(200, 200)
- 変数名 = 値 という形式でプロパティを定義する
sub_resource
の下に配置されているのでsub_resource
のsize
を定義している
- `[node name="BombTile" type="Area2D"]
node
: ノードの定義- 1番最初に定義された
node
がルートのノードになる
- 1番最初に定義された
name
: ノードの名前 エディタ上で表示される名前 自由に変更可能type
: ノードの型
script = ExtResource("1_p0vqg")
- このノードにアタッチされたスクリプト
- id を辿ると
[ext_resource]
で定義されたres://bomb.gd
を指していることがわかる
metadata/_edit_group_ = true
- Godot Editor 用のメタデータ設定
metadata/_edit_group_
は 「このノードをエディタグループに含めるかどうか」を表すフラグ- この値は GDScript やゲーム実行時には参照されない。
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
parent
: 直前のノードを親にする子ノード- ここではルートノードを指す。
scale = Vector2(0.25, 0.25)
- このノード自体の拡大率
- 形状そのものを変更するのではなく、ノードの表示・判定サイズを変える方法
shape = SubResource("RectangleShape2D_nfxiy")
- 実際の当たり判定形状(Shape)を割り当てる
sub_resource
で定義したectangleShape2D_nfxiy
を利用しているsub_resource
ではVector2(200, 200)
が定義されているため200×200 の矩形シェイプを使った当たり判定となる
one_way_collision_margin = 0.0
- Platformer(横スクロールアクション)などで「一方向の衝突」を許可するときに使うパラメータ
- 0.0 の場合は一方向衝突は使っていない(デフォルト状態)
[connection signal="input_event" from="." to="." method="_on_input_event"]
connection
: ノード間のイベント通知の仕組みを定義signal
: 発生するシグナルの名前from
: このシグナルを発するノード.
なので自分自身
to
: このシグナルを受け取るノード.
なので自分自身
method
: シグナルが発生したときに呼ばれるメソッド名(GDScript内の関数)res://bomb.gd
内の_on_input_event
が呼ばれる

公開日
更新日