Category

    [언리얼엔진 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)..

    [언리얼엔진 5] 12. Dynamic Lighting PaperZD + Normal Map

    이 프로젝트는 PaperZD 캐릭터를 사용하는 만큼 라이팅이 상당히 까다롭다. png 파일로 가져와 플립북을 만들기에 이에 맞는 normal map도 생성되지 않기 때문이다. 언리얼엔진을 사용하는 만큼 다이나믹한 라이팅을 구현하고 싶었다. 실시간으로 변화하는 빛에 캐릭터들의 모습이 바뀌면 얼마나 아름다울까? 그것도 2D 픽셀 캐릭터인데도! 일단 각 스프라이트에 대한 normal map이 필요하다. 노멀맵에 대한 설명은 따로 다루겠다. 첫번째 고난이다. png를 노말맵으로 바꾸어주는 사이트는 구글에서 흔히 찾아볼 수 있었다. 하지만 나는 스프라이트만을 바꾸고 싶은데 뒷 배경까지 처리해버리는 것이다. 결국 aseprite라는 프로그램의 힘을 빌려야 했다. Aseprite Aseprite는 픽셀아트 툴로서 픽..

    [언리얼엔진 5] 11. Lightning Pet

    단순한 공격 구현은 이정도로 마치고 파티클을 이용해 화려한 공격을 구현해보겠다. 번개를 떨어뜨리는 공격을 만들기 위해 펫 클래스를 만들었다. 일단 적을 감지해야 하니 Component Overlap Actor함수로 적을 탐지하고 공격가능 대상수 만큼 Do N노드를 사용하였다. 일단 단일대상에게 데미지를 가하고 싶기 떄문에 파티클에 따로 콜리전을 두지 않았다. 가만히 있으면 단조로우니 몇초마다 플레이어를 따라가게 만들었다. 구현방법은 단순하나 여러 스프라이트를 추출하고 애니메이션 소스로 만드는 과정이 생각보다 오래걸려서 문제이다. 물론 익숙해지고 있기에 점점 빨라졌지만 엄청 많은 펫을 구현하려면 오래걸릴 것같다. 개강하기전 끝내보려했는데 장기프로젝트로 진행될거 같다...

    [언리얼엔진 5] 10. Maximum number of attack + Error Handling

    플레이어와 펫의 공격기능은 얼추 완성이 되가고 있다. 그런데 수 많은 아주 많은 적이 몰려와도 화살 몇방이면 모두 죽어버리는 것이다. 여기서 최대 공격가능 대상 수를 만들어 구현해야겠다는 생각을 한다. 구현방법은 매우 쉬웠다. Do N노드는 실행이 파라미터N만큼만 진행되게 하는 기능을 가진다. 그렇기에 공격에 닿은 적이 담긴 배열을 N번만 데미지를 주면 되는 것이다. (가장 가까운 적을 공격하는 기능은 이후에) 하지만 여기서 큰 문제가 생겨버렸다. 무슨 이유인지 Num of Bow Attack을 2로 설정해도 하나의 적만을 공격할 수 있는 것이다. 수 많은 실행 끝에 이유를 찾을 수 있었다. 역시 원인은 바로 옆에 있었다. Pet 클래스를 구현하면서 펫이 자유롭게 이동하는데 펫의 넓은 Detected c..

    [언리얼엔진 5] 9. Pet Class

    혼자 싸우면 외롭다. 그렇기에 플레이어에게 이로운 효과를 주거나 적을 함께 공격하는 펫을 구현하기로 하였다. 이때 펫의 움직임을 많이 고민하였다. 적을 따라가 공격을 할지, 플레이어를 따라가며 공격을 할지 말이다. 우선 적을 따라가 공격을 하게 구현을 해보았다. Set timer by Event 함수로 적을 따라가게 구현하였다. 틱이벤트로 따라가게 만들면 부자연스러운 이동이 계속되기 때문이다. Pet 클래스도 이전과 같이 PaperZD Character 부모클래스로 생성하였고 애니메이션 적용도 이전과 동일하게 진행했다. 처음과 다른 것은 State를 두었다는 것. Find Nearest Actor함수는 Origin에서 가장 가까운 파라미터의 배열속 액터를 리턴한다. 가장 가까운 적을 추적해서 공격해야 하..

    [언리얼엔진 5] Find Nearest Actor

    플레이어를 따라다니며 지원하고 적을 공격하는 Pet을 구현하려했다. 일단 적을 찾아야 하는 것이 우선이므로 콜리전을 생성하였다. 여기서 많은 적들을 찾을 수 있는데 내가 원하는 것은 가장 가까운 적에게 다가가는 것이다. 이때 언리얼엔진은 아주 유용한 노드를 제공한다. 액터 배열을 받아 이중 가장 가까운 액터와 거리를 리턴한다. Origin 파라미터는 측정하는 위치이다. 여기서는 본인의 위치를 넘겨주었다.