월 39,600원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
Cast함수 문법
Owner = Cast<ACharacter>(GetOwningActor()); if (Owner) { Movement = Owner->GetCharacterMovement(); }블프에서 캐스트를 당연한게 늘썼는데,코드에서 보니 반가워서 생략된건가싶어,Owner =ACharacter* Cast<ACharacter>(GetOwningActor());라고 쓰니까 에러가 납니다. F12눌럿 보니, FORCEINLINE To* Cast(From* Src)로 되있는데, 왜 지금은 자료형을 표시안하는게 맞나요?
- 미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
GenerateVisualStudio메뉴와 폴더관리,개별강의공부문의
안녕하세요.제너레이트와 스위치메뉴가 있었는데,어느순간부터 메뉴가 안보이는거같습니다. 이경우는 언리얼을 다시 설치하나요? 비주얼스튜디오를 다시 설치하나요? 폴더위치를 잘못 넣은경우는 비주얼스튜디오에서 폴더만들어 이동하면되나요? Saved,DDC,Intermediate 는 지워도 되는폴더들이라고 알고있는데, 꼬여서 지우는경우에,언리얼에서 재빌드하라고 뜨고 uproject는 안열리고,비주얼스튜디오는 코드파일들이 안읽히는 경우는 어떻게 하면될까요? 위의 과정들로 프로젝을 몇번을 다시 만들어서 깃에 멀쩡할때 소스코드를 올려백업하고싶은데,로드맵강좌중에 관련강좌가있을까요? 매회차 강의내용이 많은편이라, 강의가 한번 넘어갈때마다 코드내용이 두배이상 늘고,바뀌는거같아, 꼬이면,다시 처음부터 만듭니다ㅠ 5강까지 공부했다가,필요한 부분이 있어서 다시 첫강부터 하고있는데, 이젠 공부롤백때문에 다음강으로 넘어가기가 약간 두려워집니다. 만약 필요한 회차의 강의만 독립적으로 복습하고싶다면,가능할까요? 누적되는 내용들이 연결되있어서 지금은 불가능해보이긴 합니다.
- 미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
ClassFinder 질문
ClassFinder 사용 중 궁금한 점이 생겼습니다.경로를 지정할 때 클래스일 경우 _C를 마지막에 붙여야 하는 것으로 배웠고 잘 사용하고있었습니다 🙂 다만 갑자기 궁금한 점은 ABGameMode.cpp에선 DefaultPawnClassRef와 PlayerControllerClassRef의 경로엔 _C를 안붙여야 WorldSetting이 제대로 세팅 되는 것을 볼 수 있는데 위 상황 때문에, 어떠한 점을 기준으로, 클래스 레퍼런스 중에서도 경로에 _C를 붙여야할지 혹은 말아야할지 헷갈리게 되었습니다.. ㅠ
- 미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
Parallel 컴포짓의 태스크 실행 질문..
Main 인 Attack task는 Inprogress 반환이라도 딱 한번만 호출되는데요. 같이 실행되는 TurnToTarget task는 Succeeded를 반환해도 매 프레임 여러 번 호출되는 것 같습니다. 여기서 어떤 규칙이 있는 건가요??Parallel 컴포짓이 main task가 inprogress 일 동안에는매 프레임 sub task 의 ExecuteTask()를 호출 하는 방식인가요??
- 미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
37:24 오류질문드립니다
안녕하세요! 교수님! 강의 잘 듣고있습니다!37:24까지 강의를 듣고 빌드 후Ctrl+F5키를 눌러서 엔진 실행하기전에 이런 메세지가 나오며,실제 게임 실행할때도 움직이지가 않습니다 ㅜ 저 경로에서 찾을수없는것같은데.. 어떻게 해결하면될까요..? 에디터 5.1버전이고 코드 똑같이 복붙해도 안됩니다..
- 미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
boolean 변수가 변경되는 이유를 모르겠습니다.
<#include "Item/ABItemBat.h"#include "Components/BoxComponent.h"#include "Components/StaticMeshComponent.h"#include "Particles/ParticleSystemComponent.h"#include "Physics/WMACollsion.h"#include "Interface/ABCharacterItemInterface.h"#include "Character/WMACharacterPlayer.h"#include <GameData/WMAGameInstance.h>#include "Blueprint/UserWidget.h"#include "Components/WidgetComponent.h"#include "UI/WMAItemInteractionWidget.h"#include "Interface/ABCharacterItemInterface.h"// Sets default valuesAABItemBat::AABItemBat(){ Trigger = CreateDefaultSubobject<UBoxComponent>(TEXT("TriggerBox")); Mesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("Mesh")); Effect = CreateDefaultSubobject < UParticleSystemComponent>(TEXT("Effect")); TextE = CreateDefaultSubobject<UWidgetComponent>(TEXT("TextE")); Item = CreateDefaultSubobject<UABItemData>(TEXT("ItemBat")); static ConstructorHelpers::FClassFinder<UUserWidget>InputE(TEXT("WidgetBlueprint'/Game/UI/WBP_ItemInteraction.WBP_ItemInteraction_C'")); if (InputE.Succeeded()) { InteractionItemWidgetClass = InputE.Class; } RootComponent = Trigger; Mesh->SetupAttachment(Trigger); Effect->SetupAttachment(Trigger); Trigger->SetCollisionProfileName(CPROFILE_WMATRIGGER); Trigger->SetBoxExtent(FVector(11.0f, 10.0f, 110.0f)); Trigger->OnComponentBeginOverlap.AddDynamic(this, &AABItemBat::OnOverlapBegin); Trigger->OnComponentEndOverlap.AddDynamic(this,&AABItemBat::OnOverlapEnd); static ConstructorHelpers::FObjectFinder<UStaticMesh> BoxMeshRef(TEXT("/Script/Engine.StaticMesh'/Game/Item/Bat/Batfbx.Batfbx'")); if (BoxMeshRef.Succeeded()) { TempBoxMesh = BoxMeshRef.Object; Mesh->SetStaticMesh(BoxMeshRef.Object); } Mesh->SetRelativeLocation(FVector(0.0f, -3.5f, -20.0f)); Mesh->SetCollisionProfileName(TEXT("NoCollision")); bInteractionItem = false; PrimaryActorTick.bCanEverTick = true;}void AABItemBat::Tick(float DeltaTime){ Super::Tick(DeltaTime); //UE_LOG(LogTemp, Warning, TEXT("Character is Die :: %s"), bInteractionItem ? TEXT("true") : TEXT("false")); if (bInteractionItem) { Trigger->OnComponentBeginOverlap.AddDynamic(this, &AABItemBat::OnOverlapBegin); UE_LOG(LogTemp,Warning,TEXT("NO item Attach")) }}void AABItemBat::OnOverlapBegin(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepHitResult){ //TextE->SetHiddenInGame(false); if (InteractionItemWidgetClass) { ItemText = CreateWidget<UUserWidget>(GetWorld(), InteractionItemWidgetClass); if(ItemText) ItemText->AddToViewport(); } if (nullptr == Item) { Destroy(); return; } //UE_LOG(LogTemp, Warning, TEXT("Character is Die :: %s"), bInteractionItem ? TEXT("true") : TEXT("false")); if (bInteractionItem) { IABCharacterItemInterface* OverlappingPawn = Cast<IABCharacterItemInterface>(OtherActor); if (OverlappingPawn) { OverlappingPawn->TakeItem(Item); //TextE->SetHiddenInGame(true); } //Effect->Activate(true); Mesh->SetHiddenInGame(true); SetActorEnableCollision(false); Effect->OnSystemFinished.AddDynamic(this, &AABItemBat::OnEffectFinished); Trigger->OnComponentBeginOverlap.RemoveDynamic(this, &AABItemBat::OnOverlapBegin); }}void AABItemBat::OnOverlapEnd(UPrimitiveComponent* OverlappedComp, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex){ if (ItemText) { ItemText->RemoveFromViewport(); ItemText = nullptr; }}void AABItemBat::OnEffectFinished(UParticleSystemComponent* ParticleSystem){ Destroy();}void AABItemBat::StartInteractionItem(){ bInteractionItem = true;}void AABItemBat::StopInteractionItem(){ //bInteractionItem = false;}> 일단 WMACharacterplayer.cpp에서 StartInteractionItem()을 호출하는데는 문제가 없습니다. StartInteractionItem() 함수 내부에서 로그를 출력해보면 bInteractionItem이 true로 잘 출력이 되는 것을 확인할 수 있습니다. 문제는 Tick함수 내부와 OnOverlapBegin()함수 내부에서 로그를 찍어보면 bInteractionItem이 false로 변경되어서 OnOverlapBegin()함수를 호출하지 못하고 있는 상황입니다. 혹시 어느 부분이 문제가 되어 bool값이 변경되는지 여쭐수 있을까요?
- 미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
13:48경에 나오는 헤더 파일의 클래스 안에 ":" 키워드는 "="과 같다고 보면 되나요?
uint32 bUseControllerRotationYaw : 1이런 거요.
- 미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
npc와 player 에셋을 다른 것을 사용하는 경우
강의 시에는 npc와 플레이어가 같은 에셋을 사용해서 mesh등의 reference들을 사용할때 base에서 한번에 처리하는 식으로 되어있는데 만약 캐릭터 asset과 몬스터 asset이 다른 경우에는 base의 생성자에서 처리하는게 아닌 각각의 npc와 player의 코드에서 에셋 경로를 입력해 주어야하나요? 또 공격판정시에 플레이어가 총을 쏘고 몬스터는 근접공격을 한다할때 이 또한 둘의 판정을 각각의 코드에서 적어주는게 맞는건가요?
- 미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
캐릭터 애님블프변경
상속받은 블프-현재 플레이어로 쓰이는-에 skm,animBP를 바꿔보았습니다. 그냥 레벨에 두고,possess 0 이면,애니,카메라 잘 작동하는데, 게임모드를 사용하면,애니가 안되는이유가 뭘까요? 코드에서도 경로 수정한 상태입니다. 혹시나 애님블프가 문제일까해서 5마네킨 방식으로 다 고쳐도 그렇네요.(디버깅이 미숙해서,..결국은, 첨으로 자료 다운받아서 실행했습니다. 늘뜨던 두개의 fail도 없고,신기하네요...->근데,클래스추가하고나니,또 생겼습니다 ㅠ) [상담] 파트1의 메모리부분부터 정신이 탈출해서 잠깐 불붙이러 프레임웍으로 먼저 왔습니다. 낯익은 강의라 잠시 행복했는데, 4는 입력이 그닥 복잡하지않았던거같은데, 향상된 시스템에서 또 탈탈 털려서..멘탈 다시잡고 다음강의를 보고싶은데, 아무리 보고 따라코딩이지만, 직접 만든걸로 하는게 맞을까요?
- 미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
티맵 에러
Assertion failed: Pair != nullptr [File:C:\UE_Editor\UE_5.3\Engine\Source\Runtime\Core\Public\Containers\Map.h] [Line: 671]에러가 이렇게뜨고,디버깅을 하면, SetCharacterControl함수의 UEJCharacterControlData* NewCharacterControl = CharacterControlManager[NewCharacterControlType];check(NewCharacterControl);부분에서 에러가 나는걸로, 티맵값을 못받아오는거같은데요. .. 어떻게 하면될까요?
- 미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
캐릭터구현부 설정중에.
bUseControllerRotationPitch = false;바로 값할당 GetCapsuleComponent()->InitCapsuleSize(42.0f, 96.0f); 포인터로 부모의 멤버변수에 접근해서,초기화. 둘다, ACharacter에서 초기화(nullptr아닌)되어있는데, 왜 불회전변수는 바로 쓰고,다른 프로퍼티들은 저런 형태로 써야하나요?
- 해결됨이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
Constructorhelpers 크래시 관련 질문
안녕하세요 이득우 님, Constructorhelpers 관련해서 질문이 있어서 글을 올렸습니다.생성자에서 Constructorhelpers 를 사용해 에셋과 오브젝트를 불러오려고 하는데, 에디터가 75퍼센트까지 준비되다가 자꾸 멈춰 버립니다. 아래는 제가 사용한 Constructorhelpers 코드 전문입니다. 코드는 단순하게 제가 만든 캐릭터 베이스에서 메쉬와 애니메이션 클래스를 설정해 주는 것입니다.주석 처리를 통해 이 부분에서 오류가 나는 것을 확실히 확인 했습니다. 주석으로 처리하고 블루프린트에서 에셋을 설정해주면 잘 되거든요 .. (경로도 맞는 것 여러 번 확인 하였습니다.)static ConstructorHelpers::FClassFinder<UAnimInstance> AnimInstanceClassRef(TEXT("/Game/FirstPersonArms/Animations/FirstPerson_AnimBP.FirstPerson_AnimBP_C")); if (AnimInstanceClassRef.Class) { GetMesh()->SetAnimInstanceClass(AnimInstanceClassRef.Class); } static ConstructorHelpers::FObjectFinder<USkeletalMesh> CharacterMeshRef(TEXT("/Script/Engine.SkeletalMesh'/Game/FirstPersonArms/Character/Mesh/SK_Mannequin_Arms.SK_Mannequin_Arms'")); if (CharacterMeshRef.Object) { GetMesh()->SetSkeletalMesh(CharacterMeshRef.Object); } 이럴 때는 어떻게 해야 할지 궁금합니다.
- 미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
14강 게임플로우 다듬기 정리 이후 타임라인
안녕하세요제목 내용처럼 약 37분 쯤부터 화면 까만 상태로 48분까지 있던데 이거 정리에서 마무리 인사 하신게 끝난게 맞는거죠?
- 미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
불리언 선언
14:00 부분에서 uint32 크기로 불리언을 선언하셨는데 uint8로 선언하는 것과 차이점이 무엇인가요? uint8로 수정하여 실행해도 기능은 동일하게 작동되는 것을 보고 궁금증이 생겨 질문드립니다.
- 미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
인터페이스를 언제 써야할지 아직 감이 안잡히는데
안녕하세요 지금 언리얼 인터페이스를 활용해서 몇몇 데이터를 가져오는 식으로 강의를 작성해주셨는데 제생각에는 이런방식이디자인 패턴중에 있을 것 같은데 어떤 디자인패턴을 사용한건지 알려주실수 있나요?
- 미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
몽타주 슬롯에서 모션을 지우고 다시 추가하는 이유가 궁금합니다.
34:07 부분에서 교수님께서 슬롯을 DeadSlot으로 변경하신 후에 모션을 지우고, 다시 추가하시는데이렇게 하시는 이유가 궁금합니다! DefaultSlot에서 Dead 모션을 지우고 DeadSlot에 Dead 모션을 추가하는 과정인 건가요?그럼 슬롯을 바꿔도 모션이 그대로 있는 이유는 무엇인가요?
- 미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
소스코드에 관하여 질문드립니다.
안녕하세요. Part1을 완강하고 Part2를 수강하고 있는 비전공자 수강생입니다. 강의를 하실 때 13:45 처럼 함수 복붙 후 함수에 관해 설명해주시는 순서로 진행이 되는데 예를 들어 제가 캐릭터의 속도를 설정하는 함수를 찾고 싶다면 F12를 사용하여 관련 클래스의 코드를 탐색하는게 빠르고 정석적인 방법인가요? 언리얼 공식 문서로는 찾지 못하여 질문드립니다.
- 미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
9강 랜덤박스 문제
코드는 강의자료를 통해서 작성하였는데 랜덤박스에 weapon이 들어가있는 것을 확인하려고 하는데 이상하게 weapon이 item으로 생성이 되지않습니다. 단순 운 문제인가 진행해보아도 scroll과 potion만 아이템 박스에 담깁니다.
- 미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
Collision 관련 감지 문제에 대한 질문입니다
void AABCharacterBase::NotifyHitCheck() { //const float AttackRange = CharacterStatComponent->GetTotalStat().AttackRange; const float AttackRange = 1000.f; const float AttackRadius = 50.f; const float AttackDamage = CharacterStatComponent->GetTotalStat().AttackDamage; const FVector Start = GetActorLocation() + GetActorForwardVector() * GetCapsuleComponent()->GetScaledCapsuleRadius(); const FVector End = Start + GetActorForwardVector() * AttackRange; FCollisionQueryParams Params(SCENE_QUERY_STAT(Attack), true, this); TArray<FHitResult> HitResults; bool bHitResult = GetWorld()->SweepMultiByChannel(HitResults, Start, End, FQuat::Identity, ECollisionChannel::ECC_GameTraceChannel1, FCollisionShape::MakeCapsule(AttackRadius, AttackRange * 0.5f), Params); //bool bHitResult = GetWorld()->SweepMultiByObjectType(HitResults, Start, End, FQuat::Identity, FCollisionObjectQueryParams::AllDynamicObjects, FCollisionShape::MakeCapsule(AttackRadius, AttackRange * 0.5f), Params); //bool bHitResult = GetWorld()->SweepMultiByProfile(HitResults, Start, End, FQuat::Identity, TEXT("ABCapsule"), FCollisionShape::MakeCapsule(AttackRadius, AttackRange * 0.5f), Params); if (bHitResult) { for (const auto& HitResult : HitResults) { FDamageEvent DamageEvent; HitResult.GetActor()->TakeDamage(AttackDamage, DamageEvent, GetController(), this); } } #if ENABLE_DRAW_DEBUG FVector CapsuleOrigin = Start + (End - Start) * 0.5f; float CapsuleHalfHeight = AttackRange * 0.5f; DrawDebugLine(GetWorld(), Start, End, FColor::Purple, false, 2.f); FColor Color = FColor::Red; if (bHitResult) { if (HitResults.Num() > 2) { Color = FColor::Cyan; } else if (HitResults.Num() > 1) { Color = FColor::Magenta; } else if (HitResults.Num() > 0) { Color = FColor::Green; } } DrawDebugCapsule(GetWorld(), CapsuleOrigin, CapsuleHalfHeight, AttackRadius, FRotationMatrix::MakeFromZ(GetActorForwardVector()).ToQuat(), Color, false, 1.f); #endif } Collision 을 채널 또는 프로파일로 할 경우 아래와 같이 가장 가까운 물체만 충돌감지를 합니다. (초록색의 경우 1개만 감지했을때)Collision 을 오브젝트 타입으로 할 경우 위와 같은 문제가 발생하지 않습니다. (청록색의 경우 3개 이상 감지 했을때)왜 이러나 디버깅을 해보려 하였는데 내부 구현이 전부 템플릿으로 되어있어 디버깅이 어렵더라고요... 하여 혹시나 위의 문제가 왜 발생하는건지 아시는지 궁금하여 질문드려봅니다.확인차 강의에서 제공되는 샘플코드에서도 테스트를 해봤는데 위와 같은 문제가 똑같이 발생하네요. Sweep 이 아닌 LineTrace 일때도 결과는 똑같았습니다.
- 미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
OnComponentBeginOverlap 바인드
// Fill out your copyright notice in the Description page of Project Settings. #pragma once #include "CoreMinimal.h" #include "GameFramework/Character.h" #include "ABCharacterNPC.generated.h" UCLASS() class INFINITEABYSS_API AABCharacterNPC : public ACharacter { GENERATED_BODY() public: AABCharacterNPC(); protected: UPROPERTY(VisibleAnywhere, Category = NPC, Meta = (AllowPrivateAccess = "true")) TObjectPtr<class UStaticMeshComponent> NPC; UPROPERTY(VisibleAnywhere, Category = NPC, Meta = (AllowPrivateAccess = "true")) TObjectPtr<class UBoxComponent> NPCTrigger; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Collision") bool bIsOverlapping; UFUNCTION() void OnBoxTriggerBeginOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepHitResult); };헤더 파일에 이렇게 선언 한 다음// Fill out your copyright notice in the Description page of Project Settings. #include "NPC/ABCharacterNPC.h" #include "Components/BoxComponent.h" #include "Components/CapsuleComponent.h" #include "Components/PrimitiveComponent.h" #include "Physics/ABCollision.h" // Sets default values AABCharacterNPC::AABCharacterNPC() { bUseControllerRotationPitch = false; bUseControllerRotationYaw = false; bUseControllerRotationRoll = false; GetCapsuleComponent()->InitCapsuleSize(42.0f, 96.0f); GetCapsuleComponent()->SetCollisionProfileName(TEXT("NPC")); GetMesh()->SetRelativeLocationAndRotation(FVector(0.0f, 0.0f, -95.0f), FRotator(0.0f, 0.0f, 0.0f)); GetMesh()->SetAnimationMode(EAnimationMode::AnimationBlueprint); GetMesh()->SetCollisionProfileName(TEXT("NPCMesh")); static ConstructorHelpers::FObjectFinder<USkeletalMesh> NPCMeshRef(TEXT("/Script/Engine.SkeletalMesh'/Game/ExternAssets/MedievalGirl/Mesh/SK_MedievalGirl.SK_MedievalGirl'")); if (NPCMeshRef.Object) { GetMesh()->SetSkeletalMesh(NPCMeshRef.Object); } static ConstructorHelpers::FClassFinder<UAnimInstance> AnimInstanceClassRef(TEXT("Game/ExternAssets/MedievalGirl/Demo/Animations/ThirdPerson_AnimBP.ThirdPerson_AnimBP_C")); if (AnimInstanceClassRef.Class) { GetMesh()->SetAnimInstanceClass(AnimInstanceClassRef.Class); } NPCTrigger = CreateDefaultSubobject<UBoxComponent>(TEXT("NPCTrigger")); NPCTrigger->SetBoxExtent(FVector(100.0f, 100.0f, 100.0f)); NPCTrigger->SetRelativeLocation(FVector(0.0f, 0.0f, 50.0f)); NPCTrigger->SetupAttachment(GetMesh()); NPCTrigger->SetCollisionProfileName(CPROFILE_ABTRIGGER); NPCTrigger->OnComponentBeginOverlap.AddDynamic(this, &AABCharacterNPC::OnBoxTriggerBeginOverlap); UE_LOG(LogTemp, Log, TEXT("NPC Trigger event binding: %s"), NPCTrigger->OnComponentBeginOverlap.IsBound() ? TEXT("Success") : TEXT("Failed")); bIsOverlapping = false; } void AABCharacterNPC::OnBoxTriggerBeginOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepHitResult) { UE_LOG(LogTemp, Log, TEXT("%s"), *OtherActor->GetName()); bIsOverlapping = true; }Cpp 파일에 OnBoxTriggerBeginOverlap를 바인드 해서 사용할려는데 로그로 바인드는 되었다고 뜨는데 함수안에 있는 로그는 왜 안찍히는 건가요?