루카스님의 언리얼 엔진 블루프린트 강의를 보면서 공부를 하는중이다.
[입문자를 위한 UE5] Part1. 언리얼 엔진 블루프린트 - 인프런 | 강의
아무것도 모르는 입문자를 위한 강의 입니다. 언리얼 엔진의 비주얼 스크립팅 시스템인 블루프린트를 프로그래머 관점에서 공부하며 익숙해지는 강의입니다., 코딩 생초보도, 프로 게임 개발자
www.inflearn.com
위의 강의인데, 2년간 유니티를 사용하다가 처음에 언리얼엔진으로 오면서 막막했는데, 해당 강의를 듣고 어느정도 현재 자리를 잡은 것 같다.
처음 언리얼 엔진을 만지면서 유니티와 약간 비슷하다는 점을 꽤 느꼈다. 특히 언리얼에서는 레벨뷰에서(유니티는 씬뷰) q w e r 키를 이용해 오브젝트를 만지는것이 똑같고 큐브 생성 그리고 피직스 시뮬레이션 즉 유니티에서는 리지드 바디 와 같이 비슷한 부분이 있어 혼자 만져보는데 적응하는데에는 빨랐다.
블루프린트를 한번 만져보면
블루프린트에도 주석을 달 수 가 있다. 각각의 노드들을 드래그 해서 c 키를 누르면 주석이 달린다.
그리고 각각의 노드들을 연결한 선은 delete키로 제거도 할 수 있지만 ALT키로도 제거가 가능하다.
그리고 BeginPlay 와 틱 이벤트에 노드를 연결해봐서 text를 실행해봤는데,
유니티에서 void start() 함수가 BeginPlay의 역활 그리고 틱이벤트가 Update() 함수 인것 같다.
아마 BeginPlay에서 값 초기화를 많이 하지 않을까 싶다.
변수는 int, double, byte(1바이트), bool값 등 다 있는것 같다.
그리고 이러한 변수를 사용할때 Get, Set 이 굉장히 많이 쓰이는데, c# 유니티를 개발 하다보면 클래스에 있는 변수 값을 가져 올때 Get Set 문법을 사용하는데, 여기서도 사용한다.
이벤트 그래프에서 마우스 우클릭 후에 Get 이나 Set을 쳐서 노드를 만들수도 있지만 좌측에 변수를 이벤트 그래프에 끌어당겨서 Get 이나 Set을 만들 수 있는데 마우스로 끌어당겨서 만드는게 더 편한것 같다.
그리고 int 값을 받는 노드의 구멍에 변수값을 그대로 끌어서 노드에 연결하면 자동으로 Get 형태의 노드가 만들어진다.
이벤트 그래프에서 우클릭 후 + - * / 를 검색하면 각각의 연산 노드를 추가할 수 있다.
++을 입력하면 증감연산자 --를 입력하면 감소연산자가 나온다.
또한 <= < > >= == 를 입력하면 비교연산자도 나온다.
그리고 블루 프린트에서는 if 연산자를 branch라고 한다. 처음에 if 문은 어디있지하고 이벤트 그래프에서 마우스 우클릭 후에 if를 쳐보니 branch가 나오길래 이게 if문이구나 했다. 마찬가지로 && 를 입력하면 우리가 코딩할때 쓰는 and 연산자도 나온다.
강의를 듣다보면 연습문제가 있는데, 총알 재장전 연습문제이다.
연습문제가 강의 제목이 있길래 강의를 보지않고 바로 연습문제를 풀어보았다.
아래 나오는 블루프린트는 강의와는 다른 방법의 풀이방법이다.
블루프린트를 처음 만져보는거라 노드정리는 감안해서 봐주시길바랍니다..
변수는 3개를 만들었다.
우선 현재 장전되어 발사할 수 있는 총알의 갯수를 가지고 있는 currentbullet
그리고 현재 가지고 있는 총알인 totalbullet
그리고 재장전해야할 탄의 갯수인 reloadbullet 3가지를 변수에 추가를 하였다.
현재 총알이 장전되어 있으면 실행되는 노드이다. currentbullet 이 0보다 크면 마우스 좌클릭을 누를때마다 실행이 되는데,
한번 누를때마다 currentbullet 이 -1씩 감소한다. 만약 currentbullet이 0발이 되어 false 가 된다면 재장전하라는 문구가 뜨게 만들었다. print TEXT 다음 노드에 자동으로 장전되는 노드를 만들어서 연결하면 0발이 됬을때 자동으로 재장전이 될 것이다.
우선 R키를 누르면 재장전을 시작하는데 여기서 만약 소지하고 있는 탄약이 9발이라 재장전해야하는 탄약인 10발보다 없으면 if문에서 false 문으로 가는데 이곳에서도 만약 소지하고 있는 탄약이 9발이 아니라 0발이면 print text로 재장전이 불가능하다고 텍스트를 남기고 만약 9발이 있다면 true 문이 실행된다.
그 다음 if문에서도 만약 현재 장전된 총알에서 소지중인 탄약을 모두 더했는데, 재장전해야하는 탄약의 수보다 더 많으면
true문이 실행되는데,
한마디로 현재 9발 장전되어 있는데 총 소지 탄약은 9발이고 여기서 1발만 장전하면 되는 상황인 노드이다.
그럼 true 로 가서 reloadbullet에서 currentbullet을빼고 그 뺀값을 totalbullet에서 다시 뺀다
즉 10발에서 9를 뺀 1을 totalbullet 9-1 하여 totalbullet은 8발이 되니 그 값을 텍스트에 출력해준다.
다음에는 currentbullet의 값을 설정해줘야하는데,
reloadbullet(10)에서 currentbullet(9)를 빼주고 그뺀값(1)을 currentbullet(9)+(1)을 해주어 재장전되야하는 총알 갯수인 10발로 만들어준다 그리고 그값을 포멧 텍스트에 넣어 값을 출력한다.
이건 false 일때인데 currentbullet이 5발이고 totalbullet이 1발이나 2발과 같은 상황에서 나오는 상황이다.
currentbullet(5)+totalbullet(1)을 해준다. 그럼 그 값을 텍스트에 출력해주고(6)
totalbullet은 다 썼으니 0으로 값을 설정해주고 텍스트에 출력한다.
이전에 설명한 부분과 같은 맥략으로 노드가 구성된다.
사진을 한번 참고하시길 바란다.
처음 블루프린트를 만지는거라 노드가 뒤죽박쭉 지저분하다..
그리고 처음으로 만져보니 아직 적응이 안되서 복잡하게 만들어 지는것 같다.
다른것도 구현해 보면서 블루프린트에 대해 더 공부를 해봐야겠다.
'언리얼 엔진 5' 카테고리의 다른 글
언리얼엔진5 C++로 정복하기(5) 몽타주(Monatage) 애니메이션 (0) | 2024.02.02 |
---|---|
언리얼엔진5 C++로 정복하기(4) 캐릭터 클래스 및 애니메이션 (0) | 2024.01.30 |
언리얼엔진5 C++로 정복하기(3) 폰 생성 및 이동 (1) | 2024.01.23 |
언리얼엔진5 C++로 정복하기(2) 엑터 로케이션 (0) | 2024.01.18 |
언리얼엔진5 C++로 정복하기(1) 디버그 (0) | 2024.01.16 |