Мне нужна помощь в исправлении этой ошибки с приседаниемC#

Место общения программистов C#
Ответить
Anonymous
 Мне нужна помощь в исправлении этой ошибки с приседанием

Сообщение Anonymous »

Сейчас я пытаюсь понять, почему механика приседаний не так хорошо работает в Unity. Я был бы признателен всем, кто может помочь мне понять, почему этот код не работает и как я могу это исправить?
При нажатии кнопки приседания капсула удлиняется, и камера становится на место, как и должна, но ввод мыши меняется на противоположный, а когда вы снова приседаете, капсула / игрок немного подбрасывается в воздух, поэтому это не плавно, но все остальное возвращается в нормальное состояние
введите описание изображения здесь
using System.Runtime.CompilerServices;
using NUnit.Framework;
using UnityEngine;
using UnityEngine.InputSystem;

public class PlayerMovement : MonoBehaviour
{
[Header("Movement Settings")]
public float moveSpeed = 5f;
public float sprintSpeed = 8f;
public float jumpForce = 5f;

public float crouchSpeed = 2.5f;
public float crouchHeight = 1f;
private float originalHeight;

private bool isCrouching = false;

[Header("Ground Check")]
public Transform groundCheck;
public float groundDistance = 0.4f;
public LayerMask groundMask;

private Rigidbody rb;
private Vector2 moveInput;
private bool isGrounded;
private bool isSprinting;

private PlayerInput playerInput;

void Start()
{
rb = GetComponent();
playerInput = new PlayerInput();
originalHeight = transform.localScale.y;
}

void Update()
{
CheckGround();
}

private void FixedUpdate()
{
MovePlayer();
}

void OnJump()
{
if (isGrounded)
{
rb.AddForce(Vector3.up * jumpForce, ForceMode.Impulse);
}
}

void CheckGround()
{
isGrounded = Physics.CheckSphere(groundCheck.position, groundDistance, groundMask);
}

public void OnMovement(InputValue value)
{
moveInput = value.Get();
}

public void OnSprint(InputValue value)
{
isSprinting = value.isPressed;
}

public void OnCrouch(InputValue value)
{
bool crouchPressed = value.isPressed;

if (crouchPressed && !isCrouching)
StartCrouch();
else if (crouchPressed && isCrouching)
StopCrouch();
}

void StartCrouch()
{
isCrouching = true;
transform.localScale = new Vector3(transform.localScale.x, crouchHeight, transform.localScale.z);
}

void StopCrouch()
{
isCrouching = false;
transform.localScale = new Vector3(transform.localScale.x, originalHeight, transform.localScale.z);
}

void MovePlayer()
{
bool canSprint = isSprinting && moveInput.y > 0f;
float currentSpeed = canSprint ? sprintSpeed : moveSpeed;

Vector3 direction = transform.right * moveInput.x + transform.forward * moveInput.y;
direction.Normalize();

rb.linearVelocity = new Vector3(direction.x * currentSpeed, rb.linearVelocity.y, direction.z * currentSpeed);
}
}


Подробнее здесь: https://stackoverflow.com/questions/797 ... uching-bug
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»