150 lines
6.9 KiB
Markdown
150 lines
6.9 KiB
Markdown
|
|
# Конфигурация системы коллайдеров
|
|||
|
|
|
|||
|
|
## Обзор изменений
|
|||
|
|
|
|||
|
|
Система коллайдеров была обновлена для обеспечения полного покрытия объектов коллизиями. Теперь коллайдеры создаются с увеличенными размерами, чтобы покрывать весь объект, а не только его часть.
|
|||
|
|
|
|||
|
|
## Основные изменения
|
|||
|
|
|
|||
|
|
### 1. Конфигурация коллайдеров
|
|||
|
|
```javascript
|
|||
|
|
const COLLIDER_CONFIG = {
|
|||
|
|
sizeMultiplier: 2.0, // Коэффициент увеличения размеров (100% больше)
|
|||
|
|
debugMode: false, // Режим отладки для визуализации
|
|||
|
|
minSize: 0.5, // Минимальный размер коллайдера
|
|||
|
|
maxSize: 50.0, // Максимальный размер коллайдера
|
|||
|
|
adaptiveScaling: true // Адаптивное масштабирование
|
|||
|
|
};
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. Обновленная функция создания коллайдеров
|
|||
|
|
- `createVisualColliderFromModel()` теперь использует увеличенные размеры для JSON данных
|
|||
|
|
- Приоритет отдается реальным размерам мешей из 3D модели
|
|||
|
|
- Fallback к JSON данным с коэффициентом увеличения
|
|||
|
|
|
|||
|
|
### 3. Адаптивное масштабирование
|
|||
|
|
Система автоматически определяет оптимальный коэффициент масштабирования на основе размеров объекта:
|
|||
|
|
- **Маленькие объекты** (< 1.0): коэффициент 3.0x или больше
|
|||
|
|
- **Средние объекты** (1.0-5.0): стандартный коэффициент 2.0x
|
|||
|
|
- **Большие объекты** (> 5.0): уменьшенный коэффициент 1.6x
|
|||
|
|
|
|||
|
|
### 4. Динамическая настройка
|
|||
|
|
Добавлены расширенные функции для настройки коллайдеров:
|
|||
|
|
|
|||
|
|
```javascript
|
|||
|
|
// Изменить коэффициент размера коллайдеров
|
|||
|
|
window.updateColliderSize(3.0); // Увеличить на 200%
|
|||
|
|
|
|||
|
|
// Переключить адаптивное масштабирование
|
|||
|
|
window.toggleAdaptiveScaling();
|
|||
|
|
|
|||
|
|
// Установить ограничения размеров
|
|||
|
|
window.setColliderLimits(1.0, 20.0); // мин: 1.0, макс: 20.0
|
|||
|
|
|
|||
|
|
// Переключить режим отладки
|
|||
|
|
window.toggleColliderDebug();
|
|||
|
|
|
|||
|
|
// Получить текущую конфигурацию
|
|||
|
|
console.log(window.colliderConfig);
|
|||
|
|
|
|||
|
|
// Протестировать коллизии
|
|||
|
|
window.testCollisions();
|
|||
|
|
|
|||
|
|
// Быстрый тест всех функций
|
|||
|
|
window.quickTest();
|
|||
|
|
|
|||
|
|
// Управление цветом и прозрачностью коллайдеров
|
|||
|
|
window.setColliderColor(0, 1, 0); // Зеленый цвет (RGB 0-1)
|
|||
|
|
window.setColliderOpacity(0.5); // Полупрозрачность (0-1)
|
|||
|
|
window.randomizeColliderColors(); // Случайные цвета
|
|||
|
|
|
|||
|
|
// Управление цветом и прозрачностью объектов интерьера
|
|||
|
|
window.setInteriorObjectColor(1, 0, 0); // Красный цвет объектов (RGB 0-1)
|
|||
|
|
window.setInteriorObjectOpacity(0.7); // Полупрозрачность объектов (0-1)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## Использование
|
|||
|
|
|
|||
|
|
### Базовое использование
|
|||
|
|
Коллайдеры автоматически загружаются из `colliders_city_1.json` с увеличенными размерами.
|
|||
|
|
|
|||
|
|
### Настройка размеров
|
|||
|
|
Если коллайдеры слишком большие или маленькие, можно изменить коэффициент:
|
|||
|
|
|
|||
|
|
```javascript
|
|||
|
|
// В консоли браузера
|
|||
|
|
window.updateColliderSize(1.0); // Оригинальные размеры
|
|||
|
|
window.updateColliderSize(1.2); // +20% (по умолчанию)
|
|||
|
|
window.updateColliderSize(1.5); // +50%
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Отладка
|
|||
|
|
Для визуализации коллайдеров включите режим отладки:
|
|||
|
|
```javascript
|
|||
|
|
window.colliderConfig.debugMode = true;
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## Технические детали
|
|||
|
|
|
|||
|
|
### Алгоритм создания коллайдеров
|
|||
|
|
1. Поиск соответствующего меша в 3D модели по позиции
|
|||
|
|
2. Если меш найден - использование его реальных размеров
|
|||
|
|
3. Если меш не найден - использование JSON данных с коэффициентом увеличения
|
|||
|
|
4. Создание Box3 для проверки коллизий
|
|||
|
|
5. Создание визуального представления
|
|||
|
|
|
|||
|
|
### Проверка коллизий
|
|||
|
|
- Используется AABB (Axis-Aligned Bounding Box) для эффективной проверки
|
|||
|
|
- Игрок представлен как цилиндр с радиусом 0.35 и высотой 1.6
|
|||
|
|
- Проверка пересечения Box3 объектов
|
|||
|
|
|
|||
|
|
## Файлы конфигурации
|
|||
|
|
|
|||
|
|
### colliders_city_1.json
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"colliders": [
|
|||
|
|
{
|
|||
|
|
"type": "box",
|
|||
|
|
"position": { "x": 0, "y": 0, "z": 0 },
|
|||
|
|
"rotation": { "x": 0, "y": 0, "z": 0 },
|
|||
|
|
"scale": { "x": 2, "y": 2, "z": 2 },
|
|||
|
|
"color": { "r": 1.0, "g": 0.0, "b": 0.0 },
|
|||
|
|
"opacity": 0.3
|
|||
|
|
}
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Параметры:**
|
|||
|
|
- `position`, `rotation`, `scale` - стандартные параметры трансформации
|
|||
|
|
- `color` - RGB цвет в диапазоне 0.0-1.0 (опционально)
|
|||
|
|
- `opacity` - прозрачность в диапазоне 0.0-1.0 (опционально)
|
|||
|
|
|
|||
|
|
Размеры в JSON будут автоматически увеличены на коэффициент `sizeMultiplier`.
|
|||
|
|
|
|||
|
|
## Рекомендации
|
|||
|
|
|
|||
|
|
1. **Начальная настройка**: Используйте коэффициент 1.2 (20% увеличение)
|
|||
|
|
2. **Тонкая настройка**: Тестируйте разные значения от 1.0 до 1.5
|
|||
|
|
3. **Отладка**: Включите `debugMode` для визуальной проверки коллайдеров
|
|||
|
|
4. **Производительность**: Большие коэффициенты могут снизить производительность
|
|||
|
|
|
|||
|
|
## Устранение неполадок
|
|||
|
|
|
|||
|
|
### Коллайдеры слишком маленькие
|
|||
|
|
```javascript
|
|||
|
|
window.updateColliderSize(1.3); // Увеличить коэффициент
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Коллайдеры слишком большие
|
|||
|
|
```javascript
|
|||
|
|
window.updateColliderSize(1.1); // Уменьшить коэффициент
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Проблемы с производительностью
|
|||
|
|
```javascript
|
|||
|
|
window.updateColliderSize(1.0); // Вернуться к оригинальным размерам
|
|||
|
|
```
|
|||
|
|
|