Вместо нанесения урона непосредственно убивает (единство) - PullRequest
0 голосов
/ 18 мая 2018

У меня небольшая проблема.

У меня есть 2 сценария:

  1. Это Враг (Враг)
  2. Это Пуля (пуля)

В чем сама проблема?

Нанося урон врагу, я не убиваю определенное количество жизней, и враг сразу же умирает от одного выстрела.Я не могу понять, почему он умирает от одного выстрела.Когда я нанесу ему урон, чтобы убить ... Пожалуйста, помогите.Извините за мой плохой английский.

Bullet - скрипт (используйте метод Damage (), HitTarget ()).У метода может быть проблема Damage () - я не знаю.

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

public class bullet : MonoBehaviour {

private Transform target;
public GameObject impactEffect;
public float speed  = 70f;
public int damage = 50;
public void Seek(Transform itarget)
{
    target = itarget;

}




// Update is called once per frame
void Update () {
    if (target == null)
    {
        Destroy(gameObject);
            return;
    }
    Vector3 diraction = target.position - transform.position;
    float distanceframe = speed *Time.deltaTime;
    if(diraction.magnitude <= distanceframe)
    {
        HiTarget();
        return;
    }
    transform.Translate(diraction.normalized * distanceframe, Space.World);
    transform.LookAt(target);
}
void HiTarget()
{
    GameObject effect = (GameObject)Instantiate(impactEffect, transform.position, transform.rotation);
    Destroy(effect, 1f);

    Damage(target);
   // Destroy(gameObject);
}
void Damage(Transform enemy)
{
    Enemy e = enemy.GetComponent<Enemy>();
    if (e != null)
    {
        e.TakeDamage(damage);
    }


    //Destroy(enemy.gameObject);
}
}

Enemy - скрипт (используйте метод TakeDamage (), Die ())

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

public class Enemy : MonoBehaviour {

public float speed = 10f;

private int health;
public int startHealth = 100;
private bool isDead = false;

private Transform target;
private int waveWayPointIndex = 0;

void Start()
{
    health = startHealth;
    target = Waypoints.waypoint[0];
}

public void TakeDamage(int amount)
{
    health -= amount;
    if (health <= 0 && !isDead)
    {
        Die();
    }


}
void Die()
{
    isDead = true;
    Destroy(gameObject);
}
void Update()
{

    Vector3 diraction = target.position - transform.position; //от одной 
    позиции мы поворачиваемся к другой 
    transform.Translate(diraction.normalized * speed * 
Time.deltaTime,Space.World); // переводим со скоростью

    if (Vector3.Distance(transform.position,target.position)<= 0.4f) 
    {
        NextWayPoint();
    }
}

void NextWayPoint()
{
    if(waveWayPointIndex >= Waypoints.waypoint.Length - 1 )
    {
        EndPath();
        return;
    }
    waveWayPointIndex++;
    target = Waypoints.waypoint[waveWayPointIndex];
}
void EndPath()
{
    PlayerStat.Lives--;
    Destroy(gameObject);
}
}

Я более склонен к ошибке в скрипте Bullet ...

1 Ответ

0 голосов
/ 18 мая 2018

потому что вы наносите урон в Update, вызывая HiTarget, который вызывает Damage, поэтому каждый раз его вызывают frame и ваш враг быстро умирает.
вы можете установить boolean, чтобы увидетьесли функция уже вызвана или нет, если она не вызывается, то перед вызовом установите для логического значения значение true, затем вызовите ее, например, она будет вызываться только один раз.
это не лучший подход, но он решит проблему.ваша проблема.

  int called=false;
    void Update () {
        if (target == null)
        {
            Destroy(gameObject);
                return;
        }
        if(!called){    
          checkForTarget()
        }
    }
    void checkForTarget(){
    Vector3 diraction = target.position - transform.position;
        float distanceframe = speed *Time.deltaTime;
        if(diraction.magnitude <= distanceframe)
        {
            called = true;
            HiTarget();
            return;
        }
        transform.Translate(diraction.normalized * distanceframe, Space.World);
        transform.LookAt(target);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...