Игрок: форма, слои и ввод
Префаб CharacterBody3D, отдельный Visual, область попадания и точные имена действий ввода.
Префаб
Создайте File → Create Prefab… с корнем CharacterBody3D, назовите Player, сохраните Prefabs/Player.rprefab:
Player (CharacterBody3D, SquashPlayer.cs)
├── CollisionShape3D
├── Visual (Entity3D, LandingPulse.cs)
│ └── MeshInstance3D
└── MobDetector (Area3D)
└── CollisionShape3DОсновная CollisionShape3D содержит CapsuleShape3D с Radius 0.35, Height 1.8. В Visual/MeshInstance3D создайте CapsuleMesh таких же размеров и синий StandardMaterial3D. Visual имеет локальную позицию 0 и масштаб 1. Скрипт анимации из отдельного раздела прикрепляется к Visual, не к телу.
У MobDetector: Position (0, -0.1, 0), Monitoring включён; дочерняя форма — BoxShape3D размером (0.8, 1.6, 0.8). Этот игровой детектор немного шире физической капсулы. Он обнаруживает близкий боковой контакт на полу.
Слои и маски
| Объект | Layer: какие биты включены | Mask: какие биты включены | Числовые значения |
|---|---|---|---|
| Пол | 1 | Нет | 1 / 0 |
| Игрок | 2 | 1 и 3 | 2 / 5 |
| Противник | 3 | 1 | 4 / 1 |
| MobDetector | Нет | 3 | 0 / 4 |
Номер кнопки слоя и числовая битовая маска различаются: слой 3 соответствует числу 4. Игрок сталкивается с полом и противниками; область ищет только противников. Противники в этом примере не блокируют друг друга.
Input Map
Добавьте move_left — A / влево, move_right — D / вправо, move_forward — W / вверх, move_back — S / вниз, jump — Space. Для букв используйте физическое положение клавиши.
Разместите экземпляр игрока в Arena.rscene в (0, 0.9, 0): низ капсулы окажется на полу. Отдельный запуск Player.rprefab не содержит пола, камеры и интерфейса; проверяйте этот 3D-префаб в уровне. Полный код.