ToyProject
[언리얼엔진 5] 19. Status UI + Icon
슬슬 UI를 구현해볼까 해서 스탯창 먼저 만들어 보았다. TAB키를 누르면 나오고 다시 누르면 사라지게 말이다. 이번에 나는 미적감각이 없다는 것을 느끼게 되고.. 이날 나의 예술세계가 무너졌다. 각 숫자에는 모두 바인딩해주어 플레이어의 정보를 가져올 수 있게 하였다. 각 스탯을 쉽게 알아보기 위해 옆에 아이콘을 추가하였다. 이때도 스트링테이블이 요긴하게 사용된다. 기능을 구현하는게 어렵지 않았지만 시간이 꽤나 오래걸렸다. 반복된 부분이 많고 여러가지를 바인딩하니 시간이 많이 걸릴 수 밖에.. 특히 이미지를 구하는게 어려웠다. 저작권이 없고 게임에 어울리는 에셋을 찾기 정말 힘들다는 것을 느꼈다. 내 예술감각의 참혹함도... 이미지는 추후에 더 어울리는 것으로 교체해야할 것같다.
[언리얼엔진 5] 18. Fix Floating Damage
몬스터를 공격하면 데미지가 화면에 띄워지지만 문제하나를 발견했다. 빠르게 공격하면 그전의 데미지 위젯은 사라지고 하나의 위젯만 발생하게 되는 것이다. 빠른 연타공격을 해도 데미지 위젯은 결국 하나만 보여주게 되는 것이다. 기존에는 FloatingDamage를 몬스터 액터에 띄우는 방식으로 구현했다. 위 문제를 해결하기 위해서는 또 하나의 액터를 만들어 스폰하는 방식을 생각했다. 결국 몬스터 액터에서 위젯을 소환하는 것이 아닌 위젯을 소환하는 액터를 스폰하는 방식으로 바꾸었다.
[언리얼엔진 5] 17. LevelUP + Player Stat (String Table)
게임에서 플레이어 스탯(status)는 빼놓을 수 없는 요소일 것이다. 특정 능력치에 종류를 부여하여 계량화한 시스템으로 플레이어가 강해지기 위한 가장 기초적인 방법이다. 레벨업을 하면 3개의 스탯업 요소가 무작위로 나타나고 하나를 고를 수 있는 시스템을 구현해볼 것이다. 디자인은 나중에 손을 봐야할 것 같다. 스탯 이름 아래에는 숫자만 놓고 버튼도 이미지를 따로 생성해줄 것이다.
[언리얼엔진 5] 16. Loading Screen + Fade In/out
레벨에 디자인하다보니 openlevel을 실행하면 잠시 동안 멈추게 되었다. 이게 너무나도 거슬려서 로딩스크틴을 띄우기로 했다. 위젯블루프린트로 만들어도 되지만 무료 플러그인이 잘되어 있어 활용하기로 했다. Async Loading Screen 비동기 로딩 화면을 사용하면 프로젝트 설정에서 로딩 화면 시스템을 쉽게 구성하고 새 레벨을 열 때마다 로딩 화면을 자동으로 추가할 수 있다. 아래에서 자세한 설명을 찾아볼 수 있다. https://github.com/truong-bui/AsyncLoadingScreen GitHub - truong-bui/AsyncLoadingScreen: Async Loading Screen is a free and open-source plugin for Unreal Engin..
[언리얼엔진 5] 15. Chargeing Attack and RoundProgress Bar
키를 누르면 공격이 나간다. 심심한 느낌을 지울 수가 없어서 차징공격을 만들어 보기로 했다. 기존 활 공격에 추가하고 차징을 할 수록 강해지는 기능을 구현하면 재미있을 것 같다. 차징공격을 구현하기 전에 진행바가 필요하다. 이때 직선의 progressbar는 밋밋할 수 있으니 원형으로 구현할 것이다. 일단 원형 이미지가 필요하다. 큰 원에서 작은 원을 빼면 되므로 머티리얼을 생성하여 만들어 주었다. https://blueprintue.com/blueprint/ee4tsosw/ Round Progress Bar posted by BoobieBird | blueprintUE | PasteBin For Unreal Engine No description provided blueprintue.com 다음과 같이..
[언리얼엔진 5] 14. Save and Load Variable in Next Level
이번에는 다른 레벨(맵)으로 이동할 때 변수를 저장해줄 차례이다. 처음 언리얼엔진을 접했을 때 가장 의아했던 부분이다. 왜 다음 레벨로 가는데 save, load 과정이 필요할것인지. 이는 객체를 이해하면서 저절로 알게 되었다. BP_Player의 객체들은 같은 변수, 다른 값을 가질 수 있기 때문이다. 변수를 저장하는데 핵심이 되는 노드이다. Save Game Object를 레퍼런스로 받아 Slot Name으로 저장한다. 이후 저장한 슬롯에서 가져와 캐스팅하는 방법으로 저장한 변수를 불러올 수있다. 첫 사진은 플레이어의 현재 변수값을 SaveGame 블루프린트에 저장하는 모습이다. 다음 사진으로는 저장한 변수의 값을 불러오는 과정이다. 이제 플레이어나 펫의 변수를 추가할 때 Save Game에 추가해주..
[언리얼엔진 5] 13. Changing Dynamic Lit sprite + Error Handling
이전 12장에서 놓친 것이 있어 내용에 앞서 추가하겠다. 커스텀 머티리얼을 설정해주었지만 앞면만 라이팅이 적용되고 후면에는 다이나믹 라이팅이 적용되지 않는 현상을 발견하였다. 구글링을 열심히 해도 해답을 찾기 정말 힘들었다. 이후 여러 유튜브 영상을 뒤지면서 한 영상의 댓글에서 해답을 찾을 수 있었다. 유튜브에서 발견한 댓글 -- 1) TwoSidedSign returns -1 or 1, not 0 or 1 -- 2) Lerp will happily extrapolate when alpha is outside the [0-1] range, i.e. with 0/1 for the A/B inputs and an alpha of -1, the return value will be -1, not 0 -- 3)..