Added crouching and sprinting

added crouching and sprinting that works but I might change how crouching is done later, but for now it's god enough
This commit is contained in:
Mikolaj 2022-04-27 00:14:35 +02:00
parent 3408f47c13
commit 4c2e23615d
8 changed files with 139 additions and 103 deletions

View file

@ -336,6 +336,7 @@ GameObject:
- component: {fileID: 275207158} - component: {fileID: 275207158}
- component: {fileID: 275207159} - component: {fileID: 275207159}
- component: {fileID: 275207161} - component: {fileID: 275207161}
- component: {fileID: 275207163}
- component: {fileID: 275207162} - component: {fileID: 275207162}
m_Layer: 0 m_Layer: 0
m_Name: Alive m_Name: Alive
@ -397,7 +398,6 @@ MonoBehaviour:
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
_ReffrenceHub: {fileID: 1551772761} _ReffrenceHub: {fileID: 1551772761}
moveType: 1
_hoverForceMode: 3 _hoverForceMode: 3
_moveForceMode: 2 _moveForceMode: 2
_characterDrag: 10 _characterDrag: 10
@ -435,10 +435,10 @@ MonoBehaviour:
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
characterRigidbody: {fileID: 1551772756} characterRigidbody: {fileID: 1551772756}
moveSpeed: 70 moveSpeed: 1
airControlStrength: 70 airControlStrength: 0.1
crouchSpeedDecrease: 0 crouchSpeedDecrease: 2
sprintSpeedIncrease: 0 sprintSpeedIncrease: 1.5
ladderClimbingSpeed: 0 ladderClimbingSpeed: 0
jumpPower: 0 jumpPower: 0
crouchHeight: 0 crouchHeight: 0
@ -486,6 +486,19 @@ MonoBehaviour:
enteredLadderFromTop: 0 enteredLadderFromTop: 0
topLadder: {fileID: 0} topLadder: {fileID: 0}
bottomLadder: {fileID: 0} bottomLadder: {fileID: 0}
--- !u!114 &275207163
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 275207155}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 68e69a066cfcd3b45b91db0b5825eea3, type: 3}
m_Name:
m_EditorClassIdentifier:
_reffrenceHub: {fileID: 0}
--- !u!1 &351313843 --- !u!1 &351313843
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -3072,7 +3085,6 @@ GameObject:
- component: {fileID: 1551772752} - component: {fileID: 1551772752}
- component: {fileID: 1551772758} - component: {fileID: 1551772758}
- component: {fileID: 1551772756} - component: {fileID: 1551772756}
- component: {fileID: 1551772762}
m_Layer: 0 m_Layer: 0
m_Name: Player_Ghost m_Name: Player_Ghost
m_TagString: Untagged m_TagString: Untagged
@ -3171,29 +3183,6 @@ MonoBehaviour:
playerInputReceiver: {fileID: 1551772752} playerInputReceiver: {fileID: 1551772752}
characterHover: {fileID: 275207159} characterHover: {fileID: 275207159}
characterStateChanger: {fileID: 275207161} characterStateChanger: {fileID: 275207161}
--- !u!114 &1551772762
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1551772751}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 11afecc1cbbd8e8449477483a5577cb0, type: 3}
m_Name:
m_EditorClassIdentifier:
characterState: 0
movementStates: 0
ceilingDetected: 0
eligibleForStep: 0
onLadder: 0
topOnLadder: 0
bottomOnLadder: 0
enteredLadderFromBottom: 0
enteredLadderFromTop: 0
topLadder: {fileID: 0}
bottomLadder: {fileID: 0}
--- !u!1 &1591108313 --- !u!1 &1591108313
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0

View file

@ -4,7 +4,9 @@ namespace TTTSC.Player.Character
{ {
public class CharacterReffrenceHub : MonoBehaviour public class CharacterReffrenceHub : MonoBehaviour
{ {
[Header("-----------Misc------------")]
public Rigidbody characterRigidbody; public Rigidbody characterRigidbody;
[Header("----------Scripts-----------")]
public PlayerStateEnforcer playerStateEnforcrer; public PlayerStateEnforcer playerStateEnforcrer;
public PlayerStateMachine playerStateMachine; public PlayerStateMachine playerStateMachine;
public Controller.CharacterMovementConfig characterMovementConfig; public Controller.CharacterMovementConfig characterMovementConfig;

View file

@ -15,8 +15,6 @@ namespace TTTSC.Player.Character.Controller.Alive
private CharacterHover _characterHover; private CharacterHover _characterHover;
private PlayerInputReceiver _playerInputReceiver; private PlayerInputReceiver _playerInputReceiver;
private Rigidbody _characterRigidbody; private Rigidbody _characterRigidbody;
[SerializeField, Tooltip("use Velocity mode for testing interactable objects + other things like pickackable items")]
private MoveTypes moveType;
[SerializeField] [SerializeField]
private ForceModes _hoverForceMode, _moveForceMode; private ForceModes _hoverForceMode, _moveForceMode;
@ -52,12 +50,6 @@ namespace TTTSC.Player.Character.Controller.Alive
#endregion #endregion
enum MoveTypes
{
Velocity,
AddForce
}
enum ForceModes enum ForceModes
{ {
force, force,
@ -69,10 +61,6 @@ namespace TTTSC.Player.Character.Controller.Alive
private void FixedUpdate() private void FixedUpdate()
{ {
//if (_characterRigidbody.velocity.x != 0f || _characterRigidbody.velocity.z != 0f)
//Debug.Log("character speed x: " + _characterRigidbody.velocity.x + "character speed z:" + _characterRigidbody.velocity.z);
Vector3 downVector = transform.TransformDirection(Vector3.down); Vector3 downVector = transform.TransformDirection(Vector3.down);
Drag(); Drag();
@ -80,18 +68,13 @@ namespace TTTSC.Player.Character.Controller.Alive
switch (_characterStateMachine.characterState) switch (_characterStateMachine.characterState)
{ {
case CharacterStateMachine.CharacterStates.Grounded: case CharacterStateMachine.CharacterStates.Grounded:
switch (moveType) _characterDrag = 10;
{
case MoveTypes.Velocity: Move();
VelocityChangeMover();
break;
case MoveTypes.AddForce:
AddForceMover();
break;
}
break; break;
case CharacterStateMachine.CharacterStates.InAir: case CharacterStateMachine.CharacterStates.InAir:
_characterDrag = 0;
InAirMove(); InAirMove();
break; break;
@ -101,38 +84,6 @@ namespace TTTSC.Player.Character.Controller.Alive
_characterRigidbody.AddForce(_characterHover.hoverForces * downVector, ForceMode.VelocityChange); _characterRigidbody.AddForce(_characterHover.hoverForces * downVector, ForceMode.VelocityChange);
}
private void VelocityChangeMover()
{
Vector3 movement = _characterMovementConfig.moveSpeed * _moveDirection.x * Time.deltaTime * transform.right + _characterRigidbody.velocity.y * transform.up + _characterMovementConfig.moveSpeed * _moveDirection.y * Time.deltaTime * transform.forward;
_characterRigidbody.velocity = movement;
}
private void AddForceMover()
{
switch (_characterStateMachine.movementStates)
{
case CharacterStateMachine.MovementStates.Walking:
Walk();
break;
case CharacterStateMachine.MovementStates.Crouching:
break;
case CharacterStateMachine.MovementStates.Sprinting:
break;
}
} }
private void Drag() private void Drag()
@ -145,37 +96,73 @@ namespace TTTSC.Player.Character.Controller.Alive
_characterRigidbody.velocity = newVelocity; _characterRigidbody.velocity = newVelocity;
} }
private void Walk() private void Move()
{ {
Vector3 movement = _characterMovementConfig.moveSpeed * _moveDirection.x * Time.deltaTime * transform.right + _characterMovementConfig.moveSpeed * _moveDirection.y * Time.deltaTime * transform.forward;
if (_characterStateMachine.characterState == CharacterStateMachine.CharacterStates.Grounded) switch (_characterStateMachine.movementStates)
switch (_moveForceMode) {
{ case CharacterStateMachine.MovementStates.Walking:
case ForceModes.force: Walking();
_characterRigidbody.AddForce(movement, ForceMode.Force); break;
break;
case ForceModes.acceleration: case CharacterStateMachine.MovementStates.Crouching:
_characterRigidbody.AddForce(movement, ForceMode.Acceleration); Crouching();
break; break;
case ForceModes.impulse:
_characterRigidbody.AddForce(movement.normalized, ForceMode.Impulse); case CharacterStateMachine.MovementStates.Sprinting:
break; Sprinting();
case ForceModes.velocityChange: break;
_characterRigidbody.AddForce(movement.normalized, ForceMode.VelocityChange); }
break;
}
} }
private void InAirMove() private void InAirMove()
{ {
Vector3 movement = _characterMovementConfig.airControlStrength * _moveDirection.x * Time.deltaTime * transform.right + _characterMovementConfig.airControlStrength * _moveDirection.y * Time.deltaTime * transform.forward; Vector3 movement = _moveDirection.x * Time.deltaTime * transform.right + _moveDirection.y * Time.deltaTime * transform.forward;
Vector3 normalizedMovement = movement.normalized * _characterMovementConfig.airControlStrength;
if (_characterStateMachine.movementStates == CharacterStateMachine.MovementStates.Walking) if (_characterStateMachine.movementStates == CharacterStateMachine.MovementStates.Walking)
{ {
_characterRigidbody.AddForce(movement.normalized, ForceMode.Impulse); _characterRigidbody.AddForce(normalizedMovement, ForceMode.Impulse);
} }
} }
private void Jump()
{
}
private void Walking()
{
Vector3 movement = _moveDirection.x * Time.deltaTime * transform.right + _moveDirection.y * Time.deltaTime * transform.forward;
Vector3 normalizedMovement = movement.normalized * _characterMovementConfig.moveSpeed;
_characterRigidbody.AddForce(normalizedMovement, ForceMode.Impulse);
}
private void Crouching()
{
Vector3 movement = _moveDirection.x * Time.deltaTime * transform.right + _moveDirection.y * Time.deltaTime * transform.forward;
Vector3 normalizedMovement = movement.normalized * _characterMovementConfig.moveSpeed / _characterMovementConfig.crouchSpeedDecrease;
_characterRigidbody.AddForce(normalizedMovement, ForceMode.Impulse);
}
private void Sprinting()
{
Vector3 movement = _moveDirection.x * Time.deltaTime * transform.right + _moveDirection.y * Time.deltaTime * transform.forward;
Vector3 normalizedMovement = movement.normalized * _characterMovementConfig.moveSpeed * _characterMovementConfig.sprintSpeedIncrease;
_characterRigidbody.AddForce(normalizedMovement, ForceMode.Impulse);
}
} }
} }

View file

@ -0,0 +1,48 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace TTTSC.Player.Character.Controller
{
public class CharacterStateEnforcer : MonoBehaviour
{
[SerializeField]
private CharacterReffrenceHub _reffrenceHub;
private CharacterHover _characterHover;
private CharacterStateMachine _characterStateMachine;
// Start is called before the first frame update
void Start()
{
_characterHover = GetComponent<CharacterHover>();
_characterStateMachine = GetComponent<CharacterStateMachine>();
}
// Update is called once per frame
void FixedUpdate()
{
switch (_characterStateMachine.movementStates)
{
default:
CharacterDefault();
break;
case CharacterStateMachine.MovementStates.Crouching:
CharacterCrouch();
break;
}
}
private void CharacterCrouch()
{
_characterHover.hoverHight = 1f;
}
private void CharacterDefault()
{
_characterHover.hoverHight = 1.4f;
}
}
}

View file

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 68e69a066cfcd3b45b91db0b5825eea3
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -4,7 +4,6 @@ using UnityEngine.InputSystem;
namespace TTTSC.Player.Character.Controller namespace TTTSC.Player.Character.Controller
{ {
[RequireComponent(typeof(CharacterStateMachine))]
public class PlayerInputReceiver : MonoBehaviour public class PlayerInputReceiver : MonoBehaviour
{ {
private float _lookX, _lookY; private float _lookX, _lookY;