Итак, я создал простой проект Godot и смог воспроизвести поведение с помощью две простые сцены Node3D, к каждой из которых прикреплен небольшой скрипт.
SceneOne.cs
Код: Выделить всё
using Godot;
public partial class SceneOne : Node3D
{
[Export]
private string _SceneTwoPackedPath;
private PackedScene _SceneTwoPacked;
public override void _Ready()
{
_SceneTwoPacked = ResourceLoader.Load
(_SceneTwoPackedPath);
GD.Print("Scene 1 In Ready");
GetTree().Root.Ready += Setup;
GD.Print("Scene 1 Almost Ready");
}
public override void _Process(System.Double delta)
{
GD.Print("Scene 1 Processing");
}
public void Setup()
{
GD.Print("Scene 1 Ready");
GD.Print("Scene 1 In Setup");
//GetTree().ChangeSceneToPacked(_SceneTwoPacked);
}
}
Код: Выделить всё
using Godot;
public partial class SceneTwo : Node3D
{
[Export]
private PackedScene _SceneOnePacked;
public override void _Ready()
{
GD.Print("Scene 2 In Ready");
GetTree().Root.Ready += Setup;
GD.Print("Scene 2 Almost Ready");
}
public override void _Process(double delta)
{
GD.Print("Scene 2 Processing");
}
public void Setup()
{
GD.Print("Scene 2 Ready");
GD.Print("Scene 2 In Setup");
GetTree().ChangeSceneToPacked(_SceneOnePacked);
}
}
Код: Выделить всё
Godot Engine v4.2.2.stable.mono.official.15073afe3 - https://godotengine.org
Vulkan API 1.3.242 - Forward+ - Using Vulkan Device #0: NVIDIA - NVIDIA GeForce RTX 3060
Scene 1 In Ready
Scene 1 Almost Ready
Scene 1 Ready
Scene 1 In Setup
Scene 2 In Ready
Scene 2 Almost Ready
Scene 2 Processing
Scene 2 Processing
Scene 2 Processing
Scene 2 Processing
...
Спасибо!
Небольшой дополнительный контекст: работаю над реализацией рандомизации уровней и решил реализовать сцену загрузки, которая будет вычислять динамический уровень, передавать данные в одноэлементный код и загрузите общую сцену уровня. Эта общая сцена уровня, в свою очередь, дословно воссоздает уровень из синглтона. Сейчас я признаю, что это, вероятно, излишне сложно, но теоретически мотивом было загрузить обработку в другую сцену, чтобы освободить основную сцену и начать ее быстрее. Если вы решили перейти к одной сцене, «приостановите симуляцию» с помощью подхода, напоминающего всплеск загрузки.
Подробнее здесь: https://stackoverflow.com/questions/789 ... cked-scene