Моя цель заключается в том, чтобы получить доступ к функции "объекта субъекта двери" из кода моего "объекта субъекта персонажа игрока", например, чтобы открыть или закрыть дверь.
Было бы замечательно, если бы кто-то мог исправить мою попытку или узнать подобное или лучшее решение.
Это код от "двери":
#include "DefaultDoorRotator.h"
#include "FPSCharacter.h"
void ADefaultDoorRotator::OnOverlapBegin(UPrimitiveComponent* OverlapComponent, AActor* OtherActor, UPrimitiveComponent* OtherComponent, int32 OtherBodyIndex, bool bFromSweepm, const FHitResult& SweepResult)
{
if (player_controled_door)
{
if (OtherActor != nullptr)
{
if ((OtherActor->GetClass()->GetDefaultObject<AFPSCharacter>()!=0))
{
OtherActor->GetClass()->GetDefaultObject<AFPSCharacter>()->set_interaction_object(ActionComponent);
GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Yellow, TEXT("Registered Door on Player!"));
}
}
}
}
Здесь от игрока:
#include "FPSCharacter.h"
#include "DefaultDoorRotator.h"
USceneComponent* object_for_interaction;
UFUNCTION()
void set_interaction_object(USceneComponent* obj)
{
if (obj != 0)
{
object_for_interaction = obj;
}
}
void AFPSCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
PlayerInputComponent->BindAction("CharacterInteract", IE_Pressed, this, &AFPSCharacter::Interaction_start);
}
void AFPSCharacter::Interaction_start()
{
want_to_interact = true;
GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Yellow, TEXT("Want to interact!"));
if (object_for_interaction != 0)
{
GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Yellow, TEXT("Begin to interact!"));
object_for_interaction->GetClass()->GetDefaultObject<ADefaultDoorRotator>()->ToggleDoor();
}
}
Когда это сработает, должна быть запущена функция объекта субъекта двери.