Я новичок в Godot (использую версию 4.3), поэтому решил просмотреть несколько руководств на YouTube о том, как создавать воксельный ландшафт. Это работает и было сделано в gdscript.
Сейчас я пытаюсь заставить его работать на C#, который, кажется, работает, когда я создаю и запускаю проект, но не при запуске его из редактор. У меня есть экспортированный bool, который я могу проверить, и когда он отмечен, он вызывает метод GenerateChunk в цикле.
Проблема в следующем:
У меня есть сцена под названием WorldGenerator.tscn с корневым узлом Node3D с прикрепленным сценарием WorldGenerator.cs. Этот скрипт создает экземпляр Chunk.tscn и добавляет его в качестве дочернего к определенному узлу. Сцена Chunk.tscn имеет корневой Node3D с прикрепленным скриптом Chunk.cs.
В скрипте WorldGenerator у меня есть следующий метод :
private void GenerateChunk(Vector3I position)
{
GD.Print("=====");
chunkPrefab = GD.Load
("res://scenes/WorldGeneration/ChunkCs.tscn");
GD.Print(chunkPrefab.GetType());
var scene = chunkPrefab.Instantiate();
GetNode("Chunks").AddChild(scene);
GD.Print(scene.GetType());
var scene2 = chunkPrefab.Instantiate();
GetNode("Chunks").AddChild(scene);
GD.Print(scene2.GetType());
GD.Print("=====");
// chunk.Initialize(position, chunkSize);
}
Для каждого создаваемого фрагмента мне нужно вызвать собственный метод Initialize() в скрипте Chunk.cs, но этот метод неизвестен.
Вывод метода GenerateChunk() следующий:
=====
Godot.PackedScene
Godot.Node3D
/root/godot/modules/mono/glue/GodotSharp/GodotSharp/Core/NativeInterop/ExceptionUtils.cs:113 - System.InvalidCastException: Unable to cast object of type 'Godot.Node3D' to type 'WorldGeneration.Chunk'.
(mode error stacktrace)...
Это означает, что он может создать экземпляр сцены, но только как Node3D, а не как чанк. Опять же, когда я запускаю проект, он работает, но не когда он запускается в редакторе.
Я не понимаю, почему он не работает, поскольку у меня есть код gdscript с такой же настройкой. в редакторе это работает. Я подозреваю, что это как-то связано с тем, что не все загружается при запуске из редактора при использовании C# (поскольку это единственная разница, о которой я могу думать), но как я могу заставить это работать и в редакторе?
Я попробовал загрузить Chunk.cs вручную, но это ничего не изменило. Что мне попробовать дальше?
Обновление:
Класс Chunk.cs
using Godot;
namespace WorldGeneration
{
public partial class Chunk : Node3D
{
// Called when the node enters the scene tree for the first time.
public override void _Ready()
{
}
// Called every frame. 'delta' is the elapsed time since the previous frame.
public override void _Process(double delta)
{
}
public void Initialize(Vector3 position, int chunkSize)
{
GD.Print(position, chunkSize);
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/792 ... rect-class
Godot 4.3 C# - Instantiate() не возвращает правильный класс ⇐ C#
Место общения программистов C#
-
Anonymous
1733166935
Anonymous
Я новичок в Godot (использую версию 4.3), поэтому решил просмотреть несколько руководств на YouTube о том, как создавать воксельный ландшафт. Это работает и было сделано в gdscript.
Сейчас я пытаюсь заставить его работать на C#, который, кажется, работает, когда я создаю и запускаю проект, но не при запуске его из редактор. У меня есть экспортированный bool, который я могу проверить, и когда он отмечен, он вызывает метод GenerateChunk в цикле.
Проблема в следующем:
У меня есть сцена под названием WorldGenerator.tscn с корневым узлом Node3D с прикрепленным сценарием WorldGenerator.cs. Этот скрипт создает экземпляр Chunk.tscn и добавляет его в качестве дочернего к определенному узлу. Сцена Chunk.tscn имеет корневой Node3D с прикрепленным скриптом Chunk.cs.
В скрипте WorldGenerator у меня есть следующий метод :
private void GenerateChunk(Vector3I position)
{
GD.Print("=====");
chunkPrefab = GD.Load
("res://scenes/WorldGeneration/ChunkCs.tscn");
GD.Print(chunkPrefab.GetType());
var scene = chunkPrefab.Instantiate();
GetNode("Chunks").AddChild(scene);
GD.Print(scene.GetType());
var scene2 = chunkPrefab.Instantiate();
GetNode("Chunks").AddChild(scene);
GD.Print(scene2.GetType());
GD.Print("=====");
// chunk.Initialize(position, chunkSize);
}
Для каждого создаваемого фрагмента мне нужно вызвать собственный метод Initialize() в скрипте Chunk.cs, но этот метод неизвестен.
Вывод метода GenerateChunk() следующий:
=====
Godot.PackedScene
Godot.Node3D
/root/godot/modules/mono/glue/GodotSharp/GodotSharp/Core/NativeInterop/ExceptionUtils.cs:113 - System.InvalidCastException: Unable to cast object of type 'Godot.Node3D' to type 'WorldGeneration.Chunk'.
(mode error stacktrace)...
Это означает, что он может создать экземпляр сцены, но только как Node3D, а не как чанк. Опять же, когда я запускаю проект, он работает, но не когда он запускается в редакторе.
Я не понимаю, почему он не работает, поскольку у меня есть код gdscript с такой же настройкой. в редакторе это работает. Я подозреваю, что это как-то связано с тем, что не все загружается при запуске из редактора при использовании C# (поскольку это единственная разница, о которой я могу думать), но как я могу заставить это работать и в редакторе?
Я попробовал загрузить Chunk.cs вручную, но это ничего не изменило. Что мне попробовать дальше?
Обновление:
Класс Chunk.cs
using Godot;
namespace WorldGeneration
{
public partial class Chunk : Node3D
{
// Called when the node enters the scene tree for the first time.
public override void _Ready()
{
}
// Called every frame. 'delta' is the elapsed time since the previous frame.
public override void _Process(double delta)
{
}
public void Initialize(Vector3 position, int chunkSize)
{
GD.Print(position, chunkSize);
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79242496/godot-4-3-c-sharp-instantiate-not-returning-correct-class[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия