Actor通信
类型转换
- C++类型转换:dynamic_cast<>
- UE类型转换:Cast<>
在UE的Actor中内置了虚函数NotifyActorBeginOverlap/NotifyActorEndOverlap。在继承Actor后,我们可以重写这两个虚函数实现Actor间的自定义通信。以Fire Actor为例,当 OtherActor与Fire Actor重叠后,Fire Actor将会通过类型转换和条件判断确定该Actor是否是某个特定类型,进而实现下一步的逻辑。
//Fire.h
protected:
virtual void NotifyActorBeginOverlap(AActor* OtherActor) override;
virtual void NotifyActorEndOverlap(AActor* OtherActor) override;
//Fire.cpp
void AFire::NotifyActorBeginOverlap(AActor* OtherActor)
{
Super::NotifyActorBeginOverlap(OtherActor);
if(AFPSController* Controller = Cast<AFPSController>(OtherActor))
{
Controller->PlayerInFire();//damage...
}
}
void AFire::NotifyActorEndOverlap(AActor* OtherActor)
{
Super::NotifyActorEndOverlap(OtherActor);
if(AFPSController* Controller = Cast<AFPSController>(OtherActor))
{
Controller->PlayerOut