From 6699035d665f097663b6b9d70f0a9fb6efff3483 Mon Sep 17 00:00:00 2001 From: KOSMOGOR Date: Sat, 8 Mar 2025 18:57:38 +0300 Subject: [PATCH] update: changed method to get onGround for player --- Assets/Scenes/TestScene.unity | 39 +++++++++++++++++++++++++++++++- Assets/Scripts/PlayerMovement.cs | 24 ++++++++++++++------ ProjectSettings/TagManager.asset | 28 ++--------------------- 3 files changed, 57 insertions(+), 34 deletions(-) diff --git a/Assets/Scenes/TestScene.unity b/Assets/Scenes/TestScene.unity index cb14e30..a5c296b 100644 --- a/Assets/Scenes/TestScene.unity +++ b/Assets/Scenes/TestScene.unity @@ -119,6 +119,37 @@ NavMeshSettings: debug: m_Flags: 0 m_NavMeshData: {fileID: 0} +--- !u!1 &1074333935 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1074333936} + m_Layer: 0 + m_Name: LegsPosition + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1074333936 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1074333935} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: -0.9, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2060574367} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1560783767 GameObject: m_ObjectHideFlags: 0 @@ -252,7 +283,7 @@ GameObject: - component: {fileID: 1692628190} - component: {fileID: 1692628189} - component: {fileID: 1692628188} - m_Layer: 0 + m_Layer: 6 m_Name: Cube m_TagString: Untagged m_Icon: {fileID: 0} @@ -524,6 +555,11 @@ MonoBehaviour: crouchHeightMultiplier: 0.5 jumpForce: 5 gravityMultiplier: 1 + legsPosition: {fileID: 1074333936} + legsRadius: 0.2 + groundMask: + serializedVersion: 2 + m_Bits: 64 isCrouching: 0 --- !u!143 &2060574363 CharacterController: @@ -617,6 +653,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: - {fileID: 1907799224} + - {fileID: 1074333936} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &2060574368 diff --git a/Assets/Scripts/PlayerMovement.cs b/Assets/Scripts/PlayerMovement.cs index 8e4e80c..683a0c4 100644 --- a/Assets/Scripts/PlayerMovement.cs +++ b/Assets/Scripts/PlayerMovement.cs @@ -2,24 +2,31 @@ using UnityEngine; public class PlayerMovement : MonoBehaviour { + [Header("Horizontal movement")] public float speed = 1f; public float sprintSpeedMultiplier = 2f; public float crouchSpeedMultiplier = 0.5f; public float crouchHeightMultiplier = 0.5f; + [Header("Vertical movement")] public float jumpForce = 1f; public float gravityMultiplier = 1f; + public Transform legsPosition; + public float legsRadius = 0.5f; + public LayerMask groundMask; + + [Header("Debug info")] + [SerializeField] bool isCrouching = false; + [SerializeField] Vector3 gravityVelocity; + [SerializeField] bool grounded; CharacterController characterController; - [SerializeField] bool isCrouching = false; - Vector3 gravityVelocity; - bool grounded; void Start() { characterController = GetComponent(); } void Update() { - grounded = characterController.isGrounded; + grounded = GetOnGround(); HandleCrouching(); HandleMovement(); HandleJumping(); @@ -36,12 +43,11 @@ public class PlayerMovement : MonoBehaviour characterController.height /= crouchHeightMultiplier; characterController.center -= Vector3.down * (characterController.height * (1 - crouchHeightMultiplier)) / 2; } - // if (characterController.isGrounded) rb.AddForce(Vector3.up * (characterController.height / 5), ForceMode.VelocityChange); } } void HandleJumping() { - if (Input.GetKeyDown(KeyCode.Space) && grounded) { + if (Input.GetKey(KeyCode.Space) && grounded) { gravityVelocity = Vector3.up * (jumpForce * gravityMultiplier); } } @@ -58,11 +64,15 @@ public class PlayerMovement : MonoBehaviour } void DoGravity() { - if (grounded && gravityVelocity.y < 0) gravityVelocity = Vector3.down * 0.5f; + if (grounded && gravityVelocity.y < 0) gravityVelocity = Vector3.zero; gravityVelocity += Physics.gravity * Time.deltaTime; characterController.Move(gravityVelocity * (Time.deltaTime * gravityMultiplier)); } + bool GetOnGround() { + return Physics.CheckSphere(legsPosition.position, legsRadius, groundMask); + } + void OnControllerColliderHit(ControllerColliderHit hit) { hit.gameObject.SendMessage("ReverseOnControllerColliderHit", hit, SendMessageOptions.DontRequireReceiver); } diff --git a/ProjectSettings/TagManager.asset b/ProjectSettings/TagManager.asset index 6413d11..4539691 100644 --- a/ProjectSettings/TagManager.asset +++ b/ProjectSettings/TagManager.asset @@ -2,7 +2,7 @@ %TAG !u! tag:unity3d.com,2011: --- !u!78 &1 TagManager: - serializedVersion: 2 + serializedVersion: 3 tags: [] layers: - Default @@ -11,7 +11,7 @@ TagManager: - - Water - UI - - + - Ground - - - @@ -50,27 +50,3 @@ TagManager: - Light Layer 5 - Light Layer 6 - Light Layer 7 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -