Войти
UnityФорумПрограммирование

герой не падает и не срабатывает движение стрелками, влево и вправо

#0
16:47, 12 окт 2022

Добрый день, друзья! Подскажите, пожалуйста. Почему не падает герой не землю и не срабатывает движение влево и вправо и прыжок. 2022-10-12_16-46-43 | герой не падает и не срабатывает движение стрелками, влево и вправо


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player : MonoBehaviour
{
    Rigidbody2D rb; // rb имеет класс риджибади.
    public float speed;
    public float jumpHeight;
    bool isGrounded; // переменная  которая определяет, стоит ли персонаж на каком-либо объекте. 
    public Transform groundCheck; //  переменная оценивает находится ли персонаж на поверхности.
    void Start()
    {
        rb = GetComponent<Rigidbody2D>();// в переменную помещаем класс Rigidbody2D
    }
    void Update()
    {
        Flip();
        CheckGround();
    }
    void FixedUpdate() // функция или метод отвечающие за физические действия
    {
        rb.velocity = new Vector2(Input.GetAxis("Horizontal") * speed, rb.velocity.y); // присваиваем  в переменную скорость  класс инпут - это ввод, GetAxis – определяет какая кнопка влево или вправо нажата, velocity - скорость
        if (Input.GetKeyDown(KeyCode.Space) && isGrounded)//если нажат пробел
            rb.AddForce(transform.up * jumpHeight, ForceMode2D.Impulse);// добавляем силовой прыжок
    }
    void Flip()
    {
        if (Input.GetAxis("Horizontal") > 0) // если нажата клавиша вправо
            transform.localRotation = Quaternion.Euler(0, 0, 0); // то смотрим вправо
        if (Input.GetAxis("Horizontal") < 0)// если нажата клавиша влево
            transform.localRotation = Quaternion.Euler(0, 180, 0); // то смотрим влево
    }
    void CheckGround()// проверка пола
    {
        Collider2D[] colliders = Physics2D.OverlapCircleAll(groundCheck.position, 0.2f);// 0,2 - это радиус коллайдера, все коллайдеры помещаются в список в этом радиусе 0,2
        isGrounded = (colliders.Length > 1); //условие земли, если длина списка colliders.Length>1, то рядом с персонажем больше одного объекта, например земля или враг, то он прыгать уже не будет.
    }
}

#1
22:28, 16 окт 2022

Запринтуй то что у тебя в Input.GetAxis, возможно, инпут просто не хватается стрелками в настройках ввода. Если не собираешься выпускать игру на консоли, лучше пользоваться напрямую кнопками по keycode, как у тебя с пробелом.

UnityФорумПрограммирование