안녕 인붕이들. 또왔어.
먼저, 완성 영상
스킬 이름은 SyncBlast 인데 이름에 걸맞게 시간을 느리게하고 상대방을 박살낸다는 의미로 지었어
사실 이 스킬은 프로토타입 제작한지 엄청 오래된 스킬인데 데모제작을 앞두고 완벽하게 끝내야겠다 싶어서 작업했더니 생각보다 오래걸린 스킬이야
아무래도 모든 플레이어들에게 영향을 주기도하고 캐릭터 중복픽도 되고 사운드 이슈도 있고 뭐 이것저것 신경쓰다보니 완성까지 엄청 걸리더라
거의 모든 요소가 구현 난이도가 높았지만 기억에 남는거 하나 꼽자면 지속시간 구현할 때가 가장 기억에 남네
나는 GAS를 사용하고 있기 때문에 어빌리티의 지속시간은 UAbilityTask_WaitDealy 라는걸 써서 지속시간을 정해줘야하는데 문제가 이걸쓰면 시간이 느려졌을 때 지속시간도 똑같이 느려지더라고
보통 이런 방법에 대한 해결법은 GetRealTimeSeconds <- 요녀석을 통해 현실세계 시간을 가져와 게임시간에 영향을 안받도록 구현해야해. 엔진에 구현되어 있을 줄 알았는데 없더라고.
그래서 직접 만들기로 결정했어.
그냥 코드는 기존 WaitDelay Task 긁어와서 함수명만 바꿔주고
Activate 부분에서 핵심코드가 들어가거든.
여기서 좀 웃긴게 C++에선 딜레이를 주려면 SetTimer를 쓰는 방법이 거의 유일하기 때문에 뭘 해도 Time Dilation의 영향을 벗어나는 방법이 없더라고.
AI를 갈구니까 Tick으로 DeltaTime 받아와서 GetRealtimeSeconds 랑 이렇게 저렇게 해서 계산 때려버리길래 멍청한새끼 하면서 걍 유기해버렸지.
난 Tick을 죽어도 쓰기 싫거든.
그래서 구글링을 한 결과
포럼에 고수님이 친절하게 전체 코드를 올려주셔서 그대로 복사했지
하나도 안빼고 복사한 뒤에 수정도 안함. 그냥 믿음으로 가는거야
여기서 또 하나 문제가 더 생기는데 앞서 Activate 코드를 보면 일반 SetTimer와 다르게 무언가 주렁주렁 달려있는걸 볼 수 있어.
이런식으로.
애초에 C++로 쓰라고 만든게 아니라 블프용으로 만든거라 FLatentActionInfo 를 넣어줘야 하더라. 실제 블프 딜레이 함수처럼.
그래서 걍 대충 넣어주니까 돌아가더라고.
어쨌건 돌아가기만 하면 된거지
추가로 주의할 점은 Finish 콜백 함수를 BlueprintCallable로 선언해줘야 한다는거.
구현하는데 재미도 있었고 배운것도 많아서 즐거웠다~
담에 또 올게
오 간지난다. 이걸로 그거 만드는거죠? 로봇 뒤에서 미사일 퉁퉁퉁 날아가서 유도탄으로 박히는 그런거! - dc App
지금 가쩌는 생각남. 저거 하고서 부매랑 던지는 던지는 모션함 시아가 총 따라가고 총이 날아가면서 탕탕쏨 다쏘고 돌아놈. 대 씹간지 낭만 치사량 터진다. - dc App
이제 만들어 줘. - dc App
석양이 진다... (수동)