262 |
С т р а н и ц а
//
сфера, с которой вы сталкиваетесь, чтобы нанести урон
UPROPERTY(VisibleDefaultsOnly, BlueprintReadOnly, Category = Collision)
USphereComponent* ProxSphere;
UFUNCTION(BlueprintNativeEvent, Category = Collision)
void Prox( AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool
bFromSweep, const FHitResult & SweepResult );
};
Класс ABullet имеет пару важных элементов:
Переменная типа float для урона, который наносит пуля при контакте
Переменная Mesh для тела пули
Переменная ProxSphere, чтобы определять, когда пуля попала во
что-то
Функция для запуска, когда Prox замечен
рядом с объектом
Конструктор для класса ABullet должен иметь инициализацию переменной Mesh и
переменной ProxSphere. В конструкторе мы устанавливаем, что RootComponent
будет переменная Mesh, а затем добавим переменную ProxSphere к переменной
Mesh. Переменная ProxSphere будет использоваться для проверки столкновения, а
проверка столкновения для переменной Mesh должна быть выключена, как
показано в следующем коде:
ABullet::ABullet(const class FObjectInitializer& PCIP) : Super(PCIP)
{
Mesh = PCIP.CreateDefaultSubobject
(this, TEXT("Mesh"));
RootComponent = Mesh;
ProxSphere = PCIP.CreateDefaultSubobject(this, TEXT("ProxSphere"));
ProxSphere->AttachTo( RootComponent );
ProxSphere->OnComponentBeginOverlap.AddDynamic( this, &ABullet::Prox );
Damage = 1;
}
В конструкторе мы присвоили начальное значение 1, переменной Damage (урон).
Но его можно изменять в редакторе UE4, как только мы создадим блупринт класса
ABullet. Далее функция ABullet::Prox_Implementation() должна работать с уроном
актора, получившего удар, если мы сталкиваемся с другим актором от
RootComponent, используя следующий код:
void ABullet::Prox_Implementation( AActor* OtherActor, UPrimitiveComponent* OtherComp, int32
OtherBodyIndex, bool bFromSweep, const FHitResult &SweepResult )
{
if( OtherComp != OtherActor->GetRootComponent() )
{
//
не сталкиваемся ни с чем другим
//
кроме актора root component
return;
}
OtherActor->TakeDamage( Damage, FDamageEvent(), NULL, this );
Destroy();
}