UPROPERTY(EditAnywhere)
TArray<class AMyMovingPlatform__A*> LinkedMovingPlatforms;
트리거 플랫폼에서 트리거가 발생하면 다른 컴포넌트에게 특정한 함수를 호출하게 해야한다. 대상은 무빙플랫폼
void ActiveTrigger();
void DeactiveTrigger();
UPROPERTY(EditAnywhere)
int RemainActiveTriggersNum;
무빙플랫폼에서 실행할 함수와 움직이기위한 조건인 Remain 선언
void AMyMovingPlatform__A::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
//남은 트리거 개수가 0보다 크면 -> 필요한것이 남아있는것... -> 작동 못하게
if (RemainActiveTriggersNum > 0) return;
if (HasAuthority())
{
FVector Location = GetActorLocation();
Location += Direction * DeltaTime * MoveSpeed;
SetActorLocation(Location);
float TravelSize = (Location - GlobalStartLocation).Size();
if (TravelSize > TravelLength)
{
Direction *= -1;
FVector swapTemp = GlobalStartLocation;
GlobalStartLocation = GlobalTargetLocation;
GlobalTargetLocation = swapTemp;
}
}
}
void AMyMovingPlatform__A::ActiveTrigger()
{
--RemainActiveTriggersNum;
}
void AMyMovingPlatform__A::DeactiveTrigger()
{
++RemainActiveTriggersNum;
}
무빙플랫폼에서 RemainActiveTriggersNum이 1보다 크면 움직이지 않게 한다.
void AMyPlatformTrigger__A::MyCustomOverlapBegin(UPrimitiveComponent* OverlappedComp, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult)
{
UE_LOG(LogTemp, Log, TEXT("BEGIN"));
for (int i = 0; i < LinkedMovingPlatforms.Num(); ++i)
{
LinkedMovingPlatforms[i]->ActiveTrigger();
}
}
void AMyPlatformTrigger__A::MyCustomOverlapEnd(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex)
{
UE_LOG(LogTemp, Log, TEXT("END"));
for (int i = 0; i < LinkedMovingPlatforms.Num(); ++i)
{
LinkedMovingPlatforms[i]->DeactiveTrigger();
}
}
트리거 플랫폼에서 트리거가 발생하면 End / Begin에 맞게 Active, Deactive해준다.
'unreal engine' 카테고리의 다른 글
[언리얼엔진] C++로 UI, UMG에 접근하기, C++로 게임 내 클래스 찾기 (0) | 2022.07.10 |
---|---|
[언리얼엔진] 언리얼엔진 C++ GameInstance 게임 인스턴스와 Exec (0) | 2022.07.10 |
[언리얼엔진] C++로 트리거 재정의하기 (AddDynamic) (0) | 2022.07.10 |
[언리얼엔진] C++로 움직이는(왕복) 물체 만들기 (0) | 2022.07.10 |
[언리얼엔진] C++로 컴포넌트 생성하기 (0) | 2022.07.10 |