У меня есть PackedScene, экземпляр которого я создаю с помощью кода. Все, что есть в этой сцене, — это один MeshInstance3D со стандартным StandardMaterial3D.
Из кода после создания экземпляра я пытаюсь изменить AlbedoColor MeshInstance3D. Однако, что бы я ни делал, материал получается чисто белым без каких-либо оттенков.
[img]https://i .stack.imgur.com/0KJeg.png[/img]
Если я добавляю материал вручную либо в MeshInstance3D напрямую, либо через переопределение материала поверхности или Geometry.MaterialOvrride в инспекторе все работает как положено и материалы имеют правильное затенение. Однако, как только я добавляю или изменяю материал с помощью кода, он сразу же ломается и выглядит, как на изображении выше.
Я пробовал различные подходы с помощью кода, все они описаны ниже:
< p>Прямой доступ к материалу сетки
Код: Выделить всё
var orb = _orbResource.Instantiate();
if (orb.Mesh.SurfaceGetMaterial(0) is StandardMaterial3D material)
{
material.AlbedoColor = _color;
orb.Mesh.SurfaceSetMaterial(0, material);
}
Код: Выделить всё
var orb = _orbResource.Instantiate();
if (orb.MaterialOverride is not StandardMaterial3D material)
{
throw new NullReferenceException("The orb did not have a material override");
}
material.AlbedoColor = _color;
orb.MaterialOverride = material;
Код: Выделить всё
var orb = _orbResource.Instantiate();
var material = new StandardMaterial3D();
material.AlbedoColor = _color;
orb.MaterialOverride = material;
I'm new to Godot so it's probably some engine-specific thing I missed.
Источник: https://stackoverflow.com/questions/781 ... de-godot-c