165 lines
10 KiB
JavaScript
165 lines
10 KiB
JavaScript
// Исправление проблемы с рамками коллайдеров
|
||
// Файл: test-wireframe-fix.js
|
||
|
||
console.log('🔧 Исправление проблемы с рамками коллайдеров');
|
||
console.log('');
|
||
|
||
console.log('❓ Проблема:');
|
||
console.log('У каждого коллайдера два объекта: один только рамка, другой полностью закрашен');
|
||
console.log('При перемещении только рамки не сохраняется перемещение');
|
||
console.log('При перемещении полностью закрашенного объекта всё сохраняется');
|
||
console.log('');
|
||
|
||
console.log('🔍 Причина проблемы:');
|
||
console.log('');
|
||
|
||
console.log('1. 🏗️ Структура коллайдеров:');
|
||
console.log(' - Каждый коллайдер состоит из основного меша (mesh) и рамки (line)');
|
||
console.log(' - Рамка добавляется как дочерний объект: mesh.add(line)');
|
||
console.log(' - При клике можно выбрать либо основной меш, либо рамку');
|
||
console.log('');
|
||
|
||
console.log('2. 🎯 Проблема выбора:');
|
||
console.log(' - Рамка (LineSegments) не имеет userData с параметрами коллайдера');
|
||
console.log(' - Только основной меш имеет правильные userData и обновляется в collidersRef');
|
||
console.log(' - При выборе рамки TransformControls прикрепляется к ней, но данные не сохраняются');
|
||
console.log('');
|
||
|
||
console.log('3. 💾 Проблема сохранения:');
|
||
console.log(' - updateColliderData работает только с основными мешами');
|
||
console.log(' - Рамки не участвуют в процессе сохранения');
|
||
console.log(' - Перемещение рамки не влияет на позицию основного меша');
|
||
console.log('');
|
||
|
||
console.log('✅ Исправления:');
|
||
console.log('');
|
||
|
||
console.log('1. 🎯 Улучшенная логика выбора:');
|
||
console.log(' - Raycaster теперь проверяет все объекты коллайдеров (меши + рамки)');
|
||
console.log(' - При клике по рамке автоматически выбирается родительский меш');
|
||
console.log(' - Проверка, что выбранный объект действительно является коллайдером');
|
||
console.log('');
|
||
|
||
console.log('2. 🔲 Опция отключения рамок:');
|
||
console.log(' - Новое состояние showWireframes для управления видимостью');
|
||
console.log(' - Функция toggleWireframes для переключения видимости');
|
||
console.log(' - Кнопка в UI для удобного управления');
|
||
console.log('');
|
||
|
||
console.log('3. 🏗️ Обновление создания коллайдеров:');
|
||
console.log(' - Новые коллайдеры учитывают настройку видимости рамок');
|
||
console.log(' - Дублированные коллайдеры учитывают настройку видимости рамок');
|
||
console.log(' - Загруженные коллайдеры учитывают настройку видимости рамок');
|
||
console.log('');
|
||
|
||
console.log('🔧 Технические детали:');
|
||
console.log('');
|
||
|
||
console.log('🎯 Логика выбора:');
|
||
console.log('- allColliderObjects = [основные меши, рамки]');
|
||
console.log('- if (clickedObject.type === "LineSegments") clickedObject = clickedObject.parent');
|
||
console.log('- Проверка через collidersRef.current.find(c => c.mesh === clickedObject)');
|
||
console.log('');
|
||
|
||
console.log('🔲 Управление рамками:');
|
||
console.log('- showWireframes: boolean состояние');
|
||
console.log('- toggleWireframes(): переключает видимость всех рамок');
|
||
console.log('- line.visible = showWireframes при создании');
|
||
console.log('- child.visible = newShowWireframes при переключении');
|
||
console.log('');
|
||
|
||
console.log('🏗️ Структура коллайдера:');
|
||
console.log('- mesh (основной меш с материалом)');
|
||
console.log('- mesh.children[0] (рамка LineSegments)');
|
||
console.log('- mesh.userData (параметры коллайдера)');
|
||
console.log('- collidersRef содержит ссылки на основные меши');
|
||
console.log('');
|
||
|
||
console.log('🧪 Как тестировать исправления:');
|
||
console.log('');
|
||
|
||
console.log('1. 🎯 Выбор коллайдеров:');
|
||
console.log(' - Загрузите редактор коллизий');
|
||
console.log(' - Попробуйте кликнуть по рамке коллайдера');
|
||
console.log(' - Проверьте консоль: "🎯 Кликнули по рамке, выбираем родительский меш"');
|
||
console.log(' - Убедитесь, что TransformControls прикрепился к основному мешу');
|
||
console.log(' - Переместите коллайдер и сохраните');
|
||
console.log(' - Перезагрузите страницу и проверьте, что позиция сохранилась');
|
||
console.log('');
|
||
|
||
console.log('2. 🔲 Переключение рамок:');
|
||
console.log(' - Нажмите кнопку "🔲 Скрыть рамки"');
|
||
console.log(' - Проверьте консоль: "🔲 Рамки отключены"');
|
||
console.log(' - Убедитесь, что все рамки исчезли');
|
||
console.log(' - Нажмите кнопку "🔲 Показать рамки"');
|
||
console.log(' - Проверьте консоль: "🔲 Рамки включены"');
|
||
console.log(' - Убедитесь, что все рамки появились');
|
||
console.log('');
|
||
|
||
console.log('3. 🆕 Создание с отключенными рамками:');
|
||
console.log(' - Отключите рамки');
|
||
console.log(' - Создайте новый коллайдер');
|
||
console.log(' - Убедитесь, что новый коллайдер создался без рамки');
|
||
console.log(' - Включите рамки');
|
||
console.log(' - Убедитесь, что рамка появилась у нового коллайдера');
|
||
console.log('');
|
||
|
||
console.log('4. 🔄 Дублирование с отключенными рамками:');
|
||
console.log(' - Отключите рамки');
|
||
console.log(' - Дублируйте существующий коллайдер');
|
||
console.log(' - Убедитесь, что дублированный коллайдер создался без рамки');
|
||
console.log(' - Включите рамки');
|
||
console.log(' - Убедитесь, что рамка появилась у дублированного коллайдера');
|
||
console.log('');
|
||
|
||
console.log('5. 💾 Сохранение перемещений:');
|
||
console.log(' - Кликните по рамке коллайдера');
|
||
console.log(' - Переместите его в новое место');
|
||
console.log(' - Нажмите "Сохранить сейчас"');
|
||
console.log(' - Перезагрузите страницу');
|
||
console.log(' - Убедитесь, что коллайдер остался в новом месте');
|
||
console.log('');
|
||
|
||
console.log('🎯 Ожидаемые результаты:');
|
||
console.log('');
|
||
|
||
console.log('✅ Выбор коллайдеров:');
|
||
console.log('- [ ] Клик по рамке выбирает основной меш');
|
||
console.log('- [ ] TransformControls прикрепляется к основному мешу');
|
||
console.log('- [ ] Перемещение рамки перемещает весь коллайдер');
|
||
console.log('- [ ] Сохранение работает корректно');
|
||
console.log('');
|
||
|
||
console.log('✅ Управление рамками:');
|
||
console.log('- [ ] Кнопка переключает видимость всех рамок');
|
||
console.log('- [ ] Новые коллайдеры учитывают настройку');
|
||
console.log('- [ ] Дублированные коллайдеры учитывают настройку');
|
||
console.log('- [ ] Загруженные коллайдеры учитывают настройку');
|
||
console.log('');
|
||
|
||
console.log('✅ Сохранение перемещений:');
|
||
console.log('- [ ] Перемещение через рамку сохраняется');
|
||
console.log('- [ ] Перемещение через основной меш сохраняется');
|
||
console.log('- [ ] Автоматическое сохранение работает');
|
||
console.log('- [ ] Ручное сохранение работает');
|
||
console.log('');
|
||
|
||
console.log('🔍 Отладочная информация:');
|
||
console.log('');
|
||
|
||
console.log('📊 В консоли должно появляться:');
|
||
console.log('- "🎯 Кликнули по рамке, выбираем родительский меш"');
|
||
console.log('- "🔲 Рамки включены/отключены"');
|
||
console.log('- "🎯 Выбран коллайдер: [объект]"');
|
||
console.log('');
|
||
|
||
console.log('🎯 Проверка структуры:');
|
||
console.log('- selected.type должен быть "Mesh" (не "LineSegments")');
|
||
console.log('- selected.userData должен содержать параметры коллайдера');
|
||
console.log('- selected.children[0].type должен быть "LineSegments"');
|
||
console.log('');
|
||
|
||
console.log('🚀 Исправления готовы к тестированию!');
|
||
console.log('Откройте: http://localhost:4000/enhanced-collision-editor');
|
||
console.log('Попробуйте кликнуть по рамке коллайдера и переместить его');
|