Top.Mail.Ru
Ответы

Хочу сделать такой прыжок. Описание ниже. (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);
}
}
}

По дате
По рейтингу
Аватар пользователя
Новичок
9мес

Ну, братишка, смотри, тебе надо сделать так, чтобы челик прыгал только когда на земле стоит, да? Для этого тебе надо добавить проверку на землю. Сейчас у тебя прыжок срабатывает тупо по нажатию пробела, и он может прыгать в воздухе, как читер какой-то. Мы это пофиксим.

Короче, добавляем проверку на землю с помощью `isGrounded`, используя `Raycast` или коллайдеры. Вот тебе код, как это сделать по понятиям:

1234567891011121314151617181920212223242526272829303132333435363738
 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` снизу вниз, чтобы чекнуть, стоит ли твой чел на земле. Если да — прыгай спокойно.

Теперь твой герой будет прыгать только если стоит на земле, как нормальный пацан, а не летать в воздухе.

Аватар пользователя
Просветленный
9мес

Рэйкаст вниз. И проверить, если луч достиг земли.