Баг со спавнером мобов.

Баг со спавнером мобов.

Сообщение Adam 19 окт 2021, 23:15

Есть скрипт Enemy и EnemySpawn. У врага есть здоровье которое убывает при попадании пули. Когда переменная health <= 0 проигрывается анимация смерти. Однако некоторые спавнящиеся враги становятся бессмертными. Может кто-нибудь знает в чем дело?

Ссылка на GitHub: https://github.com/skrudgemacdac/-/tree/main
Adam
UNец
 
Сообщения: 15
Зарегистрирован: 19 окт 2021, 22:51

Re: Баг со спавнером мобов.

Сообщение Alkos26Rus 19 окт 2021, 23:23

Попробуй так, вобщем все эти health != 0 заменить на health > 0, потому как жизни и отрицательная может быть

Синтаксис:
Используется csharp
using Spine.Unity;
using UnityEngine;

public class Enemy : MonoBehaviour
{
    private float timeBtwAttack;
    public float startTimeBtwAttack;

    public Transform player;
    private Player _player;
    private GameObject physics;
    private Rigidbody2D rb;
    public CapsuleCollider2D capsuleCollider;
    public float moveSpeed = 200f;
    private Vector2 movement;
    public int health;
    public int damage;
    public float normalSpeed;
    public SkeletonAnimation skeletonAnimation;
    public string currentAnimation;
    public AnimationReferenceAsset attack, idle, walking, die;

    void Start()
    {
        rb = GetComponent<Rigidbody2D>();
        normalSpeed = moveSpeed;
    }

    void Update()
    {
        if (health > 0)
        {
            Vector3 direction = player.position - transform.position;
            float angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg - 90f;
            rb.rotation = angle;
            direction.Normalize();
            movement = direction;
        }


    }

    public void FixedUpdate()
    {
        moveCharacter(movement);
    }

    public void moveCharacter(Vector2 direction)
    {
        if (health > 0)
        {
            rb.MovePosition((Vector2)transform.position + (direction * moveSpeed * Time.deltaTime));
        }
    }

    public void OnTriggerStay2D(Collider2D other)
    {
        if (other.CompareTag("Player"))
        {
            if (timeBtwAttack <= 0 && health > 0)
            {
                SetCharacterState("Attack_1");
                other.GetComponent<Player>().ChangeHealth(damage);
            }
        }
        else
        {
            timeBtwAttack -= Time.deltaTime;
        }
    }

    public void OnTriggerExit2D(Collider2D collision)
    {
        SetCharacterState("Run");
    }

    public void TakeDamage(int damage)
    {
        health -= damage;

        if (health <= 0)
        {
            SetCharacterState("Die");
            gameObject.layer = 0;
            Destroy(rb);
            Destroy(capsuleCollider);

            transform.position = transform.position + new Vector3(0, 0, -0.000000000000003f);
        }

    }

    public void OnEnemyAttack()
    {
        _player.ChangeHealth(damage);
        timeBtwAttack = startTimeBtwAttack;
    }

    public void SetAnimation(AnimationReferenceAsset animation, bool loop, float timescale)
    {
        if (animation.name.Equals(currentAnimation))
        {
            return;
        }
        skeletonAnimation.state.SetAnimation(0, animation, loop).TimeScale = timescale;
        currentAnimation = animation.name;
    }

    public void SetCharacterState(string state)
    {
        if (state.Equals("Run") && health != 0)
        {
            SetAnimation(walking, true, 1f);
        }
        else if (state.Equals("Attack_1") && health != 0)
        {
            SetAnimation(attack, true, 1f);
        }
        else if (state.Equals("Die") && health == 0)
        {
            SetAnimation(die, false, 1f);
        }
    }
}
 
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1640
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

Re: Баг со спавнером мобов.

Сообщение Adam 19 окт 2021, 23:33

Сделал. Но тогда те что становились бессмертными просто встают на месте и у них анимация бега не сменяется на анимацию смерти.
Adam
UNец
 
Сообщения: 15
Зарегистрирован: 19 окт 2021, 22:51

Re: Баг со спавнером мобов.

Сообщение Adam 19 окт 2021, 23:36

А все товарищ, решил проблему. Там просто в условии с анимацией смерти поменял health == 0 на health <= 0. Спасибо за твою помощь)
Adam
UNец
 
Сообщения: 15
Зарегистрирован: 19 окт 2021, 22:51


Вернуться в Баги

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2