Четверг, 29 Октября 2020, 20:41

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Модератор форума: beril  
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Уничтожение определенного объекта
Уничтожение определенного объекта
ZekkinДата: Суббота, 19 Марта 2016, 18:35 | Сообщение # 1
частый гость
Сейчас нет на сайте
Всем привет. Подскажите, что нужно добавить в код:
Код
using UnityEngine;
using System.Collections;

public class MobsHP : MonoBehaviour {

    public static int health;
    public int healthMax;
    

    void Start () {

  health = healthMax;
    }
    
    // Update is called once per frame
    void Update () {
  if (health <= 0)
      Destroy (gameObject);
    }
}

На данный момент когда health опускается до 0 умирают все враги с этим скриптом. Как можно отнять health только у атакуемого врага? Спасибо.


Сообщение отредактировал Zekkin - Суббота, 19 Марта 2016, 18:35
LertmindДата: Суббота, 19 Марта 2016, 18:46 | Сообщение # 2
заслуженный участник
Сейчас нет на сайте
Уберис static из "public static int health;", иначе поле health общее для всех врагов и очевидно умирают все.
ZekkinДата: Суббота, 19 Марта 2016, 18:49 | Сообщение # 3
частый гость
Сейчас нет на сайте
В таком случае при выполнении такого скрипта у другого юнита:
Код
if (Vector3.Distance (transform.position, target.transform.position) < (MoveMobs.attackDistance) && (qw == false)) {
   MobsHP.health -= damage;
   Debug.Log("attack");
   qw = true;
  }

Появляется ошибка:
Код
Assets/Script/Mobs/MoveMobs.cs(37,49): error CS0120: An object reference is required to access non-static member `MobsHP.health'

Что ему не нравиться я не понимаю wacko
LertmindДата: Суббота, 19 Марта 2016, 18:59 | Сообщение # 4
заслуженный участник
Сейчас нет на сайте
Потому что так "ИмяКласса.поле" можно использовать только статические переменные, тебе нужен экземпляр класса, точнее нужно получить компонент. Если target - это GameObject врага, тогда надо target.GetComponent<MobsHP>().health -= damage;

Добавлено (19 марта 2016, 18:59)
---------------------------------------------
Советую почитать что-нибудь по C#, потому что у тебя проблемы с базовыми знаниями.

ZekkinДата: Суббота, 19 Марта 2016, 19:00 | Сообщение # 5
частый гость
Сейчас нет на сайте
Благодарю, теперь буду знать =)
Почитаю. До этого момента работал с Паскалем, недавно перешел на С#. Осваиваюсь.


Сообщение отредактировал Zekkin - Суббота, 19 Марта 2016, 19:03
LertmindДата: Суббота, 19 Марта 2016, 19:13 | Сообщение # 6
заслуженный участник
Сейчас нет на сайте
Ещё один совет: расточительно делать проверки в Update(), в данном случае можно добавить в MobsHP метод:
Код
void ApplyDamage(int hp) {
  health -= hp;
  if (health <= 0)
      Destroy (gameObject);
}

А в скрипте где надо нанести урон:
Код
MobsHP mhp = target.GetComponent<MobsHP>();
mhp.ApplyDamage(100);


Сообщение отредактировал Lertmind - Суббота, 19 Марта 2016, 19:13
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Уничтожение определенного объекта
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2020
free games download
Рейтинг