@FaulerAffe
-

Почему не работает анимация прыжка для платформера на unity 3d?

Всем привет, сейчас учусь работать с unity 3d. В одной книге показано, как сделать анимированный бег, как сделать прыжок, но как сделать анимированный прыжок там уже не сказали. Как я понял, код и принцип работы сильно от бега отличаться не должен, ну я и написал вот этот код:
public class PlayerController : MonoBehaviour
{
    public float speed = 250.0f;
    private Rigidbody2D _body;
    private Animator _anim;
    public float jumpforce = 25.0f;
    private BoxCollider2D _box;

    // Start is called before the first frame update
    void Start()
    {
        _body = GetComponent<Rigidbody2D>();
        _anim = GetComponent<Animator>();
        _box = GetComponent<BoxCollider2D>();
    }

    // Update is called once per frame
    void Update()
    {
        float deltaX = Input.GetAxisRaw("Horizontal") * Time.deltaTime * speed;
        float deltaY = Input.GetAxis("Vertical");
        Vector2 movement = new Vector2(deltaX, _body.velocity.y);
        _body.velocity = movement;

        Vector3 max = _box.bounds.max;
        Vector3 min = _box.bounds.min;
        Vector2 corner1 = new Vector2(max.x, min.y - .1f);
        Vector2 corner2 = new Vector2(min.x, min.y - .2f);
        Collider2D hit = Physics2D.OverlapArea(corner1, corner2);

        bool grounded = false;
        if(hit != null)
        {
            grounded = true;
        }

        if(grounded && Input.GetKeyDown(KeyCode.Space))
        {
            _body.AddForce(Vector2.up * jumpforce, ForceMode2D.Impulse);
        }
        _anim.SetFloat("v_speed", deltaY);
       _anim.SetBool("grounded", grounded);

        _anim.SetFloat("speed", Mathf.Abs(deltaX));
        if(!Mathf.Approximately(deltaX, 0))
        {
            transform.localScale = new Vector3(Mathf.Sign(deltaX), 1, 1);
        }
    }
}

Я это понимаю так: когда персонаж двигается вверх, скорость deltaY положительна, когда он летит вниз - она отрицательна.Grounded, исходя из того, что прыгать два раза нельзя, прекрасно работает, ну значит и аниматору я его передать могу. В дальнейшем я хотел создать две анимации - одна с полётом вверх, другая с полётом вниз, но и на каждую сделать условие, но для начала сделал всё в общую,так как вы можете всё увидеть на скриншоте. Почему ничего не работает? Если поймёте, объясните, пожалуйста, подробнее, я еще туплю :)5cf028b0dff64381943097.png5cf028b62462d443079769.png
  • Вопрос задан
  • 242 просмотра
Пригласить эксперта
Ответы на вопрос 1
@p4p
У тебя нет транзакции в стадию прыжка
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы