Начало рефакторинга
Для удобства дальнейшей разработки и понимания кода, дальше пойдёт более сильный рефакторинг, пока что промежуточный
This commit is contained in:
1 parent
487331dc10
commit
e6879076a3
8 files changed
+32
-33
No files matched your search
File renamed without changes.
+15
-16
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Обновление логики каждый кадр
|
// Обновление логики каждый кадр
|
||||||
File renamed without changes.
+4
-4
@@ -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, // Максимальное расстояние при зуме
|
||||||
File renamed without changes.
+9
-9
@@ -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;
|
||||||
File renamed without changes.
@@ -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:
|
||||||
|
|||||||
Reference in new issue
Block a user