181 |
С т р а н и ц а
Внутри вашего файла класса NPC.h, добавьте следующий код, чтобы объявить
ProxSphere и UFUNCTION названную Prox:
UCLASS()
class GOLDENEGG_API ANPC : public ACharacter
{
GENERATED_UCLASS_BODY()
//
Это сообщение NPC, которое он должен сказать нам.
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = NPCMessage)
FString NpcMessage;
//
Сфера, с которой может сталкиваться игрок, чтобы
получить предмет
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Collision)
TSubobjectPtr
ProxSphere;
//
Соответствующее тело этой функции это
// ANPC::Prox_Implementation, __
не__ ANPC::Prox()!
//
Это немного странно и не то, что вы ожидали,
//
но это случается, потому что это BlueprintNativeEvent (родное событие схемы (blueprint))
UFUNCTION(BlueprintNativeEvent, Category = "Collision")
void Prox( AActor* OtherActor, UPrimitiveComponent* OtherComp, int32
OtherBodyIndex, bool bFromSweep, const FHitResult & SweepResult );
};
Выглядит немного запутанно, но на самом деле не так всё сложно. Здесь мы
объявляем дополнительную сферу объёма границ, названную ProxSphere, которая
выявляет, когда игрок находится рядом с NPC.
В файле NPC.cpp, нам нужно добавить следующий код, чтобы завершить
выявление близости:
ANPC::ANPC(const class FPostConstructInitializeProperties& PCIP) :
Super(PCIP)
{
ProxSphere = PCIP.CreateDefaultSubobject(this,
TEXT("Proximity Sphere"));
ProxSphere->AttachTo( RootComponent );
ProxSphere->SetSphereRadius( 32.f );
//
Код для запуска ANPC::Prox(), когда эта сфера приближения
//
пересекается с другим актором.
ProxSphere->OnComponentBeginOverlap.AddDynamic( this, &ANPC::Prox );
NpcMessage = "Hi, I'm Owen";//
сообщение по умолчанию, может быть отредактировано
//
в blueprint
}
//
Обратите внимание! Хотя это ANPC::Prox() и было объявлено в заголовочном файле,
//
теперь это вот здесь ANPC::Prox_Implementation.
void ANPC::Prox_Implementation( AActor* OtherActor, UPrimitiveComponent*
OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult &
SweepResult )
{
//
Здесь наш код будет выполнять то, что будет происходить
//
при пересечении
}