Files
rltn/test-wireframe-fix.js

165 lines
10 KiB
JavaScript
Raw Normal View History

// Исправление проблемы с рамками коллайдеров
// Файл: 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('Попробуйте кликнуть по рамке коллайдера и переместить его');