Вместо нанесения урона сразу убивает

191
25 мая 2018, 23:50

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

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

  1. Это Enemy(враг)
  2. Это Bullet(пуля)

В чем заключается сама проблема.

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

Bullet - script (исп. методы 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 - script (исп. методы 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...

Answer 1

У тебя в Update в скрипте Bullet вызывается HiTarget() много раз, когда условие по расстоянию пройдет, в этот и каждый последующий кадр наносится дамаг до тех пор пока цель не умрет. Тебе надо либо выключить/удалить Bullet, либо пометить ему состояние попал, и больше не вызывать HiTarget().

p.s. Ну или просто раскомментируй строчку // Destroy(gameObject);

READ ALSO
Как отправить корректно POST запрос на WebApi C#?

Как отправить корректно POST запрос на WebApi C#?

Взялся за изучение NetCoreЗахотел проверить самописное WebApi на простых запросах используя JavaScript

203
WPF hitTest на сам UserControl

WPF hitTest на сам UserControl

Есть у меня UserControl под именем PinВнутри него есть несколько элементов Path

196
Вывод записей с БД средствами PHP в стиле Masonry

Вывод записей с БД средствами PHP в стиле Masonry

предположим есть вот такая разметка HTML:

231