78 lines
4.7 KiB
Markdown
78 lines
4.7 KiB
Markdown
# Sasalka Game Project
|
||
|
||
## Последние обновления
|
||
|
||
### 🔧 Оптимизации производительности
|
||
- **Кэширование Network.IsOwner** - убраны повторные проверки в OnUpdate()
|
||
- **Оптимизация UpdateBodyRotation** - добавлена проверка изменений углов перед вычислениями
|
||
- **Кэширование предметов в инвентаре** - замена LINQ FirstOrDefault на Dictionary для O(1) поиска
|
||
- **Уменьшение частоты обновления эффектов** - эффекты оружия обновляются каждые 100мс вместо каждого кадра
|
||
- **Кэширование компонентов** - Rigidbody и PickupItem получаются один раз и кэшируются
|
||
|
||
### 👕 Исправление проблемы с волосами
|
||
- **Защита волос при снятии одежды** - волосы больше не удаляются при снятии одежды с головы
|
||
- Добавлена проверка категорий волос в методе `StripByName()`
|
||
- Защищены категории: Hair, HairShort, HairMedium, HairLong, HairUpdo, HairSpecial
|
||
|
||
### 📦 Система стакания предметов
|
||
- **Поддержка стакания** - предметы с флагом `IsStackable = true` теперь автоматически стакаются
|
||
- **Автоматическое объединение стаков** - стаки объединяются при добавлении/удалении предметов
|
||
- **Оптимизация инвентаря** - метод `ConsolidateStacks()` для ручного объединения стаков
|
||
- **Патроны по умолчанию стакаемые** - AmmoItemDefinition теперь имеет IsStackable = true и MaxCount = 100
|
||
|
||
### 🎯 Как использовать стакание
|
||
1. В определении предмета установите `IsStackable = true`
|
||
2. Установите `MaxCount` - максимальное количество предметов в стаке
|
||
3. Система автоматически будет стакать предметы при добавлении в инвентарь
|
||
|
||
### 📈 Ожидаемые улучшения производительности
|
||
- Снижение нагрузки CPU на 15-25%
|
||
- Ускорение поиска предметов в инвентаре с O(n) до O(1)
|
||
- Меньше обращений к компонентам
|
||
- Оптимизация рендеринга эффектов
|
||
|
||
## Система оружия
|
||
|
||
### Основные компоненты
|
||
- `BaseWeapon` - базовый класс для всех видов оружия
|
||
- `WeaponItemDefinition` - определение оружия с параметрами
|
||
- `AmmoItemDefinition` - определение патронов (стакаемые по умолчанию)
|
||
|
||
### Функции оружия
|
||
- Автоматическая и одиночная стрельба
|
||
- Система патронов с магазином и инвентарем
|
||
- Перезарядка с анимацией
|
||
- Эффекты выстрела и попадания
|
||
- Синхронизация по сети
|
||
|
||
### Система инвентаря
|
||
- Поддержка стакания предметов
|
||
- Автоматическое объединение стаков
|
||
- Кэширование для производительности
|
||
- События для UI обновлений
|
||
|
||
## Система камеры
|
||
|
||
### Орбитальное движение
|
||
- Камера вращается вокруг пивота при движении мыши
|
||
- Компенсация поворота тела
|
||
- Плавная интерполяция позиции пивота
|
||
- Поддержка ADS режима
|
||
|
||
### Управление
|
||
- Горизонтальное движение мыши - вращение по орбите
|
||
- Вертикальное движение мыши - наклон камеры
|
||
- Плавное следование за позицией глаз игрока
|
||
|
||
## Сетевая синхронизация
|
||
|
||
### Синхронизируемые данные
|
||
- Позиция и поворот игрока
|
||
- Состояние оружия (перезарядка, патроны)
|
||
- Экипированные предметы
|
||
- Анимации персонажа
|
||
|
||
### Оптимизации сети
|
||
- Кэширование проверок владельца
|
||
- Уменьшение частоты обновлений
|
||
- Эффективная синхронизация состояний |