3D: первые объекты и запуск
Координаты, иерархия, видимость, камера и диагностика первого запуска.
Минимальный состав 3D-уровня
Entity3D хранит пространственное преобразование. Чтобы получить изображение и физическое взаимодействие, нужны отдельные объекты.
| Часть | Назначение |
|---|---|
| MeshInstance3D с Mesh | Видимая геометрия |
| Material | Вид поверхности |
| Camera3D | Игровая точка зрения для своего Viewport |
| DirectionalLight3D, OmniLight3D или SpotLight3D | Освещение поверхностей, которые используют свет |
| WorldEnvironment с Environment | Фон и параметры окружения |
| Физическое тело с CollisionShape3D | Физическое взаимодействие |
MeshInstance3D сам по себе не является препятствием для персонажа. Разделяйте визуальную часть и физическое тело: поворот декоративной модели не должен случайно менять форму столкновения. Рабочая последовательность есть в первой 3D-игре.
Оси, масштаб и преобразования
Используется правая система координат: +X вправо, +Y вверх, +Z назад. Для камеры направление вперёд — локальная -Z; Vector3.Forward равен (0, 0, -1). У импортированной модели собственная ориентация может отличаться.
Для обычного игрового масштаба ориентируйтесь на 1 единицу как на 1 метр. Проверяйте размер модели, физической формы и скорость движения вместе. Изменение масштаба картинки не исправляет неверные размеры коллайдера автоматически.
Position, Rotation и Scale описывают локальное преобразование. GlobalPosition относится к пространству мира. Дочерний Entity3D наследует преобразование непосредственного родителя Entity3D; обычная Entity между ними разрывает цепочку. TopLevel отключает наследование преобразования. Подробнее — 3D-преобразования.
Вид редактора и игровая камера
В рабочей области 3D выберите объект в дереве, найдите его действием фокусировки выделения и измените преобразование в инспекторе или манипулятором. Проверяйте назначенные сочетания в настройках редактора, если привычная клавиша не срабатывает.
Свободное перемещение по области 3D меняет вид редактора. Оно не перемещает Camera3D в игре. Для нужного игрового вида настройте Camera3D и сделайте её текущей через Current или MakeCurrent(). Камера должна смотреть на геометрию, а объект находиться между её Near и Far и входить в CullMask.
В одном Viewport используется одна текущая камера. Дополнительному SubViewport нужна своя камера для его 3D-вида. Сначала подтвердите правильный кадр запуском уровня, затем настраивайте освещение.
Свет при запуске
Предпросмотр солнца и окружения редактора не заменяет объекты уровня. Если модель видна в редакторе, но темнеет при запуске, проверьте реальные источники света, WorldEnvironment и материал. Материал без освещения — отдельный режим, поэтому наличие света требуется не для каждой поверхности.
Для начала достаточно одного понятного источника и контролируемого окружения. Не включайте сразу все эффекты: сначала проверьте экспозицию, тени и читаемость поверхности. Продолжение — свет и тени и окружение.
Проверить первый результат
- Убедитесь, что у MeshInstance3D назначен Mesh и его масштаб не равен нулю.
- Настройте Camera3D на объект и запустите нужный документ.
- Сравните кадр с освещением реального уровня, а не только с предпросмотром редактора.
- Если объект должен сталкиваться, проверьте физическую форму и реальный контакт отдельно от картинки.
| Проблема | Проверка |
|---|---|
| Пустой кадр | Текущая камера, направление -Z, Near/Far, CullMask, Mesh и видимость |
| Модель тёмная | Реальный свет, Environment и свойства материала |
| Персонаж проваливается | CollisionShape3D у тела, слои, маски и положение пола |
| Масштаб или движение неожиданны | Локальное и глобальное пространство, преобразование родителя |
| Импорт отличается от исходной модели | Размеры, ориентация, материалы и параметры импорта |
Для внешних моделей см. импорт 3D; для первых конструкций — CSG.