Almost Final Version

This commit is contained in:
2022-05-16 01:13:50 +07:00
parent bb6aea8720
commit 150efde055
47 changed files with 1120 additions and 4707 deletions

View File

@ -0,0 +1,100 @@
using UnityEngine;
namespace Animators.Leonid_Animator.Player
{
[RequireComponent(
typeof(Rigidbody),
typeof(InputHandler),
typeof(AnimatorHandler))]
public class CharacterLocomotion : MonoBehaviour
{
private Transform _cameraObject;
private InputHandler _inputHandler;
private Vector3 _moveDirection;
[HideInInspector] public Transform myTransform;
[HideInInspector] public AnimatorHandler myAnimatorHandler;
public Rigidbody myRigidbody;
[SerializeField] public float jumpForce;
[Header("Stats")]
[SerializeField] private float movementSpeed = 5;
[SerializeField] private float rotationSpeed = 10;
private void Start()
{
myRigidbody = GetComponent<Rigidbody>();
_inputHandler = GetComponent<InputHandler>();
myAnimatorHandler = GetComponent<AnimatorHandler>();
_cameraObject = Camera.main.transform;
myTransform = transform;
myAnimatorHandler.Initialize();
}
private void Update()
{
var deltaTime = Time.deltaTime;
_inputHandler.TickInput(deltaTime);
_moveDirection = _cameraObject.forward * _inputHandler.vertical
+ _cameraObject.right * _inputHandler.horizontal;
_moveDirection.Normalize();
_moveDirection *= movementSpeed;
_moveDirection.y = 0;
var projectedVelocity = Vector3.ProjectOnPlane(_moveDirection, _normalVector);
myRigidbody.velocity = projectedVelocity;
if (myAnimatorHandler.canRotate)
{
HandleRotation(deltaTime);
}
myAnimatorHandler.UpdateAnimatorValues(
_inputHandler.moveAmount,
0,
_inputHandler.jumpPressed,
_inputHandler.crouchPressed,
_inputHandler.firePressed);
var velocity = myRigidbody.velocity;
myRigidbody.AddForce(_inputHandler.jumpPressed ?
new Vector3(0, jumpForce, 0)
: new Vector3(velocity.x*100, -50, velocity.z * 100));
}
private void LateUpdate()
{
_inputHandler.jumpPressed = false;
_inputHandler.crouchPressed = false;
}
#region Movement
private Vector3 _normalVector;
private Vector3 _targetPosition;
private void HandleRotation(float delta)
{
if (Mathf.Abs(_inputHandler.horizontal) + Mathf.Abs(_inputHandler.vertical) < 0.1)
return;
var moveAmount = _inputHandler.moveAmount;
var targetDir = _cameraObject.forward * _inputHandler.vertical
+ _cameraObject.right * _inputHandler.horizontal;
targetDir.Normalize();
targetDir.y = 0;
if (targetDir == Vector3.zero)
targetDir = myTransform.forward;
var rotSpeed = rotationSpeed;
var rotation = Quaternion.LookRotation(targetDir);
var targetRotation = Quaternion.Slerp(myTransform.rotation, rotation, rotationSpeed * delta);
myTransform.rotation = targetRotation;
}
#endregion
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: aeafb7b8074141969e8779cd3d4a9d08
timeCreated: 1652026088

View File

@ -0,0 +1,77 @@
using CameraScripts;
using UnityEngine;
namespace Animators.Leonid_Animator.Player
{
public class InputHandler : MonoBehaviour
{
public float horizontal;
public float vertical;
public float moveAmount;
public float mouseX;
public float mouseY;
public bool crouchPressed;
public bool jumpPressed;
public bool firePressed;
private ThirdPersonViewInput _inputActions;
private Vector2 _movementInput;
private Vector2 _cameraInput;
private CameraHandler _cameraHandler;
private void Awake()
{
_cameraHandler = CameraHandler.Singleton;
if (_cameraHandler == null)
Debug.LogError("Camera Handler not found");
}
private void Update()
{
_cameraHandler.TargetPosition(Time.deltaTime);
_cameraHandler.HandleCameraRotation(Time.deltaTime, mouseX, mouseY);
}
private void OnEnable()
{
if (_inputActions is null)
{
_inputActions = new ThirdPersonViewInput();
_inputActions.PlayerMovement.Movement.performed +=
context => _movementInput = context.ReadValue<Vector2>();
_inputActions.PlayerMovement.Camera.performed +=
context => _cameraInput = context.ReadValue<Vector2>();
_inputActions.PlayerActions.Crouch.performed +=
context => crouchPressed = true;
_inputActions.PlayerActions.Jump.performed +=
context => jumpPressed = true;
_inputActions.PlayerActions.Fire.performed +=
context => firePressed = true;
_inputActions.PlayerActions.Fire.canceled +=
context => firePressed = false;
}
_inputActions.Enable();
}
private void OnDisable()
{
_inputActions.Disable();
}
public void TickInput(float delta)
{
MoveInput(delta);
}
private void MoveInput(float delta)
{
horizontal = _movementInput.x;
vertical = _movementInput.y;
moveAmount = Mathf.Clamp01(Mathf.Abs(horizontal) + Mathf.Abs(vertical));
mouseX = _cameraInput.x;
mouseY = _cameraInput.y;
}
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 77c38ddfaba349c590d4a6583f7efac4
timeCreated: 1652025145