Форум программистов, компьютерный форум, киберфорум
Unity, Unity3D
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 28.11.2015
Сообщений: 79
1

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

18.05.2018, 20:25. Просмотров 770. Ответов 3
Метки нет (Все метки)


Здравствуйте, у меня проблемка небольшая.

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

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

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

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

Enemy - script (исп. методы TakeDamage() , Die() )
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
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) //время поворота обьекта enemy
        {
            NextWayPoint();
        }
    }
 
    void NextWayPoint()
    {
        if(waveWayPointIndex >= Waypoints.waypoint.Length - 1 )
        {
            EndPath();
            return;
        }
        waveWayPointIndex++;
        target = Waypoints.waypoint[waveWayPointIndex];
    }
    void EndPath()
    {
        PlayerStat.Lives--;
        Destroy(gameObject);
    }
}
Bullet - script (исп. методы Damage() , HitTarget() )
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
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);
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.05.2018, 20:25
Ответы с готовыми решениями:

Компьютер сразу убивает жесткие диски
Добрый день! Компьютер моментально убивает жесткий диск. Никаких звуков нет. Винда долго...

Вместо одного отображаются сразу 2 AlertDialog
Доброго времени суток! у меня есть 2 Диалога, первый вызывается из класса конструктора. Второй...

Вместо webmail.ru сразу грузится mail.qip.ru
Такое совсем не нужно. Что сделать что бы такого не происходило? Браузер Мазила или Интернет...

Поделитесь технологией нанесения надписей на платы.
Поделитесь технологией нанесения надписей на платы. Т.е. логотипа и подписи пинов. Хочу на...

3
34 / 30 / 8
Регистрация: 22.02.2017
Сообщений: 404
19.05.2018, 19:55 2
42 строка, ты уничтожаешь объект в который попал.
0
135 / 130 / 43
Регистрация: 07.11.2017
Сообщений: 553
21.05.2018, 12:18 3
Цитата Сообщение от pro100suxx Посмотреть сообщение
Damage(target);
* * * *// Destroy(gameObject);
мне кажется ваша пуля наносит урон несколько раз.
выведите в лог действия ее...

и пулю вы не удаляете?
0
281 / 232 / 125
Регистрация: 24.12.2014
Сообщений: 702
21.05.2018, 16:13 4
Цитата Сообщение от pro100suxx Посмотреть сообщение
if(diraction.magnitude <= distanceframe) { HiTarget(); return; }
Возможно, нужно в этот блок добавить "target = null", так я здесь увидел только это условие, которое убирает объект и сам скрипт:
C#
1
2
3
4
5
if(diraction.magnitude <= distanceframe) {
    HiTarget();
    target = null; // после нанесения урона этот участок кода больше не будет срабатывать.
    return;
}
Другими словами с логики скрипта нанесение урона будет продолжаться, пока есть цель.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.05.2018, 16:13

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Комп не включается после нанесения термопасты
У друга стал комп греться и вырубаться я предложил пасту поменять, снял проц, старую не затер и...

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

Вместо приложения скачалось что-то с длинным именем, сразу переместилось вникуда, завладело всеми процессами компьютера
Вместо приложения скачалось что-то с длинным именем, сразу переместилось вникуда, завладело всеми...

Нанесение урона
Есть скрипт Gun с методом shoot и скрипт EnemyController с методом hurt. Как сделать так, чтоб...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.