Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

C# как сделать изменяемую высоту прыжка в зависимости от времени удержания кнопки

Влад Иванов Профи (627), на голосовании 5 месяцев назад
Суть в том чтобы при нажатии на пробел персонаж прыгал на определенную высоту, а если пробел удерживать он прыгал выше до тех пор пока не будет отжата кнопка или не будет достигнута максимальная высота прыжка. В пример могу привести игру Terraria, в ней прыжок реализован именно так как мне нужно
Голосование за лучший ответ
странноватый человек Мастер (1901) 6 месяцев назад
Для реализации такого поведения в C# с использованием Unity, вы можете создать метод, который будет обрабатывать прыжок, и использовать Input.GetButton() для проверки, как долго кнопка удерживается. Вот пример кода, который можно добавить в вашу CharacterController или другой скрипт, отвечающий за управление персонажем:

 using UnityEngine; 

public class PlayerController : MonoBehaviour
{
public float baseJumpHeight = 1f; // базовая высота прыжка
public float maxJumpHeight = 2f; // максимальная высота прыжка
public float jumpForce = 10f; // сила прыжка
public Transform groundCheck; // трансформация для проверки земли под персонажем
public float groundCheckRadius = 0.2f; // радиус проверки земли
public LayerMask whatIsGround; // слой для определения, что является землей

private Rigidbody rb; // Rigidbody для персонажа
private bool isGrounded; // флаг, показывающий, находится ли персонаж на земле
private float jumpTime = 0f; // время, проведенное в прыжке

void Start()
{
rb = GetComponent();
}

void FixedUpdate()
{
isGrounded = Physics.CheckSphere(groundCheck.position, groundCheckRadius, whatIsGround);

if (isGrounded && Input.GetKeyDown(KeyCode.Space))
{
// Начало прыжка
jumpTime = 0;
ApplyJumpForce();
}
else if (isGrounded == false && Input.GetKey(KeyCode.Space))
{
// Продолжение прыжка при удержании клавиши
jumpTime += Time.fixedDeltaTime;
ApplyJumpForce();
}
else if (Input.GetKeyUp(KeyCode.Space))
{
// Окончание прыжка при отпускании клавиши
jumpTime = 0;
}
}

void ApplyJumpForce()
{
if (jumpTime <= 1f)
{
// Вычисляем изменяемую высоту прыжка в зависимости от времени удержания
float jumpHeight = Mathf.Lerp(baseJumpHeight, maxJumpHeight, jumpTime);
rb.AddForce(Vector3.up * jumpForce * jumpHeight, ForceMode.Impulse);
}
}
}
В этом коде мы проверяем, находится ли персонаж на земле, и если он находится, то начинаем прыжок при нажатии пробела (Input.GetKeyDown( KeyCode.Space )). Во время прыжка, мы обновляем jumpTime и применяем силу прыжка (ApplyJumpForce()) с изменяемой высотой, используя Mathf.Lerp() для линейного интерполяции между базовой и максимальной высотой прыжка. При отпускании клавиши прыжка (Input.GetKeyUp( KeyCode.Space )) мы обнуляем jumpTime.

Обратите внимание, что этот код должен быть настроен для вашего проекта, включая настройку компонентов, параметров прыжка и слоев объектов.
Похожие вопросы