Единство, которое я пытаюсь сделать миньоном, действующим странно - PullRequest
0 голосов
/ 27 января 2020

Итак, я делал Миньона для своей игры зомб ie, но после запуска волны она движется в правильном направлении примерно на 0,2 секунды, разворачивается и достигает 0,0,0, и она больше не двигается, если только враг врезается в миньона, и тогда миньон будет go после зомба ie, но он продолжает возвращаться к 0,0,0. Я не понимаю, почему он продолжает возвращаться к 0,0,0, нет другого объекта с 0,0,0. Пожалуйста, помогите мне.

    public Slider HealthBar;
    public GameObject HealthBarUI;
    private Rigidbody2D rb;
    private float CurrentHealth;
    public float MaxHealth;
    public float HitsPerSecond;
    public int DamagePerHit;
    private float lastattacked;
    public GameObject Player;
    private GameObject[] Enemys;
    private GameObject Enemy;
    public float MoveSpeed;
    public float healthBarHeight = 1;
    private GameObject EnemysFolder;
    void Start()
    {
        CurrentHealth = MaxHealth;
        HealthBarUI.SetActive(false);
        rb = GetComponent<Rigidbody2D>();
        EnemysFolder = GameObject.Find("Enemys");
    }

    void ChooseNewEnemy()
    {
        Enemys = GameObject.FindGameObjectsWithTag("Enemy");
        foreach (GameObject Enemyd in Enemys)
        {
            Enemy = Enemyd;
        }
    }

    void Update()
    {
        HealthBar.value = CurrentHealth/MaxHealth;
        if(CurrentHealth < MaxHealth)
        {
            HealthBarUI.SetActive(true);
        }
    }
    public void dealDamage(int Damage)
    {
        CurrentHealth -= Damage;
        if (CurrentHealth <= 0)
        {
            CurrentHealth = 0;
            //Destroy(transform.parent.gameObject);
        }
    }
    void OnTriggerStay2D(Collider2D collider)
    {
        if(collider.tag == "Enemy")
        {
            if ((Time.time - lastattacked > 1 / HitsPerSecond ))
            {
                if(collider.GetComponent<EnemyControler>() != null)
                {
                    collider.GetComponent<EnemyControler>().dealDamage(DamagePerHit, Player);
                    /*if(collider.GetComponent<EnemyControler>().CurrentHealth <= 0)
                    {
                        ChooseNewEnemy();
                    }*/
                }
                lastattacked = Time.time;
            }
        }
    }
    void FixedUpdate() 
    {
        Enemys = GameObject.FindGameObjectsWithTag("Enemy");
        HealthBarUI.transform.position = new Vector3(transform.position.x, transform.position.y + healthBarHeight, transform.position.z);
        transform.up = ((GetClosestEnemy(Enemys).transform.position - transform.position) * -1);
        rb.velocity = (transform.up * -MoveSpeed);
    }
    GameObject GetClosestEnemy (GameObject[] enemies)
    {
        GameObject bestTarget = null;
        float closestDistanceSqr = Mathf.Infinity;
        Vector3 currentPosition = gameObject.transform.localPosition;
        foreach(GameObject potentialTarget in enemies)
        {
            Vector3 directionToTarget = potentialTarget.transform.localPosition - currentPosition;
            float dSqrToTarget = directionToTarget.sqrMagnitude;
            if(dSqrToTarget < closestDistanceSqr)
            {
                closestDistanceSqr = dSqrToTarget;
                bestTarget = potentialTarget;
            }
        } 
        return bestTarget;
    }

1 Ответ

0 голосов
/ 27 января 2020

Если врагов нет, ваш GetClosestEnemy возвращает ноль. Я не совсем уверен, почему это на самом деле не дает cra sh, но проблема в том, что вы не справляетесь с этим делом. Вы всегда вычисляете это значение transform.up и заставляете миньона двигаться. Просто добавьте, что если GetClosestEnemy(Enemys) приводит к нулю, вы устанавливаете скорость на 0, чтобы остановить движение.

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