у меня проблемка небольшая.
У меня есть 2 скрипта:
В чем заключается сама проблема.
При нанесении урона по 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...
У тебя в Update в скрипте Bullet вызывается HiTarget() много раз, когда условие по расстоянию пройдет, в этот и каждый последующий кадр наносится дамаг до тех пор пока цель не умрет. Тебе надо либо выключить/удалить Bullet, либо пометить ему состояние попал, и больше не вызывать HiTarget().
p.s. Ну или просто раскомментируй строчку // Destroy(gameObject);
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Взялся за изучение NetCoreЗахотел проверить самописное WebApi на простых запросах используя JavaScript
Есть у меня UserControl под именем PinВнутри него есть несколько элементов Path