Как взаимодействовать с актером, установив указатель на OnComponentBeginOverlap на игрока-актера? - PullRequest
0 голосов
/ 11 мая 2019

Моя цель заключается в том, чтобы получить доступ к функции "объекта субъекта двери" из кода моего "объекта субъекта персонажа игрока", например, чтобы открыть или закрыть дверь.

Было бы замечательно, если бы кто-то мог исправить мою попытку или узнать подобное или лучшее решение.

Это код от "двери":

#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();

    }


}

Когда это сработает, должна быть запущена функция объекта субъекта двери.

...