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

+ Recent posts