Получение GameObject из новых встреч с врагом - PullRequest
0 голосов
/ 29 августа 2018

Как можно получать игровой объект от врага при каждом новом столкновении? Это не то, что я могу подключить к инспектору Unity. У меня нет написанного кода, потому что я не знаю, с чего начать. Что я думаю, я знаю до сих пор:

Мне понадобится переменная, которая может хранить игровой объект, но что происходит, когда встречается несколько врагов?

 GameObject getEnemy;

Я, вероятно, настрою коллайдер на срабатывание при обнаружении врагов. Теперь я хочу хранить GameObject.

 getEnemy = getComponent<GameObject>();

Но это не работает. Кто-нибудь знает почему?

************************* Фактический код (не работает) ************** ********* (Имя класса EnemyDetection)

  public static GameObject enemyObj;

  void OnTriggerEnter(){


   enemyObj = other.GetComponent<GameObject>(); //Grabs enemy object to pass 
                                                 to the enemies class

    }

(Враги имени класса)

public void OnCollisionEnter(Collision collision)
{
    if (collision.collider.tag == "Bullet")
    {
        GameObject en = EnemyDetection.enemyObj;

        Hp -= 25;

        Debug.Log("Hit! HP left " + Hp);
        if ( Hp <= 0)
        {
           Destroy(en); // Destroys GameObject
        }
    }
}

1 Ответ

0 голосов
/ 29 августа 2018

Вы рядом.

Как уже упоминалось в комментариях GameObjects - это вещи, которые содержат Components, поэтому вы делаете GetComponent<SomeComponent>, чтобы получить компоненты игрового объекта, а не сам игровой объект

Что касается вашего случая. Внутри вашего триггера вы получите игровой объект от переданного объекта Collider

//Or whatever callback you are using
void OnTriggerEnter(Collider other)
{
    //this "other" contains the gameobject as reference
    getEnemy = other.gameObject;

    //if now you need components from this then you do
    //example
    // other.gameObject.GetComponent<SomeComponent>();
}

Что касается множества врагов и т. Д., Вы можете просто сохранить их в списке или словаре.

EDIT

//INCORRECT (There is no such thing as GetComponent<GameObject>())
enemyObj = other.GetComponent<GameObject>();

//CORRECT
enemyObj = other.gameObject;

И ваш OnTriggerEnter должен иметь аргумент Collider

void OnTriggerEnter(Collider other)
{
    enemyObj = other.gameObject;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...