Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
Tags
- UnrealEngine
- UE4
- 랜덤 맵 생성
- deltaTime
- staticmesh mobility
- redirection crash
- register component
- Ai
- UE
- ue4 error
- Random Map Generator
- UE5
- 13iew
- unreal engine
- 언리얼
- skill system
- tscriptinterface
- change textblock color
- splinemeshcomponent scale
- unreal engine skill
- unreal engine redirection crash
- redirector crash
- LittleNightMare
- unity
- 리디렉터 크래쉬
- Unreal Engine 5
- Unreal Engine Error
- 리디렉션 크래쉬
- ue4 Crash
- Unreal Engine 4
Archives
- Today
- Total
Class GameDev* SheepAdult
[Unreal Engine 5] Actor가 Spawn되기 전에 Actor 정보 세팅하기 본문
커스텀 서버를 붙여 멀티 플레이 게임을 개발하고 있던 도중 문제가 있었다. 스킬이 스폰되어 호출하는 BeginPlay()에서 collision ovelap을 바인딩하고 충돌처리가 되면 서버로 Attack과 관련된 패킷을 전달하는데, 스폰해주는 클래스에서 호출하는 스킬 세팅 함수가 스폰된 액터에 적용되기도 전에 액터 정보가 담긴 충돌처리 패킷을 보내면서 Null 정보를 보내는 문제가 발생했다. 이를 해결하기 위해서는 스킬의 충돌처리를 세팅해 준 후 진행해야 했기에 액터를 생성하고 정보를 세팅한 후 월드에 스폰하는 방식을 사용해야 했다.
마침 언리얼에는 Deferred Spawn기능이 있었다. 함수의 모양은 아래와 같다.
AActor* SkillActor = UGameplayStatics::BeginDeferredActorSpawnFromClass(World, ActorClass, SpawnedTransform);
if (SkillActor == nullptr)
return;
UGameplayStatics::FinishSpawningActor(SkillActor, SpawnedTransform);
BeginDeferredActorSpawnFromClass() 함수는 액터를 생성하고 스폰을 대기시킨다. 스폰을 하기 전까지 액터의 BeginPlay() 함수는 시작되지 않으며 로직도 실행되지 않는다. 액터에 대한 세팅을 마친 후 FinishSpawningActor() 함수를 호출하면 월드에 액터가 스폰되고 로직이 시작된다.
아래와 같이 작성했다.
/*
* 패킷을 바탕으로 위치 정보, 클래스 정보 세팅
*/
ASkillActorBase* SkillActor = Cast<ASkillActorBase>(UGameplayStatics::BeginDeferredActorSpawnFromClass(GWorld, CurrentSkillInfo.SkillActorClass, SpawnedTransform));
if (SkillActor == nullptr)
return;
/*
* SkillActor 정보 세팅
*/
UGameplayStatics::FinishSpawningActor(SkillActor, SpawnedTransform);