Character.cpp에 있는 PhysicsHandle 을 MovableObject로 매개변수로 넘겨주고 싶은데,
InteractableObject는 Interact()로 시작하는데
Interact() 에 PhysicsHandle을 넘겨주면...
PhysicsHandle은 Movable에서만 쓰이는데 Interact로 넘겨주면 좀 그렇지 않나?!
1. 보이드 포인터 사용 (C++이라서 언리얼은 못 쓸지도?)
2. 완전 베이스 클래스를 넣어라 (?)
매개변수로 베이스 클래스를 넣어서
필요한 곳에서 필요한 형태로 캐스팅하기 (사람을 넣어서 아기, 학생, 어른 다 사용 가능하게)
3. Set 계열 함수 만들기
OnInteract에서 Interact() 외의 다른 함수 호출

Cast는 무조건 상속받은 애 (자식 클래스/서브클래스)만 쓸 수 있는데
사람 중에 여자인지 판단(cast), (여자가 아니거나 사람도 아니면 nullptr)
여자면 여자만 할 수 있는 여자화장실들어가기함수 사용할 수 있다!
3번 채택
캐릭터.cpp
void AHamsterDemoCharacter::OnInteract()
{
if (isSuccessInteract)
{
UE_LOG(LogTemp, Log, TEXT("E pressed"));
if (InteractableObj != nullptr)
{
UE_LOG(LogTemp, Log, TEXT("interactable obj not null"));
auto Movable = Cast<AMovableObject>(InteractableObj);
if (Movable != nullptr) //interactable 중 movable 인지 확인
{
Movable->SetHandle(characterPhysicsHandle);
}
InteractableObj->Interact();
}
}
}
OnInteract() 함수에서
상호작용 하는 물체가 InteractableObj 중 MovableObj 인지 확인 (Cast 사용)
Movable이면 SetHandle함수로 Handle을 붙이기 위한 PhysicsHandle을 넘겨줌 (SetHandle함수는 PhysicsHandle을 넘겨주기 위한 함수)
void AMovableObject::Interact()
{
//PhysicsHandle을 매개변수로 받아서, interactableObj(this)를 getcomponent
if (MovableHandle == nullptr)
{
UE_LOG(LogTemp, Log, TEXT("MovableHandle nullptr"));
return;
}
if (ComponentToGrab == nullptr)
{
UE_LOG(LogTemp, Log, TEXT("ComponentToGrab nullptr"));
return;
}
MovableHandle->GrabComponentAtLocationWithRotation(ComponentToGrab, NAME_None, ComponentToGrab->GetOwner()->GetActorLocation(), ComponentToGrab->GetOwner()->GetActorRotation());
}
MovableObject에 Interact()시
MovableObject의 위치에서 Grab
void AMovableObject::Tick(float DeltaSeconds)
{
Super::Tick(DeltaSeconds);
if (MovableHandle == nullptr)
{
return;
}
if (MovableHandle->GrabbedComponent)
{
// 잡고있는 쪽으로 오브젝트 이동
//MovableHandle->SetTargetLocation();
UE_LOG(LogTemp, Log, TEXT("MovableHandle Grabbed Component"));
}
}
Tick마다
Handle이 컴포넌트를 잡고 있으면 <<<<물체 이동... 부터는 아직 구현 안 함
해야 되는 것
- 물체 이동
- 캐릭터가 물체를 잡는 위치 조정 (BP에 붙여둔 GrabLocation과 연동(?)
- 대화창, 인벤토리 등 팝업이 떠 있을 때는 움직일 수 없도록 처리
'[햄] 작업일기' 카테고리의 다른 글
230714 상호작용 중임을 판단하기 (0) | 2023.07.14 |
---|---|
230711 (0) | 2023.07.11 |
230704 (0) | 2023.07.04 |
230625-230627 (0) | 2023.06.24 |
230616 (0) | 2023.06.16 |