Начало рефакторинга

Для удобства дальнейшей разработки и понимания кода, дальше пойдёт более сильный рефакторинг, пока что промежуточный
This commit is contained in:
MrTorex committed 2025-10-27 14:40:26 +03:00
1 parent 487331dc10
commit e6879076a3
8 files changed
+32 -33

No files matched your search

@@ -1,21 +1,20 @@
using Code.Gameplay.Player; using Code.Gameplay.Character;
using Code.Input; using Code.Input;
using Reflex.Attributes; using Reflex.Attributes;
using UnityEngine; using UnityEngine;
using CharacterController = Code.Gameplay.Player.CharacterController;
/* /*
* Главный скрипт игрока, объединяющий камеру и контроллер персонажа * Главный скрипт персонажа, объединяющий камеру и контроллер персонажа
* Обрабатывает ввод пользователя и распределяет его между компонентами * Обрабатывает ввод пользователя и распределяет его между компонентами
* Синхронизирует состояние камеры и персонажа * Синхронизирует состояние камеры и персонажа
* Управляет переключением режимов камеры через Input System * Управляет переключением режимов камеры через Input System
*/ */
public class Player : MonoBehaviour public class Character : MonoBehaviour
{ {
[SerializeField] [SerializeField]
private PlayerCamera playerCamera; // Компонент камеры игрока private CharacterCamera characterCamera; // Компонент камеры персонажа
[SerializeField] [SerializeField]
private CharacterController characterController; // Компонент управления персонажем private CustomCharacterController customCharacterController; // Компонент управления персонажем
[SerializeField] [SerializeField]
private Transform cameraFollowPoint; // Точка следования камеры (уровень глаз для FirstPerson) private Transform cameraFollowPoint; // Точка следования камеры (уровень глаз для FirstPerson)
@@ -25,11 +24,11 @@ public class Player : MonoBehaviour
// Флаг для отслеживания переключения режима камеры (чтобы избежать многократных срабатываний) // Флаг для отслеживания переключения режима камеры (чтобы избежать многократных срабатываний)
private bool _cameraModeToggleHandled; private bool _cameraModeToggleHandled;
// Инициализация игрока // Инициализация персонажа
private void Start() private void Start()
{ {
// Настройка камеры для следования за точкой камеры // Настройка камеры для следования за точкой камеры
playerCamera.SetFollowTransform(cameraFollowPoint); characterCamera.SetFollowTransform(cameraFollowPoint);
// Включение Gameplay мапа ввода // Включение Gameplay мапа ввода
_inputService.EnableMap(ActionMappings.Gameplay); _inputService.EnableMap(ActionMappings.Gameplay);
@@ -43,7 +42,7 @@ public class Player : MonoBehaviour
var scrollInput = _inputService.ZoomInput; var scrollInput = _inputService.ZoomInput;
// Передаем данные в камеру // Передаем данные в камеру
playerCamera.UpdateWithInput(Time.deltaTime, scrollInput, characterCamera.UpdateWithInput(Time.deltaTime, scrollInput,
new Vector3(lookInput.x, lookInput.y, 0)); new Vector3(lookInput.x, lookInput.y, 0));
} }
@@ -51,7 +50,7 @@ public class Player : MonoBehaviour
private void HandleCharacterInput() private void HandleCharacterInput()
{ {
// Создаем структуру ввода с полной информацией о камере // Создаем структуру ввода с полной информацией о камере
var inputs = new PlayerInputs(); var inputs = new CharacterInputs();
// Получаем данные движения из Input System // Получаем данные движения из Input System
var moveInput = _inputService.MoveInput; var moveInput = _inputService.MoveInput;
@@ -62,12 +61,12 @@ public class Player : MonoBehaviour
inputs.SlidePressed = _inputService.SlidePressed; // Слайд (Ctrl) inputs.SlidePressed = _inputService.SlidePressed; // Слайд (Ctrl)
// Передаем информацию о камере для адаптивного поведения // Передаем информацию о камере для адаптивного поведения
inputs.CameraRotation = playerCamera.transform.rotation; inputs.CameraRotation = characterCamera.transform.rotation;
inputs.CameraMode = playerCamera.CurrentMode; inputs.CameraMode = characterCamera.CurrentMode;
inputs.CameraPlanarDirection = playerCamera.PlanarDirection; inputs.CameraPlanarDirection = characterCamera.PlanarDirection;
// Передаем ввод в контроллер персонажа // Передаем ввод в контроллер персонажа
characterController.SetInputs(ref inputs); customCharacterController.SetInputs(ref inputs);
} }
// Обработка переключения режима камеры через Input System // Обработка переключения режима камеры через Input System
@@ -93,11 +92,11 @@ public class Player : MonoBehaviour
// Метод для переключения режимов камеры // Метод для переключения режимов камеры
private void ToggleCameraMode() private void ToggleCameraMode()
{ {
var currentMode = playerCamera.CurrentMode; var currentMode = characterCamera.CurrentMode;
var newMode = currentMode == CameraMode.FirstPerson ? var newMode = currentMode == CameraMode.FirstPerson ?
CameraMode.ThirdPerson : CameraMode.FirstPerson; CameraMode.ThirdPerson : CameraMode.FirstPerson;
playerCamera.SetCameraMode(newMode); characterCamera.SetCameraMode(newMode);
} }
// Обновление логики каждый кадр // Обновление логики каждый кадр
@@ -1,7 +1,7 @@
using System; using System;
using UnityEngine; using UnityEngine;
namespace Code.Gameplay.Player namespace Code.Gameplay.Character
{ {
/* /*
* Перечисление режимов работы камеры * Перечисление режимов работы камеры
@@ -21,15 +21,15 @@ namespace Code.Gameplay.Player
/* /*
* Скрипт, отвечающий за поведение камеры при передвижении * Скрипт, отвечающий за поведение камеры при передвижении
* Поддерживает как 3rd-person, так и 1st-person режимы камеры * Поддерживает как 3rd-person, так и 1st-person режимы камеры
* Реализует плавное следование за игроком, вращение и зум камеры * Реализует плавное следование за персонажем, вращение и зум камеры
* *
* Источник: Tvtig, https://www.youtube.com/watch?v=9ibpY64wBYM * Источник: Tvtig, https://www.youtube.com/watch?v=9ibpY64wBYM
*/ */
public class PlayerCamera : MonoBehaviour public class CharacterCamera : MonoBehaviour
{ {
[SerializeField] [SerializeField]
private float private float
// Расстояния от игрока до камеры // Расстояния от персонажа до камеры
defaultDistance = 6f, // Стандартное расстояние камеры от цели defaultDistance = 6f, // Стандартное расстояние камеры от цели
minDistance = 3f, // Минимальное расстояние при зуме minDistance = 3f, // Минимальное расстояние при зуме
maxDistance = 10f, // Максимальное расстояние при зуме maxDistance = 10f, // Максимальное расстояние при зуме
@@ -1,13 +1,13 @@
using KinematicCharacterController; using KinematicCharacterController;
using UnityEngine; using UnityEngine;
namespace Code.Gameplay.Player namespace Code.Gameplay.Character
{ {
/* /*
* Структура для хранения входных данных от игрока * Структура для хранения входных данных от персонажа
* Содержит информацию о движении и состоянии камеры * Содержит информацию о движении и состоянии камеры
*/ */
public struct PlayerInputs public struct CharacterInputs
{ {
public float MoveAxisForward; // Ввод движения вперед/назад (W/S или Up/Down) public float MoveAxisForward; // Ввод движения вперед/назад (W/S или Up/Down)
public float MoveAxisRight; // Ввод движения влево/вправо (A/D или Left/Right) public float MoveAxisRight; // Ввод движения влево/вправо (A/D или Left/Right)
@@ -20,13 +20,13 @@ namespace Code.Gameplay.Player
} }
/* /*
* Скрипт, отвечающий за передвижения игрока * Скрипт, отвечающий за передвижение персонажа
* Реализует физическое движение персонажа с использованием Kinematic Character Controller * Реализует физическое движение персонажа с использованием Kinematic Character Controller
* Обрабатывает ввод пользователя, применяет движение и вращение с учетом поверхности * Обрабатывает ввод пользователя, применяет движение и вращение с учетом поверхности
* *
* Источник: Tvtig, https://www.youtube.com/watch?v=9ibpY64wBYM * Источник: Tvtig, https://www.youtube.com/watch?v=9ibpY64wBYM
*/ */
public class CharacterController : MonoBehaviour, ICharacterController public class CustomCharacterController : MonoBehaviour, ICharacterController
{ {
[SerializeField] [SerializeField]
private KinematicCharacterMotor motor; // Движок физического перемещения персонажа private KinematicCharacterMotor motor; // Движок физического перемещения персонажа
@@ -78,8 +78,8 @@ namespace Code.Gameplay.Player
_firstPersonCameraRotation = motor.Transform.rotation; // Начальное вращение совпадает с персонажем _firstPersonCameraRotation = motor.Transform.rotation; // Начальное вращение совпадает с персонажем
} }
// Обработка и преобразование входных данных от игрока // Обработка и преобразование входных данных от персонажа
public void SetInputs(ref PlayerInputs inputs) public void SetInputs(ref CharacterInputs inputs)
{ {
// Обновляем таймер перезарядки слайда // Обновляем таймер перезарядки слайда
if (_slideCooldownTimer > 0f) if (_slideCooldownTimer > 0f)
@@ -194,7 +194,7 @@ namespace Code.Gameplay.Player
} }
// Обработка ввода для FirstPerson режима // Обработка ввода для FirstPerson режима
private void HandleFirstPersonInputs(ref PlayerInputs inputs, Vector3 moveInputVector) private void HandleFirstPersonInputs(ref CharacterInputs inputs, Vector3 moveInputVector)
{ {
// Сохраняем вращение камеры для применения в UpdateRotation (только горизонтальная компонента) // Сохраняем вращение камеры для применения в UpdateRotation (только горизонтальная компонента)
_firstPersonCameraRotation = ExtractHorizontalRotation(inputs.CameraRotation); _firstPersonCameraRotation = ExtractHorizontalRotation(inputs.CameraRotation);
@@ -215,7 +215,7 @@ namespace Code.Gameplay.Player
} }
// Обработка ввода для ThirdPerson режима // Обработка ввода для ThirdPerson режима
private void HandleThirdPersonInputs(ref PlayerInputs inputs, Vector3 moveInputVector) private void HandleThirdPersonInputs(ref CharacterInputs inputs, Vector3 moveInputVector)
{ {
// Сбрасываем флаг применения вращения камеры // Сбрасываем флаг применения вращения камеры
_shouldApplyCameraRotation = false; _shouldApplyCameraRotation = false;
@@ -222,7 +222,7 @@ GameObject:
- component: {fileID: 338454663} - component: {fileID: 338454663}
- component: {fileID: 338454664} - component: {fileID: 338454664}
m_Layer: 0 m_Layer: 0
m_Name: PlayerCamera m_Name: CharacterCamera
m_TagString: MainCamera m_TagString: MainCamera
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
@@ -869,7 +869,7 @@ GameObject:
- component: {fileID: 1696686256} - component: {fileID: 1696686256}
- component: {fileID: 1696686258} - component: {fileID: 1696686258}
m_Layer: 0 m_Layer: 0
m_Name: Player m_Name: Character
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
@@ -904,8 +904,8 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 9f2cdbe59523ace7ab0d8dfc36b4eb02, type: 3} m_Script: {fileID: 11500000, guid: 9f2cdbe59523ace7ab0d8dfc36b4eb02, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Player m_EditorClassIdentifier: Assembly-CSharp::Player
playerCamera: {fileID: 338454664} characterCamera: {fileID: 338454664}
characterController: {fileID: 1696686258} customCharacterController: {fileID: 1696686258}
cameraFollowPoint: {fileID: 453575298} cameraFollowPoint: {fileID: 453575298}
--- !u!114 &1696686256 --- !u!114 &1696686256
MonoBehaviour: MonoBehaviour: