【Godot4】Scene file x.tscn appears to be invalid/corrupt.をなんとかしたい

ネコニウム研究所

PCを利用したモノづくりに関連する情報や超個人的なナレッジを掲載するブログ

【Godot4】Scene file x.tscn appears to be invalid/corrupt.をなんとかしたい

2024-1-25 | , ,

Godot4のScene file x.tscn appears to be invalid/corrupt.をなんとかしたい!

概要

今回の記事では、Godot4のScene file x.tscn appears to be invalid/corrupt.をなんとかする手順を掲載する。

これをなんとかしたい!

仕様書

環境

  • Gogot 4.2.1

手順書

私の場合、特定のプロジェクトのみで発生したんだけども、原因は分からなかった。回避方法は分かったので備忘録として残しておく。

回避方法1:プロジェクトをリロードする

インターネットで調べると一般的にこのエラーはtscnファイルの中身が何かしらが原因で壊れていたり、参照がうまくいってなかったりすることで発生するらしい。

そういう場合は、プロジェクトをリロードすると直ったという声が多かった。

「Project」->「Reload Current Project」でプロジェクトをリロードできる。

私の場合は、この方法では直らず難儀した…。

回避方法2:preloadを使わず、loadを使う

他のプロジェクトでは同じ方法でエラーは発生しないんだけども、なぜか今のプロジェクトで発生した。

下記のようにPackedSceneを配列にpreloadで読み込んで、後にインスタンス化して使うことがあると思うんだけども

const nodes = [
    preload("res://scenes/test1.tscn"),
    preload("res://scenes/test2.tscn")
]

func _ready():
    var test1 = nodes[0].instantiate()
    print(test1.text)
    var test2 = nodes[1].instantiate()
    print(test2.text)

なぜかコードを実行するとprint(test2.text)nullになり、そのプロジェクトではtest2.tscnが開けなくなる。プロジェクト開き直して、test2.tscnを開こうとするとScene file test2.tscn appears to be invalid/corrupt.`。

preloadの部分を

const nodes = [
    preload("res://scenes/test2.tscn"),
    preload("res://scenes/test1.tscn")
]

のように交換しても、前述と同様にprint(test2.text)nullになる。

なぜか配列の2番目以降の要素のシーンが読み込めない。意味がわからない。

インターネットで調べても同様の報告は見つからず、適当にいろいろ試してたらloadを使って実行時にシーンを読み込むようにするとエラーを回避できた。

const nodes = []

func _ready():
    nodes.append(load("res://scenes/test1.tscn"))
    nodes.append(load("res://scenes/test2.tscn"))

    var test1 = nodes[0].instantiate()
    print(test1.text)
    var test2 = nodes[1].instantiate()
    print(test2.text)

まとめ(感想文)

配列の2番目以降の要素のシーンが読み込めてるプロジェクトもあるので謎が深まる今日この頃。