Задать вопрос
@fadik22

Что делать если персонаж выполняет анимацию атаки только при беге Unity2d?

У меня проблема в том что я написал скрипт атаки, но он почему то выполняет анимацию атаки именно при беге персонажа, в чем ошибка?

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

public class character : MonoBehaviour
{
    private Rigidbody2D rb;
    public float speed = 1.5f;
    private Vector2 moveVector;
    public float jumpForce = 5.0f;
    public bool isGrounded;
    public float damage = 5.0f;
    private Animator _animator;
    void Awake()
    {
        rb = GetComponent<Rigidbody2D>();
        _animator = GetComponent<Animator>();
    }
    private void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.collider.CompareTag("Grounded"))
        {
            isGrounded = true;
            _animator.SetBool("Jump", false);
        }
    }
    private void OnCollisionExit2D(Collision2D collision)
    {
        if (collision.collider.CompareTag("Grounded"))
        {
        isGrounded = false;
        _animator.SetBool("Jump", true);
        }
    }
    private void Update()
    {
        moveVector = transform.right * Input.GetAxis("Horizontal") * speed;
        Attack();
        Jump();
        Animation();

    }
    void FixedUpdate()
    {
        if(moveVector.x!=0f)MoveCharacter();
        
    }
    void MoveCharacter()
    {
        moveVector.y=rb.velocity.y;
        rb.velocity = moveVector;
    }
    void Jump()
    { 
        if (Input.GetKeyDown(KeyCode.Space) && isGrounded)
        {
            rb.AddForce(transform.up*jumpForce, ForceMode2D.Impulse);
            _animator.SetBool("Jump", true);
        }


    }
    void Attack()
    {
        if(Input.GetKey(KeyCode.E)){
            _animator.SetBool("Attack", true);
        }
        else{
            _animator.SetBool("Attack", false);
        }
    }
    void Animation()
    {
        if (rb.velocity == Vector2.zero)
        {
            _animator.SetBool(Animator.StringToHash("Run"), false);
        }
        else
        {
            _animator.SetBool(Animator.StringToHash("Run"), true);
        }
    }

}

66c435ee829ce026469561.jpeg
66c435e8bfde3676381415.jpeg
  • Вопрос задан
  • 80 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Alexander_han
Ты очень сильно замудрил скрипт. Во первых условия на атаку лучше поменять на триггер. В анимации атаки должно быть что игрок поднял меч, ударил, вернул в обратное положение. Также надо убрать галочку Has exit time. Это для того что бы при условиях анимация повторилась один раз. А по скрипту просто пишешь

Void update()
{
If (input.GetKeyDown(KeyCode.E))
{
_animator.SetTrigger(“attack”)
}

}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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