некоторые проблемы с кодом перехода # # в единстве - PullRequest
0 голосов
/ 22 января 2019

Это код, с которым у меня возникают проблемы, фактически, когда я нажимаю кнопку пробела, проигрыватель просто повторяет анимацию прыжка, и даже стрелка вправо больше не работает.

Пожалуйста, если выможет помочь вам будет более чем приветствовать

using System.Collections;
using System.Collections.Generic;

using UnityEngine;

public class Player : MonoBehaviour
{
    Rigidbody2D rb2d;
    public float Speed = 30f;
    public float JumpForce = 30f;
    bool Jump;
    float speed;
    private bool  FacingRight;

    // Start is called before the first frame update
    void Start()
    {
            FacingRight = true;
            rb2d = GetComponent<Rigidbody2D>();
            rb2d.velocity = Vector2.zero;        
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKey(KeyCode.Space))
        {
            GetComponent<Animator>().SetBool("Jump", true);        
        }

        if (Input.GetKey(KeyCode.RightArrow))
        {        
            GetComponent<Animator>().SetFloat("speed", 1);
            rb2d.velocity = Vector2.right * Speed * Time.deltaTime;                    
        }

        if (Input.GetKey(KeyCode.LeftArrow))
        {
            GetComponent<Animator>().SetFloat("speed", 1);
            rb2d.velocity = Vector2.left * Speed * Time.deltaTime;                   
        }
        else
        {
            GetComponent<Animator>().SetFloat("speed", 0f);
            rb2d.velocity = Vector2.zero;                  
        }

    }

    private void FixedUpdate()
    {
        float horizontal = Input.GetAxis("Horizontal");
        Flip(horizontal);
    }

    private void Flip (float horizontal)
    {
        if (horizontal > 0 && !FacingRight || horizontal < 0 && FacingRight)
        {
            FacingRight = !FacingRight;
            Vector3 theScale = transform.localScale;
            theScale.x *= -1;
            transform.localScale = theScale;
        }
    }

     void OnCollisionEnter2D(Collision2D col)
    {
        if (col.gameObject.name ==" Front_Buildings")
        {
            GetComponent<Animator>().SetBool("isGrounded", true);
            rb2d.velocity = Vector2.zero ;      
        }              
    }       
}

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Не забудьте установить свой прыжок обратно в false

GetComponent<Animator>().SetBool("Jump", false);

Также у вас есть else, когда стрелка влево нажата (не).Таким образом, ваша стрелка вправо (которая не слева) установит скорость и скорость на 0.

0 голосов
/ 22 января 2019

Похоже, что для атрибута Jump аниматора здесь установлено значение 'true'.

GetComponent<Animator>().SetBool("Jump", true);

Вы когда-либо устанавливали это значение на false?Вы хотите, чтобы оно было истинным только один раз, чтобы начать анимацию, а затем должно быть установлено значение false, чтобы анимация не повторялась бесконечно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...