Полезное

Мы Вконтакте

Discord канал

#
Аватара пользователя
Пользователь
Сообщения: 20
Добрый день.
Нужно переписать данный блок блупринт на С++. Логика такая, что каждый враг, зашедший в радиус башни, попадает в массив этой башни. К примеру, если идет 1 враг по полю, и попадает в поле 4 башен, то в массиве каждой башни будет 1 элемент - этот враг.

Изображение

С OnComponentBeginOverlap и OnComponentEndOverlap разобрался. Остались два вопроса:
  • Как реализовать "Cast To Enemy"?
  • Массив в БП состоит из Enemy Object References, как это сделать на C++?

Код:
TArray<AEnemy*> arrayOfEnemy; // Такой массив нужен ?

// На примере входа в коллизию
void ATower::OnOverlapBegin(UPrimitiveComponent * OverlappedComp, AActor * OtherActor, UPrimitiveComponent * OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult & SweepResult)
{
   if (OtherActor && (OtherActor != this) && OtherComp)
   {
      AEnemy *enemy = Cast<AEnemy>(OtherActor); // Правильный ли каст?
      this->arrayOfEnemy.Add(enemy);
   }
}
Аватара пользователя
Пользователь
Сообщения: 195
правильно.. только надо так
Код:
AEnemy * enemy = Cast< AEnemy >( OtherActor );
if( enemy )
    arrayOfEnemy.Add( enemy );
Аватара пользователя
Пользователь
Сообщения: 20
Благодарю, это то, что нужно. Однако что делает эта проверка?
Аватара пользователя
Пользователь
Сообщения: 195
если объект не класс AEnemy, то каст вернёт nullptr и ты его благополучно добавишь в массив, если не проверить на валидность. Если есть сомнения всегда проверяй указатели на валидность или будут краши.
Аватара пользователя
Пользователь
Сообщения: 20
Воот, благодарю. Не мог понять, откуда у меня NULL в массивах валяется...


Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6

UEngine.ru © 2017
Все права защищены. При копировании материалов с сайта, ссылка на первоисточник обязательна.
Яндекс.Метрика
Главная страница