From 7538ce81af685c5d9a81330ab6922d3b0371d6e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C5=A1a=20Ceviel?= <39222425+MrTorex@users.noreply.github.com> Date: Tue, 28 Oct 2025 12:38:28 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=BF=D0=B8=D0=BB=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BD=D1=84=D0=B8=D0=B3=D0=B0,=20=D0=BF=D0=B5=D1=80=D0=B5?= =?UTF-8?q?=D0=B4=D0=B5=D0=BB=D0=B0=D0=BD=D1=8B=20=D0=BA=D0=BE=D0=BC=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D1=82=D0=B0=D1=80=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Чисто для удобства, чтобы не было много грязюки --- .../Code/Configs/CharacterCameraConfig.cs | 6 ++- .../Character/Camera/CharacterCamera.cs | 54 ++++++++----------- .../Controller/CustomCharacterController.cs | 1 + .../Gameplay/Character/Core/CameraMode.cs | 1 + .../Code/Gameplay/Character/Core/Character.cs | 1 + 5 files changed, 31 insertions(+), 32 deletions(-) diff --git a/Game/CourierOld/Assets/Code/Configs/CharacterCameraConfig.cs b/Game/CourierOld/Assets/Code/Configs/CharacterCameraConfig.cs index d1eeba3..6ad8eb5 100644 --- a/Game/CourierOld/Assets/Code/Configs/CharacterCameraConfig.cs +++ b/Game/CourierOld/Assets/Code/Configs/CharacterCameraConfig.cs @@ -29,6 +29,10 @@ namespace Code.Configs maxVerticalAngle = 70f, // Максимальный угол наклона камеры (вверх) defaultVerticalAngle = 10f; // Стандартный угол наклона камеры - public CameraMode defaultCameraMode = CameraMode.MainMenu; // Текущий режим камеры + // Текущий режим камеры + public CameraMode defaultCameraMode = CameraMode.MainMenu; + + // Позиция следования по умолчанию (для меню) + public Vector3 defaultFollowPosition = Vector3.zero; } } \ No newline at end of file diff --git a/Game/CourierOld/Assets/Code/Gameplay/Character/Camera/CharacterCamera.cs b/Game/CourierOld/Assets/Code/Gameplay/Character/Camera/CharacterCamera.cs index 4d59bb2..b68b33e 100644 --- a/Game/CourierOld/Assets/Code/Gameplay/Character/Camera/CharacterCamera.cs +++ b/Game/CourierOld/Assets/Code/Gameplay/Character/Camera/CharacterCamera.cs @@ -15,29 +15,18 @@ namespace Code.Gameplay.Character.Camera */ public class CharacterCamera : MonoBehaviour { - // Значения теперь берутся из конфига + // Параметры загружаются из CharacterCameraConfig private float - // Расстояния от персонажа до камеры - _defaultDistance, // Стандартное расстояние камеры от цели - _minDistance, // Минимальное расстояние при зуме - _maxDistance, // Максимальное расстояние при зуме - - // Скорость зума камеры - _distanceMovementSpeed, // Множитель скорости изменения дистанции при зуме - - // Скорость поворота камеры - _rotationSpeed, // Множитель скорости вращения камеры - - // Скорость интерполяции текущее -> целевое вращение - _rotationSharpness, // Коэффициент плавности вращения камеры (чем выше - тем резче) - - // Резкость следования камеры за целью - _followSharpness, // Коэффициент плавности следования за движущейся целью (чем выше - тем резче) - - // Углы наклона камеры - _minVerticalAngle, // Минимальный угол наклона камеры (вниз) - _maxVerticalAngle, // Максимальный угол наклона камеры (вверх) - _defaultVerticalAngle; // Стандартный угол наклона камеры + _defaultDistance, + _minDistance, + _maxDistance, + _distanceMovementSpeed, + _rotationSpeed, + _rotationSharpness, + _followSharpness, + _minVerticalAngle, + _maxVerticalAngle, + _defaultVerticalAngle; // Трансформ объекта, за которым следует камера (для 1st-person: уровень глаз) private Transform _followTransform; @@ -45,8 +34,8 @@ namespace Code.Gameplay.Character.Camera // Позиция следования: текущая сглаженная позиция и горизонтальное направление камеры private Vector3 _currentFollowPosition; - // Позиция следования по умолчанию (для меню) - private readonly Vector3 _defaultFollowPosition = Vector3.zero; + // Fallback-позиция для режимов без цели (например, MainMenu) + private Vector3 _defaultFollowPosition; // Целевой вертикальный угол камеры (наклон вверх/вниз) private float _targetVerticalAngle; @@ -57,19 +46,21 @@ namespace Code.Gameplay.Character.Camera // Исходные значения дистанции для восстановления после FirstPerson режима private float _originalDefaultDistance, _originalMinDistance, _originalMaxDistance; - // Свойства для доступа к важным данным камеры извне - public Vector3 PlanarDirection { get; private set; } // Горизонтальное направление камеры - + // Горизонтальное направление камеры (проекция forward на плоскость) + public Vector3 PlanarDirection { get; private set; } + + // Текущий режим работы камеры public CameraMode CurrentMode { get; private set; } + // DI для загрузки конфига [Inject] private IStaticDataService _staticDataService; // Загрузка конфига для камеры private void LoadConfig() { + // Загрузка значений из конфигов var config = _staticDataService.CharacterCameraConfig; - // Загрузка значений из конфигов _defaultDistance = config.defaultDistance; _minDistance = config.minDistance; _maxDistance = config.maxDistance; @@ -81,8 +72,9 @@ namespace Code.Gameplay.Character.Camera _maxVerticalAngle = config.maxVerticalAngle; _defaultVerticalAngle = config.defaultVerticalAngle; CurrentMode = config.defaultCameraMode; + _defaultFollowPosition = config.defaultFollowPosition; - // Обеспечиваем корректные значения дистанции и угла + // Валидация значений (на случай ручного редактирования конфига) _defaultDistance = Mathf.Clamp(_defaultDistance, _minDistance, _maxDistance); _defaultVerticalAngle = Mathf.Clamp(_defaultVerticalAngle, _minVerticalAngle, _maxVerticalAngle); @@ -90,12 +82,12 @@ namespace Code.Gameplay.Character.Camera _originalDefaultDistance = _defaultDistance; _originalMinDistance = _minDistance; _originalMaxDistance = _maxDistance; - + + // Инициализация состояния камеры _currentDistance = _defaultDistance; _targetDistance = _currentDistance; _targetVerticalAngle = _defaultVerticalAngle; PlanarDirection = Vector3.forward; // Начальное направление - вперед по оси Z - _currentFollowPosition = _defaultFollowPosition; } diff --git a/Game/CourierOld/Assets/Code/Gameplay/Character/Controller/CustomCharacterController.cs b/Game/CourierOld/Assets/Code/Gameplay/Character/Controller/CustomCharacterController.cs index b4dbb14..50b9159 100644 --- a/Game/CourierOld/Assets/Code/Gameplay/Character/Controller/CustomCharacterController.cs +++ b/Game/CourierOld/Assets/Code/Gameplay/Character/Controller/CustomCharacterController.cs @@ -127,6 +127,7 @@ namespace Code.Gameplay.Character.Controller // Заготовка на будущее (если понадобится) case CameraMode.Static: case CameraMode.Cinematic: + case CameraMode.MainMenu: // Скорее всего юзлес, но пускай будет default: break; } diff --git a/Game/CourierOld/Assets/Code/Gameplay/Character/Core/CameraMode.cs b/Game/CourierOld/Assets/Code/Gameplay/Character/Core/CameraMode.cs index 6c86d84..355aaad 100644 --- a/Game/CourierOld/Assets/Code/Gameplay/Character/Core/CameraMode.cs +++ b/Game/CourierOld/Assets/Code/Gameplay/Character/Core/CameraMode.cs @@ -2,6 +2,7 @@ namespace Code.Gameplay.Character.Core { /* * Перечисление режимов работы камеры + * MainMenu - статичная камера, смотрит на заданную позицию (то что надо в главном меню) * Static - статичная камера без следования за целью * FirstPerson - камера от первого лица (встроена в модель персонажа) * ThirdPerson - камера от третьего лица (следует за персонажем на расстоянии) diff --git a/Game/CourierOld/Assets/Code/Gameplay/Character/Core/Character.cs b/Game/CourierOld/Assets/Code/Gameplay/Character/Core/Character.cs index f0b82be..1dc024f 100644 --- a/Game/CourierOld/Assets/Code/Gameplay/Character/Core/Character.cs +++ b/Game/CourierOld/Assets/Code/Gameplay/Character/Core/Character.cs @@ -28,6 +28,7 @@ namespace Code.Gameplay.Character.Core { // Настройка камеры для следования за точкой камеры characterCamera.SetFollowTransform(cameraFollowPoint); + characterCamera.SetCameraMode(CameraMode.FirstPerson); // Включение Gameplay мапа ввода _inputService.EnableMap(ActionMappings.Gameplay);