Хочу сделать такой прыжок. Описание ниже. (2D Unity 2022, Visual Studia 2022)
С этим скриптом у прыжок может делаться везде и если во время прыжка нажать клавишу тоже прыгнет. Как сделать чтоб можно было прыгнуть только тогда когда ты на земле допустим.
Код:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MovePLauerInSoldat : MonoBehaviour
{
public float speed;
public float jumpForse;
void Update()
{
float step = Time.deltaTime * speed;
float jump = jumpForse * Time.deltaTime;
if (Input.GetKey(KeyCode.D))
{
transform.position += new Vector3(step, 0);
}
if (Input.GetKey(KeyCode.A))
{
transform.position += new Vector3(-step, 0);
}
if (Input.GetKeyDown( KeyCode.Space ))
{
transform.position += new Vector3(0, jump);
}
}
}
Ну, братишка, смотри, тебе надо сделать так, чтобы челик прыгал только когда на земле стоит, да? Для этого тебе надо добавить проверку на землю. Сейчас у тебя прыжок срабатывает тупо по нажатию пробела, и он может прыгать в воздухе, как читер какой-то. Мы это пофиксим.
Короче, добавляем проверку на землю с помощью `isGrounded`, используя `Raycast` или коллайдеры. Вот тебе код, как это сделать по понятиям:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MovePLauerInSoldat : MonoBehaviour
{
public float speed;
public float jumpForse;
public LayerMask groundLayer; // Чтобы понимать, что под ногами земля
private bool isGrounded;
void Update()
{
float step = Time.deltaTime * speed;
float jump = jumpForse * Time.deltaTime;
// Проверка, что чел стоит на земле через Raycast
isGrounded = Physics2D.Raycast(transform.position, Vector2.down, 0.1f, groundLayer);
// Движение влево-вправо
if (Input.GetKey(KeyCode.D))
{
transform.position += new Vector3(step, 0);
}
if (Input.GetKey(KeyCode.A))
{
transform.position += new Vector3(-step, 0);
}
// Прыжок только если на земле
if (Input.GetKeyDown(KeyCode.Space) && isGrounded)
{
transform.position += new Vector3(0, jump);
}
}
}
**Что тут важного:**
- Добавляем `LayerMask` для слоя земли (`groundLayer`), чтобы система понимала, что мы проверяем, есть ли земля под ногами.
- Используем `Raycast` снизу вниз, чтобы чекнуть, стоит ли твой чел на земле. Если да — прыгай спокойно.
Теперь твой герой будет прыгать только если стоит на земле, как нормальный пацан, а не летать в воздухе.
Рэйкаст вниз. И проверить, если луч достиг земли.