1. Mover에서 public:setter 만듬
void UMover::SetShouldMove(bool NewShouldMove)
{
ShouldMove = NewShouldMove;
}
2.trigger에서
mover.h 인클루드
멤버 UMover* mover 만듬
그 맴버(mover)에 의존성주입하는 함수 만듬 // 매개변수 명을 다르게 지어야함에 주의
void UTriggerComponent::SetMover(UMover* NewMover)
{
Mover = NewMover;
}
3. 문BP에서
매개변수로 문에 달려있는 mover전달. => 의존성주입됨.
4. trigger-tick에서
mover의 setter 실행
void UTriggerComponent::TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction)
{
Super::TickComponent(DeltaTime, TickType, ThisTickFunction);
AActor* Actor = GetAcceptableActor();
if (Actor != nullptr) {
Mover->SetShouldMove(true);
}
else {
Mover->SetShouldMove(false);
}
}
5. 실행결과
생략
6. 문제 : 가고일이 문이내려가는중에 떨어짐 => 문이내려가면서 멈춤
7. 해결 : 물리엔진제거, 문에 붙여주기
https://mini-96.tistory.com/202
8. 문제2 : 사용자가 그랩중인데 문이 조각상을 가져가버림
9. 해결2 : 태그를 이용
- Grabber 에서
grab->tag추가
release->tag삭제
- trriger에서
actor의 태그검사 조건 추가
AActor* UTriggerComponent::GetAcceptableActor() const
{
//액터들 포인터 저장하는 벡터
TArray<AActor*> Actors;
GetOverlappingActors(Actors); //오버랩된 액터들을 포인터로 Actors에 담아줌.
for (auto Actor : Actors) {
//태그가 언락일때만 반응하도록
//문제 : 사용자가 그랩중인데 문이 낚아채버림
//해결 : 태그목록에 있음 and Grab중 아닌 액터만 리턴
if (Actor->ActorHasTag(AcceptableActorTag) &&
!Actor->ActorHasTag("Grabbed")) {
return Actor;
}
}
return nullptr;
}
void UGrabber::Release() {
UPhysicsHandleComponent* PhysicsHandle = GetPhysicsHandle();
if (PhysicsHandle == nullptr) return;
//들고있는 물체가 있는경우
if (PhysicsHandle->GetGrabbedComponent()) {
//가고일 놓으면 태그삭제하기
//(가고일이 액터임)
AActor* GrabbedActor = PhysicsHandle->GetGrabbedComponent()->GetOwner();
GrabbedActor->Tags.Remove("Grabbed");
PhysicsHandle->ReleaseComponent(); //물체놓기
}
}
void UGrabber::Grab() {
UPhysicsHandleComponent* PhysicsHandle = GetPhysicsHandle();
if (PhysicsHandle == nullptr) return;
FHitResult HitResult;
bool HasHit = GetGrabableInReach(HitResult);
if (HasHit) {
UE_LOG(LogTemp, Display, TEXT("on hit"));
//유저가 잡으면 태그추가.
HitResult.GetActor()->Tags.Add("Grabbed");
'UE5' 카테고리의 다른 글
[UE5] 머태리얼, 텍스쳐 (0) | 2024.05.13 |
---|---|
[UE5] 가고일 물리반응 끄기, trigger에 붙여서 같이 내려가도록 구현 (0) | 2023.09.18 |
[UE5] 특정액터에만 반응하도록 구현 (0) | 2023.09.18 |
[UE5] 오버랩 이벤트 발생시키는 방법 (0) | 2023.09.17 |
[UE5] 충돌위치 찾기 location vs impactpoint (0) | 2023.09.17 |