오늘은 간만에 좀 오래 개발한 것 같습니다.

아침에도 일찍 일어났고, 운동도 안하는 날이고.

물론 다음 달부터는 아침 저녁으로 운동하면 개발하는 시간을 8시간을 맞추기 힘들 수도 있겠죠.

그래도 오늘 제가 할 수 있는 시간의 대부분은 개발에 투자했습니다.

 

처음 시작 할 때는 Host에서 Spawned Character의 Collision과 Visibility가 정상적으로 작동하지 않았고,

Spawned Projectile Trap이 발동 할 때 Host가 마지막에 들어가면 제대로 Trap이 발동하지 않으며,

Client는 Projectile로부터 데미지를 2번 받았습니다.

 

여기서 저는 Visibility를 SetHideInGame 외에 Mesh나 Object마다 SetVisibility를 따로 처리해줬습니다.

그러자 모든 Spawned Object의 Visibility가 모든 Client에서 비정상적이었고,
Host에서는 Spawned Character와의 Collision이 여전히 비정상적이었습니다.

 

그 뒤에는 Trap BP에 부착된 InitializeSpawnedActor의 Spawned Object 활성화 RPC 함수를

Multicast에서 Server로 교체했습니다.

하지만 문제를 해결하지 못했습니다.

 

그 다음에는 ActivateTrap이 호출하는 RPC 함수를 Multicast로 교체해보았습니다.

여전히 문제를 해결하지 못했습니다.

 

그 뒤에 검색을 해본 결과 다음 답을 얻었습니다.

https://answers.unrealengine.com/questions/881032/child-actor-components-dont-spawn-on-clients.html

 

Child actor components don't spawn on clients - UE4 AnswerHub

Hi, In my project I did some mecanism like padlocks or keypad locks. I used an actor to represent a button and this buttons are child components in my locks BP. Everything is fine in the editor, I can push the buttons on every clients but when I launch in

answers.unrealengine.com

즉 Child Actor나 Component는 원본에 Replicate되고, 각각의 Component나 Actor가 Replicate 되도록 설정 하면

각각의 Script 내에서는 Replicate를 지정하면 안된다는 것입니다.

이에 대해 생각을 해보았는데 Parent Object가 Replicate 될 때 부속품들의 Replicate를 같이 처리하거나, 

이들은 Client가 따로 처리를 해야 한다고 생각됩니다.

 

그래서 IObjectActivity에서 ChildActor에서의 Initialize, Activate, InActivate, Reset 함수를 따로 생성했습니다.

그리고 Trap에서 Projectile과 Character의 ChildActor 함수들을 호출하고, 내부에서도 RPC 함수 호출을 하지 않았습니다.

그러자 Spawned Character의 Visibility와 Collision이 Host에서 비정상적인 것을 제외하고 모든 문제가 해결되었습니다.

 

아무래도 Character와 일반 Actor의 차이 때문에 발생한 문제 같습니다.

다음에는 이부분만 집중적으로 수정할 예정입니다.

'개발일지 > Treasure Hunter' 카테고리의 다른 글

20.08.21 개발일지  (0) 2020.08.31
20.08.27 개발일지  (0) 2020.08.27
20.08.22 개발일지  (0) 2020.08.22
20.08.20 개발일지  (0) 2020.08.20
20.08.19 개발일지  (0) 2020.08.19

+ Recent posts