6

안녕 인붕이들. 또왔어.




먼저, 완성 영상




스킬 이름은 SyncBlast 인데 이름에 걸맞게 시간을 느리게하고 상대방을 박살낸다는 의미로 지었어


사실 이 스킬은 프로토타입 제작한지 엄청 오래된 스킬인데 데모제작을 앞두고 완벽하게 끝내야겠다 싶어서 작업했더니 생각보다 오래걸린 스킬이야


아무래도 모든 플레이어들에게 영향을 주기도하고 캐릭터 중복픽도 되고 사운드 이슈도 있고 뭐 이것저것 신경쓰다보니 완성까지 엄청 걸리더라


거의 모든 요소가 구현 난이도가 높았지만 기억에 남는거 하나 꼽자면 지속시간 구현할 때가 가장 기억에 남네




나는 GAS를 사용하고 있기 때문에 어빌리티의 지속시간은 UAbilityTask_WaitDealy 라는걸 써서 지속시간을 정해줘야하는데 문제가 이걸쓰면 시간이 느려졌을 때 지속시간도 똑같이 느려지더라고


보통 이런 방법에 대한 해결법은 GetRealTimeSeconds <- 요녀석을 통해 현실세계 시간을 가져와 게임시간에 영향을 안받도록 구현해야해. 엔진에 구현되어 있을 줄 알았는데 없더라고.




09b8dc27fced69e87eb1d19528d5270392bace5e2010


그래서 직접 만들기로 결정했어.




09b8dc27fced6ae87eb1d19528d5270377616048809b

그냥 코드는 기존 WaitDelay Task 긁어와서 함수명만 바꿔주고



09b8dc27fced6be87eb1d19528d52703a676598fa62bec

Activate 부분에서 핵심코드가 들어가거든. 


여기서 좀 웃긴게 C++에선 딜레이를 주려면 SetTimer를 쓰는 방법이 거의 유일하기 때문에 뭘 해도 Time Dilation의 영향을 벗어나는 방법이 없더라고.

AI를 갈구니까 Tick으로 DeltaTime 받아와서 GetRealtimeSeconds 랑 이렇게 저렇게 해서 계산 때려버리길래 멍청한새끼 하면서 걍 유기해버렸지.


난 Tick을 죽어도 쓰기 싫거든.


그래서 구글링을 한 결과



09b8dc27fced6ce87eb1d19528d52703e6afb1daf889c4

포럼에 고수님이 친절하게 전체 코드를 올려주셔서 그대로 복사했지



09b8dc27fced6de87eb1d19528d527034be37b31a095eb



09b8dc27fced6ee87eb1d19528d527037bb4f07df42b



09b8dc27fced6fe87eb1d19528d5270398b88da6542f


하나도 안빼고 복사한 뒤에 수정도 안함. 그냥 믿음으로 가는거야

35







여기서 또 하나 문제가 더 생기는데 앞서 Activate 코드를 보면 일반 SetTimer와 다르게 무언가 주렁주렁 달려있는걸 볼 수 있어.


29828168f5dc3f8650bbd58b36837d6f2bf1


이런식으로. 


애초에 C++로 쓰라고 만든게 아니라 블프용으로 만든거라 FLatentActionInfo 를 넣어줘야 하더라. 실제 블프 딜레이 함수처럼.

그래서 걍 대충 넣어주니까 돌아가더라고.


어쨌건 돌아가기만 하면 된거지

23


추가로 주의할 점은 Finish 콜백 함수를 BlueprintCallable로 선언해줘야 한다는거.







구현하는데 재미도 있었고 배운것도 많아서 즐거웠다~


담에 또 올게


53