sasalka/Code/UI/Buttons/README_ChangeSceneButton.md
2025-06-29 14:44:00 +03:00

144 lines
6.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ChangeSceneButton
Компонент для подготовки к смене сцены при нажатии кнопки.
## Описание
`ChangeSceneButton` - это компонент, который подготавливает загрузку другой сцены при нажатии на кнопку взаимодействия. Компонент наследуется от `InteractionButton` и добавляет функциональность проверки и подготовки смены уровня.
**Примечание**: В s&box прямая смена сцены во время игры ограничена. Этот компонент подготавливает данные для смены сцены и проверяет их корректность.
## Свойства
### SceneName (string)
- **Описание**: Название сцены для загрузки
- **По умолчанию**: `""` (пустая строка)
- **Обязательное**: Да
- **Пример**: `"minimal"`, `"test"`, `"main_menu"`
### LoadDelay (float)
- **Описание**: Задержка перед подготовкой сцены в секундах
- **По умолчанию**: `0.0f` (без задержки)
- **Использование**: Полезно для анимаций перехода или эффектов
### ShowLoadingMessage (bool)
- **Описание**: Показывать ли сообщение о подготовке в консоли
- **По умолчанию**: `true`
- **Использование**: Отладочная информация
### UseFullPath (bool)
- **Описание**: Использовать полный путь к сцене
- **По умолчанию**: `false`
- **Использование**: Если true, SceneName должен содержать полный путь (например, "scenes/minimal.scene")
## Использование
### 1. Добавление в префаб
1. Добавьте компонент `ChangeSceneButton` к объекту с кнопкой
2. Укажите название сцены в свойстве `SceneName`
3. Настройте дополнительные параметры при необходимости
### 2. Настройка в редакторе
```csharp
// Пример настройки
SceneName = "minimal" // Загрузить сцену "minimal"
LoadDelay = 1.5f // Задержка 1.5 секунды
ShowLoadingMessage = true // Показывать сообщения
UseFullPath = false // Автоматически добавлять "scenes/" и ".scene"
```
### 3. Доступные сцены
Для просмотра списка доступных сцен используйте метод `ListAvailableScenes()` в редакторе.
## Функциональность
### Автоматическая проверка
- Проверяет, что название сцены указано
- Проверяет, что код выполняется на сервере/хосте
- Проверяет существование файла сцены
- Логирует все действия для отладки
### Обработка ошибок
- Логирует предупреждения при отсутствии названия сцены
- Проверяет существование файла сцены
- Предотвращает подготовку на клиенте
- Обрабатывает исключения
### Задержка подготовки
- Поддерживает асинхронную подготовку с задержкой
- Полезно для анимаций перехода
- Не блокирует основной поток
## Примеры использования
### Простая подготовка сцены
```csharp
// Настройка для подготовки сцены "main_menu"
SceneName = "main_menu"
LoadDelay = 0.0f
ShowLoadingMessage = true
UseFullPath = false
```
### Подготовка сцены с задержкой
```csharp
// Настройка для подготовки сцены "game" с задержкой
SceneName = "game"
LoadDelay = 2.0f // 2 секунды задержки
ShowLoadingMessage = true
UseFullPath = false
```
### Использование полного пути
```csharp
// Настройка с полным путем
SceneName = "scenes/custom_level.scene"
LoadDelay = 0.0f
ShowLoadingMessage = true
UseFullPath = true
```
## Требования
### Сцены
- Сцены должны находиться в папке `scenes/`
- Формат файлов: `.scene`
- Название сцены должно соответствовать имени файла без расширения
### Права доступа
- Подготовка сцены возможна только на сервере/хосте
- Клиенты не могут инициировать смену сцены
## Отладка
### Логи
Компонент выводит подробные логи:
- `Info`: Успешная подготовка сцены
- `Warning`: Отсутствие названия сцены или попытка подготовки на клиенте
- `Error`: Ошибки при проверке файла сцены
### Список сцен
Используйте метод `ListAvailableScenes()` для просмотра доступных сцен в консоли.
### Тестирование
Используйте метод `TestSceneLoad()` для проверки настроек компонента.
## Ограничения s&box
### Смена сцены
- Прямая смена сцены во время игры в s&box ограничена
- Обычно требуется перезапуск игры с новой сценой
- Компонент подготавливает данные для смены сцены
### Альтернативы
- Использование `GameResource.Load<SceneFile>()`
- Перезапуск игры с новой сценой
- Динамическая загрузка префабов вместо смены сцены
## Совместимость
- Работает с любыми сценами в формате `.scene`
- Совместим с системой взаимодействий s&box
- Поддерживает асинхронные операции
- Безопасен для использования в мультиплеере
- Проверяет существование файлов сцены