UnityEngineDanil
@UnityEngineDanil
I'm love Unity Engine!

Как управлять скоростью анимации?

Проблема в том что когда мой персонаж прыгает анимация работает хорошо но если у моего персонажа прыжок выше то анимация проигрывается быстрее и персонаж приземляется с анимацией покоя. Мне же нужно чтобы вне зависимости от того, как долго персонаж находился в воздухе, должна проигрываться анимация прыжка. Извините если я немного не понятно объяснил!
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerController : MonoBehaviour
{
    Rigidbody2D rb;
    Animator anim;

    public float MoveSpeed;
    private float ControllerMove;

    public float JumpForce;

    public Transform GroundCheck;
    public LayerMask whIsGround;
    public bool Grounded = false;
    public float GroundRadius;

    void Start()
    {
        rb = GetComponent<Rigidbody2D>(); 
        anim = GetComponent<Animator>();  
    }

    void Update()
    {   
        Grounded = Physics2D.OverlapCircle(GroundCheck.position, GroundRadius, whIsGround);

        ControllerMove = Input.GetAxis("Horizontal");

        if(Input.GetKeyDown(KeyCode.Space) && Grounded)
        {
            Jump();
            anim.SetBool("Jump", true);
        }
         
        else if(Grounded == true)
        {
            anim.SetBool("Jump", false);
        }  
    

    }
    private void FixedUpdate()
    {
        rb.velocity = new Vector2(ControllerMove * MoveSpeed, rb.velocity.y);

        if(Input.GetAxis("Horizontal") == 0)
        {
            anim.SetBool("Run", false);
        }
        else
        {   
            FlipSpite();
            anim.SetBool("Run", true);
        }
    }
    private void Jump()
    {
        rb.velocity += JumpForce * Vector2.up; 
    }

    private void FlipSpite()
    {
        if(Input.GetAxis("Horizontal") > 0)
        {
            transform.localRotation = Quaternion.Euler(0, 0, 0);
        }
        if(Input.GetAxis("Horizontal") < 0)
        {
            transform.localRotation = Quaternion.Euler(0, 180, 0);
        }
    }
}


5f0862d9afb7c103976883.png
  • Вопрос задан
  • 45 просмотров
Решения вопроса 1
DanceM
@DanceM Куратор тега Unity Game Engine
Кто хочет -ищет способ, кто не хочет -ищет причину
Надо лишь зациклить (loop) анимацию Jump, если анимация позволяет) и убедится, что условие выхода из состояния Jump работает, как должно.

Если нельзя зациклить, то придется устанавливать длительность анимации прыжка заранее. Это легко:5f087c44b141a820934878.png
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
GameGears Лимассол
от 2 500 до 4 000 €
2Reallife Москва
от 120 000 до 150 000 ₽
14 авг. 2020, в 02:27
1000 руб./за проект
14 авг. 2020, в 01:51
600 руб./за проект
13 авг. 2020, в 23:56
200000 руб./за проект