Готовый сигнал Godot 4.2 C# не выдается на загруженной упакованной сценеC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Готовый сигнал Godot 4.2 C# не выдается на загруженной упакованной сцене

Сообщение Anonymous »

Проблема: есть две сцены: сцена загрузки и сцена воспроизведения. Загрузка сцен выполняет тяжелую работу по настройке игровой сцены и загружает игровую сцену. Игровая сцена должна взять эти данные и воссоздать их на другой стороне. Похоже, что игровая сцена не выдает сигнал готовности, а метод реконструкции уровня, в свою очередь, не вызывается.
Итак, я создал простой проект 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);
}
}
SceneTwo.cs

Код: Выделить всё

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
...
Так что, возможно, такое поведение правильное? Для меня это нежелательно и противоречиво. Я бы хотел, чтобы сцена 2 сработала и вызвала установку, в идеале не запуская _Process/_PhysicsProcess до завершения установки (я знаю, что есть способы сделать это, например, SetProcess), но, по крайней мере, добраться до функции настройки. Я думаю, что смогу обойти это, если понадобится, но я хочу понять, почему это происходит, поскольку Godot — это движок, который я буду использовать для этого проекта и, скорее всего, для других проектов в будущем.
Спасибо!
Небольшой дополнительный контекст: работаю над реализацией рандомизации уровней и решил реализовать сцену загрузки, которая будет вычислять динамический уровень, передавать данные в одноэлементный код и загрузите общую сцену уровня. Эта общая сцена уровня, в свою очередь, дословно воссоздает уровень из синглтона. Сейчас я признаю, что это, вероятно, излишне сложно, но теоретически мотивом было загрузить обработку в другую сцену, чтобы освободить основную сцену и начать ее быстрее. Если вы решили перейти к одной сцене, «приостановите симуляцию» с помощью подхода, напоминающего всплеск загрузки.

Подробнее здесь: https://stackoverflow.com/questions/789 ... cked-scene
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Проект Godot полностью зависает после добавления скрипта [Tool] с возможностью создания упакованной сцены.
    Anonymous » » в форуме C#
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Что произойдет, если QQuickImageResponse выдаст готовый сигнал слишком рано?
    Anonymous » » в форуме C++
    0 Ответы
    28 Просмотры
    Последнее сообщение Anonymous
  • Относительно проблемы QThread, выдающей готовый сигнал
    Anonymous » » в форуме C++
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Относительно проблемы QThread, выдающей готовый сигнал
    Anonymous » » в форуме C++
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Как играть в мультиплеер в Godot и Python, Python — это сервер, а Godot — клиент
    Гость » » в форуме Python
    0 Ответы
    91 Просмотры
    Последнее сообщение Гость

Вернуться в «C#»