Хочу двойной прыжок

258
03 августа 2021, 10:30

Пытался сделать двойной прыжок, ну или одиночный еще точно не знаю, а у меня персонаж летает, ну то есть прыгает сколько хочет. У меня уже стоит под ним платформа и он считывает землю, вроде бы, но он все равно летает

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NewBehaviourScript : MonoBehaviour {
public float speed = 12; // Выводим в меню где можно все поменять, кликнув на персонажа
public float jumpheight = 12;
private int extraJumps;
public int extraJumpsValue;
private bool isGrounded;
public Transform groundCheck;
public float checkRadius;
public LayerMask WhatisGround;

Rigidbody2D rb;
Animator anim; //сокращаем название
void Start()
{
    extraJumps = extraJumpsValue;
    rb = GetComponent<Rigidbody2D>(); // Включили боксколайдер 
    anim = GetComponent<Animator>(); // Включили анимацию
}
void FixedUpdate()
{
    isGrounded = Physics2D.OverlapCircle(groundCheck.position, checkRadius, WhatisGround);
    rb.velocity = new Vector2(Input.GetAxis("Horizontal") * speed, rb.velocity.y); //Функция бега
}
void Update() {
    if (isGrounded = true)
    {
        extraJumps = extraJumpsValue;
    }
    if (Input.GetKeyDown(KeyCode.Space) && extraJumps > 0)
    {
        Jump();
        extraJumps--;
    }else if (Input.GetKeyDown(KeyCode.Space) && extraJumps == 0 && isGrounded == true)
    {
        Jump();
    }
    if (Input.GetAxis ("Horizontal") == 0) {
        anim.SetInteger ("popka", 1);
    } else {
        Flip();
        anim.SetInteger("popka", 2);
    }
}
void Flip()
{
    if (Input.GetAxis("Horizontal") < 0)
        transform.localRotation = Quaternion.Euler (0, 200, 0);
    if (Input.GetAxis("Horizontal") > 0)
        transform.localRotation = Quaternion.Euler (0, 0, 0);
}
void Jump()
{ rb.AddForce(transform.up * jumpheight, ForceMode2D.Impulse); }
}
Answer 1

Ты пытаешься присвоить внутри условия if if (isGrounded = true) {}. if нужно получить bool значение и используется операция сравнения "==", а не присвоения "=", но isGrounded сам по себе является bool if (isGrounded) {}. Функция Flip странная, ты не флипаешь, а вертишь.

[DisallowMultipleComponent]
[RequireComponent(typeof(Rigidbody2D))]
[RequireComponent(typeof(Animator))]
public class Runner : MonoBehaviour {
    [SerializeField] private LayerMask _groundLayer;
    [SerializeField] private Transform _groundCheck;
    [SerializeField] private float _checkRadius = 1;
    [SerializeField] private float _speed = 12;
    [SerializeField] private float _jumpForce = 12;
    [SerializeField] private int _baseJump = 2;
    [SerializeField] private float _fallVelocityMark = -1;
    [SerializeField] private KeyCode _jumpKey = KeyCode.Space;
    private const string _animName = "popka";
    private Rigidbody2D _body;
    private Animator _anim;
    private Transform _transform;
    private int _jumps;
    private bool _isGrounded;
    private void Awake () {
        _body = GetComponent<Rigidbody2D>();
        _anim = GetComponent<Animator>();
        _transform = transform;
    }
    private void FixedUpdate () {
        if (Input.GetKeyDown(_jumpKey)) 
            Jump();
        if (_isGrounded)
            Move();
        else if (_body.velocity.y < 0 && CheckGroundCollide())
            Landing();
    }
    private void Move () {
        float Vector = Input.GetAxis("Horizontal");
        _body.velocity = new Vector2(Vector*_speed, _body.velocity.y);
        if (Vector == 0)
            _anim.SetInteger(_animName, 1);
        else {
            _anim.SetInteger(_animName, 2);
            Flip(Vector);
        }
        if (_body.velocity.y < _fallVelocityMark)
            Fall();
    }
    private void Flip (float vector) {
        _transform.localScale = vector < 0 ? Vector3.one : new Vector3(-1, 1, 1);
    }
    private void Jump () {
        if (_jumps > 0) {
            _isGrounded = false;
            _jumps--;
            _body.AddForce(transform.up*_jumpForce, ForceMode2D.Impulse);
        }
    }
    private void Landing () {
        _isGrounded = true;
        _jumps = _baseJump;
    }
    private void Fall () {
        _isGrounded = false;
        _jumps -= 1;
    }
    private bool CheckGroundCollide () {
        return Physics2D.OverlapCircle(_groundCheck.position, _checkRadius, _groundLayer);
    }
}
READ ALSO
Как записать хранимую процедуру через C#

Как записать хранимую процедуру через C#

Есть несколько файлов каждый из который содержит создание ХПНеобходимо реализовать алгоритм при котором программа запускаясь ищет в БД ХП по имени...

379
Как получить имя контроллера домена

Как получить имя контроллера домена

Как получить имя текущего контроллера домена? Данный отрезок кода выводит имя домена, а мне нужно имя контроллера

179
Не работает Hello World в Visual Studio

Не работает Hello World в Visual Studio

пробовал сам сделать хелло ворлд на c#, ругается скачал с гитхаба, тоже не работает, может кто-то сталкивался с таким

163
Как создать .Net Core 3 WPF приложение в VisualStudio 19?

Как создать .Net Core 3 WPF приложение в VisualStudio 19?

При попытке создать WPF приложение наNet Core 3 выдает это: Я думаю, что тут проблема локализации, ибо найти такие разделы настроек не могу

305