본문 바로가기

Unreal 공부

2일차 (Unreal Battery Collector Tutorial 따라하기) 6~8강

- Spawn Volumn 만들기 

들어갈 내용 :  When to Spawn, Where to Spawn, What to Spawn ( 언제 , 어디서, 무엇을 스폰할 것인가 )

FORCEINLINE과 UFUNCTION은 호환되지 않음

FORCEINLINE class UStaticMeshComponent* GetMesh() const { return PickupMesh; }

위와 같은 함수를 BlueprintCallable로 만들고 싶은 경우(즉, UFUNCTION 프로퍼티를 사용해야하는 함)에 FORCEINLINE을 사용하면 안된다.

UPROPERTY(BlueprintCallable, Category = "Pickup")
class UStaticMeshComponent* GetMesh();

위와 같은 방법으로 정의해야할 듯 하다.

에러 발생!! 비상!!

빌드를 계속 실패하고  GENERATED_BODY( )에 계속 빨간줄이 그였다. 이게 뭐지..?

Error 발생!
실마리 1 - "저 그건 했는데요..?"
실마리 2 - "12번째줄이 원래 있어야 할 줄이네? 그럼 추가해야 하는 헤더를 cpp에 몰아야겠군!!"

이제 되겠지? 안되네?! 또 뭐야!!

Error 또 발생!

설마 쟤도 헤더를 포함해야 하는건가..?

헤더를 포함해야 하는군!

이제 진짜 되겠지? 아싸 된다!!!
튜토리얼은 포함도 안했는데 빌드가 된걸 보니 버전이 달라지면서 뭔가 바뀐듯하다.

또 에러 발생!! 비상!!

Instigator에 접근할 수 없다!
어? 나 버전 4.25 쓰고 있는데!! 오호~ 이제 Instigator에 직접 접근을 못한다구?
에러 해결! 편-안

 

지정한 class를 상속받는 것들만 할당할 수 있게 해주려면? 

TSubclassOf<class APickup> WhatToSpawn;

Actor를 Spawn해보자!

world->SpawnActor<Pickup>(WhatToSpawn, SpawnLocation, SpawnRotation, SpawnParams);

Timer를 이용하여 지정한 시간만큼 지나면 함수를 실행하게 하려면?

SpawnDelay = FMath::FRandRange(SpawnDelayRangeLow, SpawnDelayRangeHigh);
GetWorldTimerManager().SetTimer(SpawnTimer, this, &ASpawnVolume::SpawnPickup, SpawnDelay, false);

 

언리얼 문서

SpawnActor ( 위의 이미지를 클릭하면 바로 문서로 연결됩니다 )
Timer ( 위의 이미지를 클릭하면 바로 문서로 연결됩니다 )

중요하다고 생각하는 내용 정리
- GENERATED_BODY( )는 항상 12번째 줄에 존재해야 함
- Instigator는 언리얼 4.25에서 직접 접근할 수 없고 Getter를 사용하여 접근해야하는 것으로 변경되었음