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 : リソースの型を表す
      • ScriptGDScript.gd ファイルを指す
      • 他には Texture2D, PackedScene, AudioStream など
    • uid: Godot が内部的にリソースを識別するための一意のID
      • これは Godotのv4.x系から導入されたらしい
    • path: リソースの場所を示す
      • res:// はプロジェクトのルートを示す Godot の仮想パス
    • id: この .tscn ファイル内で参照するときに使う識別子
      • これは このファイル内でのみ参照される値で、uid とは異なる
      • この値は変更してもOK
      • 数値_名前 の形式にする
  • `[sub_resource type="RectangleShape2D" id="RectangleShape2D_nfxiy"]
    • sub_resource: .tscnファイル内に直接埋め込まれた一時的/ローカルなリソース
      • ext_resource が「外部ファイルへの参照」なのに対し、sub_resource は「このファイルに定義されるミニリソース」
    • type: リソースの型を表す
    • id: この .tscn ファイル内で、このサブリソースを一意に識別するためのID。
  • size = Vector2(200, 200)
    • 変数名 = 値 という形式でプロパティを定義する
    • sub_resource の下に配置されているので sub_resourcesize を定義している
  • `[node name="BombTile" type="Area2D"]
    • node: ノードの定義
      • 1番最初に定義された nodeがルートのノードになる
    • 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 が呼ばれる
サイトアイコン
公開日
更新日