Среда, 18 Декабря 2024, 23:20

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Анимация игрока в падении [Решено!]
ZigMoonTДата: Понедельник, 11 Мая 2020, 03:00 | Сообщение # 1
был не раз
Сейчас нет на сайте
Здравствуйте. У персонажа в игре при падении с платформы продолжается анимация бега или ходьбы, на видео можно увидеть. Вот видео. В видео я не продолжал нажимать клавиши движения, персонаж просто падал. Не вините меня за спрайт перса, я только разбираюсь в основах создания 2D игр. Если нужно объяснение моего невнятного кода, то обязательно все распишу.

Код
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerController : MonoBehaviour
{

    Rigidbody2D rb;
    Animator animator;
    SpriteRenderer sprite;

    [SerializeField]
    int speed;
    [SerializeField]
    int jumpForce;
    [SerializeField]
    Transform CheckGround;
    [SerializeField]
    int run;

    private int speed1;
    private bool speedBool = false;
    private bool idle = true;

    bool isGrounded;
    private float time = 3f;
    public float timeOut = 3f;

    private void Start()
    {
        speed1 = speed;
        rb = GetComponent<Rigidbody2D>();
        animator = GetComponent<Animator>();
        sprite = GetComponent<SpriteRenderer>();
    }

    void Update()
    {
        time += Time.deltaTime;
    }

    private void FixedUpdate()
    {

        if(Physics2D.Linecast(transform.position, CheckGround.position, 1 << LayerMask.NameToLayer("Ground")))
        {
            isGrounded = true;
        }
        else
        {
            isGrounded = false;
        }

        if (Input.GetKey(KeyCode.D))
        {
            rb.velocity = new Vector2(speed, rb.velocity.y);
            
            if (isGrounded && speedBool == false)
                animator.Play("Player_Run");

            sprite.flipX = false;
            idle = false;
        }
        else if (Input.GetKey(KeyCode.A))
        {
            rb.velocity = new Vector2(-speed, rb.velocity.y);

            if (isGrounded && speedBool == false)
                animator.Play("Player_Run");

            idle = false;
            sprite.flipX = true;
        }
        else if(isGrounded)
        {
            rb.velocity = new Vector2(0, rb.velocity.y);

            if (isGrounded)
                animator.Play("Player_Idle");
            idle = true;
        }

        if (Input.GetKey(KeyCode.LeftShift) && idle == false)
        {
            speed = run;
            speedBool = true;

            if (isGrounded)
                animator.Play("Player_Runing");
        }
        else
        {
            speed = speed1;
            speedBool = false;
        }

        if (Input.GetKey(KeyCode.W) && isGrounded == true && time > timeOut)
        {
            time = 0f;
            rb.velocity = new Vector2(rb.velocity.x, jumpForce);
            animator.Play("Player_Jump");
        }
    }
}


Сообщение отредактировал ZigMoonT - Понедельник, 11 Мая 2020, 16:34
freeprogrammerДата: Понедельник, 11 Мая 2020, 07:56 | Сообщение # 2
участник
Сейчас нет на сайте
У тебя не переключается анимация если персонаж не на земле и не нажата клавиша вправо, влево. Попробуй так:
Код
else if (Input.GetKey(KeyCode.A))
        {
            rb.velocity = new Vector2(-speed, rb.velocity.y);

            if (isGrounded && speedBool == false)
                animator.Play("Player_Run");

            idle = false;
            sprite.flipX = true;
        }
else if(!isGrounded)
        {
                animator.Play("Player_Idle");
        }


Medieval Checkers , Aeronauts, Funny Animals, KickItUp Soccer Brazil, Dragon Fire & Fury
ZigMoonTДата: Понедельник, 11 Мая 2020, 16:34 | Сообщение # 3
был не раз
Сейчас нет на сайте
freeprogrammer, большое спасибо!
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг