Сейчас я пытаюсь понять, почему механика приседаний не так хорошо работает в 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
Мне нужна помощь в исправлении этой ошибки с приседанием ⇐ C#
Место общения программистов C#
-
Anonymous
1770898698
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);
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79799042/i-need-help-fixing-this-crouching-bug[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия