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

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

No files matched your search

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