Развитие гоночек

This commit is contained in:
ThomasCharester committed 2026-02-06 10:30:50 +03:00
1 parent ec60c47652
commit b54083521f
532 files changed
+16091 -28231

No files matched your search

@@ -0,0 +1,55 @@
using Code.Example.Race.Racer.AI;
using Code.Example.Race.Racer.Car;
using UnityEngine;
namespace Code.Example.Race.Racer.Player
{
public class PlayerCarController : MonoBehaviour
{
[SerializeField] private Rigidbody _rigidbody;
[SerializeField] private PlayerCarInput _playerCarInput;
[SerializeField] private PlayerRacer _playerRacer;
[SerializeField] private CarWheelRotatorPlayer _wheels;
private void Update()
{
if (_playerCarInput.MovementInput == Vector2.zero) return;
// var movementForward = transform.forward * (_playerCarInput.MovementInput.y * _playerRacer.Data.speed);
//
// _rigidbody.AddForce(movementForward * Time.fixedDeltaTime, ForceMode.Force);
var force = transform.forward * (_playerCarInput.MovementInput.y * _playerRacer.Data.speed);
_rigidbody.AddForce(force, ForceMode.Force);
// if (Mathf.Abs(_playerCarInput.MovementInput.y) < 0.1f && _rigidbody.linearVelocity.magnitude > 0.3f)
// {
// _rigidbody.AddForce(-_rigidbody.linearVelocity * (_playerRacer.Data.brakeForce * Time.fixedDeltaTime),
// ForceMode.Force);
// }
var steerInput = _playerCarInput.MovementInput.x;
if (_playerCarInput.MovementInput.y < 0)
steerInput = -_playerCarInput.MovementInput.x;
// var steer = steerInput * maxSteerAngle;
//
// if (frontLeftWheel) frontLeftWheel.localRotation = Quaternion.Euler(0, steer, 0);
// if (frontRightWheel) frontRightWheel.localRotation = Quaternion.Euler(0, steer, 0);
if (!(_rigidbody.linearVelocity.magnitude > 0.5f)) return;
// var turn = steerInput * _playerRacer.Data.turnSpeed * Time.fixedDeltaTime;
// _rigidbody.MoveRotation(_rigidbody.rotation * Quaternion.Euler(0, turn, 0));
if (!(_rigidbody.linearVelocity.magnitude is > 1f or < -1f)) return;
var rotateAmount = _playerCarInput.MovementInput.x * _playerRacer.Data.angularSpeed;
_wheels.RotateWheels(rotateAmount * 10 * Time.fixedDeltaTime);
var wheelRotation = transform.rotation.eulerAngles;
wheelRotation.y += rotateAmount;
transform.rotation = Quaternion.Euler(wheelRotation);
}
}
}
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 4b9e2e4a3ddc437ab250f609ea7fc33e
timeCreated: 1769705285
@@ -0,0 +1,166 @@
using UnityEngine;
using System;
using System.Collections.Generic;
namespace Code.Example.Race.Racer.Player
{
public class PlayerCarControllerRB : MonoBehaviour
{
public enum ControlMode
{
Keyboard,
Buttons
};
public enum Axel
{
Front,
Rear
}
[Serializable]
public struct Wheel
{
public GameObject wheelModel;
public WheelCollider wheelCollider;
public GameObject wheelEffectObj;
public ParticleSystem smokeParticle;
public Axel axel;
}
public ControlMode control;
public float maxAcceleration = 30.0f;
public float brakeAcceleration = 50.0f;
public float turnSensitivity = 1.0f;
public float maxSteerAngle = 30.0f;
public Vector3 _centerOfMass;
public List<Wheel> wheels;
float moveInput;
float steerInput;
private Rigidbody carRb;
// private CarLights carLights;
void Start()
{
carRb = GetComponent<Rigidbody>();
carRb.centerOfMass = _centerOfMass;
carLights = GetComponent<CarLights>();
}
void Update()
{
GetInputs();
AnimateWheels();
WheelEffects();
}
void LateUpdate()
{
Move();
Steer();
Brake();
}
public void MoveInput(float input)
{
moveInput = input;
}
public void SteerInput(float input)
{
steerInput = input;
}
void GetInputs()
{
if (control == ControlMode.Keyboard)
{
moveInput = Input.GetAxis("Vertical");
steerInput = Input.GetAxis("Horizontal");
}
}
void Move()
{
foreach (var wheel in wheels)
{
wheel.wheelCollider.motorTorque = moveInput * 600 * maxAcceleration * Time.deltaTime;
}
}
void Steer()
{
foreach (var wheel in wheels)
{
if (wheel.axel == Axel.Front)
{
var _steerAngle = steerInput * turnSensitivity * maxSteerAngle;
wheel.wheelCollider.steerAngle = Mathf.Lerp(wheel.wheelCollider.steerAngle, _steerAngle, 0.6f);
}
}
}
void Brake()
{
if (Input.GetKey(KeyCode.Space) || moveInput == 0)
{
foreach (var wheel in wheels)
{
wheel.wheelCollider.brakeTorque = 300 * brakeAcceleration * Time.deltaTime;
}
carLights.isBackLightOn = true;
carLights.OperateBackLights();
}
else
{
foreach (var wheel in wheels)
{
wheel.wheelCollider.brakeTorque = 0;
}
carLights.isBackLightOn = false;
carLights.OperateBackLights();
}
}
void AnimateWheels()
{
foreach (var wheel in wheels)
{
Quaternion rot;
Vector3 pos;
wheel.wheelCollider.GetWorldPose(out pos, out rot);
wheel.wheelModel.transform.position = pos;
wheel.wheelModel.transform.rotation = rot;
}
}
void WheelEffects()
{
foreach (var wheel in wheels)
{
//var dirtParticleMainSettings = wheel.smokeParticle.main;
if (Input.GetKey(KeyCode.Space) && wheel.axel == Axel.Rear && wheel.wheelCollider.isGrounded == true &&
carRb.linearVelocity.magnitude >= 10.0f)
{
wheel.wheelEffectObj.GetComponentInChildren<TrailRenderer>().emitting = true;
wheel.smokeParticle.Emit(1);
}
else
{
wheel.wheelEffectObj.GetComponentInChildren<TrailRenderer>().emitting = false;
}
}
}
}
}
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 5f093c913ff54cb99cd22d7e473931e7
timeCreated: 1770299509
@@ -0,0 +1,32 @@
using Code.Infrastructure.Input;
using Reflex.Attributes;
using UnityEngine;
using UnityEngine.InputSystem;
namespace Code.Example.Race.Racer.Player
{
public class PlayerCarInput : MonoBehaviour
{
private IInputService _inputService;
public Vector2 MovementInput { get; private set; }
[Inject]
public void Construct(IInputService inputService)
{
_inputService = inputService;
_inputService.BindActionPerformed((int)ActionMappings.Gameplay, (int)GameplayActions.Move, MovementPerformed);
_inputService.BindActionCancel((int)ActionMappings.Gameplay, (int)GameplayActions.Move, MovementEnded);
}
private void MovementPerformed(InputAction.CallbackContext context) => MovementInput = context.ReadValue<Vector2>();
private void MovementEnded(InputAction.CallbackContext context) => MovementInput = Vector2.zero;
private void OnDestroy()
{
if (_inputService == null) return;
_inputService.UnbindActionPerformed((int)ActionMappings.Gameplay, (int)GameplayActions.Move, MovementPerformed);
_inputService.UnbindActionCanceled((int)ActionMappings.Gameplay, (int)GameplayActions.Move, MovementEnded);
}
}
}
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: e52315b65c57499981981e2507aaf7bc
timeCreated: 1769705872