본문 바로가기

Unreal

(316)
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 2-26 Section 2 마무리 및 요약 이번 섹션을 통해 블루프린트, 프로그래밍, 언리얼, 객체지향 등에 대해 다음과 같이 기본적인 것들을 다뤘다. 블루프린트 : 노드, 핀 프로그래밍 : 변수, 문자열, 참조, 분기 언리얼 : 맵, 액터, 컴포넌트, 트랜스폼, 백터 객체지향 : 오브젝트/구조체, 클래스, 멤버 함수, Self 우리가 이번 Section에서 배운 모든 것은 C++로의 변환이 가능하며, 이번 Section에서는 블루 프린트를 위주로 다뤘지만 다음 Section에서는 C++에서 다루게 된다. 해당 Section은 블로그에 정리하면서 쓰기 위해 2번째 듣는 강의이다. 처음에는 이미 한 번 다 봤던 내용이니 빠르게 진도를 나갈 수 있다고 생각했지만, 처음에 듣기만 하고 따로 정리를 안해서인지 순간순간 ..
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 2-25 레벨 노드와 지연 노드 현재 만든 게임은 탄약을 모두 소모하면 총알이 없다는 것을 알려주고 더이상 할 수 있는 것이 없다. 이대로 두는 것은 의미가 없기에, 현재 레벨을 처음부터 다시 실행시킬 필요가 있다. 먼저 레벨을 열여야 한다. 이는 우클릭 후 Open Level을 검색해보면, Open Level (by name)과 Open Level (by object reference) 이렇게 2가지가 보이는 것을 알 수 있다. 우리는 여기서 Open Level (by name)을 선택해주었다. 함수 이름에서 알 수 있듯이 이름을 통해서 레벨을 연다는 것을 알 수 있다. 그렇다면 이름을 어떻게 알 수 있을까? 바로 Get Current Level Name 함수를 통해 쉽게 얻는 것이 가능하다. 그렇다면 레벨이 ..
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 2-23 멤버 함수 기존의 Spawn Projectile 함수를 보면 탄약을 스폰한 이후 해당 탄약의 전방 벡터를 얻고, 4000을 곱해 충격량량을 추가해주는 부분은 모두 BP_Projectile 인스턴스를 사용한다. 따라서 이 모두를 BP_Proejectile 클래스로 옮겨 데이터를 다루는 코드가 데이터 자체와 같이 살 수 있게 만들고자 한다. 함수가 조작하는 데이터와 함께 사는 것 이것은 객체 지향 프로그래밍의 핵심이기도하다. 이를 위해 BP_Projectile에 직접 함수를 추가해준다. 이렇게 추가한 함수를 멤버 함수라고 하며, 멤버 함수는 클래스의 함수로 항상 특정 인스턴스에서 호출되는 함수이다. 위는 테스트 삼아 BP_Projectile 클래스에 멤버 함수 Print Your Name을 추가해준 상태이다..
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 2-22 순수 함수 직전 강의를 통해 만들었던 Has Ammo 함수의 경우 다소 이상하다고 여길 만한 점이 있다. 그것은 바로 해당 함수에 실행핀이 굳이 필요한가? 이다. 그렇다면 함수에서 실행핀을 없앨 수 있을까? 또 실행핀이 필요한 함수와 그렇지 않은 함수는 어떤 경우가 있을까? 그에 관련해서 우선 사이드 이펙트라는 것을 알아야 한다. 사이드 이펙트란 함수가 실행되고 식별 가능한 효과가 생기는 것을 의미한다. 다음 함수들의 예시를 살펴보자. Print string -> 문자열이 보임 Add Impulse -> 충격이 가해지며 이러한 현상이 눈에 보임 Set Ammo -> 변수의 설정 값이 바뀜 이렇게 문자열이 보이거나, 충격이 가해지거나, 변수의 설정 값이 바뀌는 것 이것들은 함수가 실행된 후에 생기는 현상들..
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 2-21 리턴 타입 기존에 원래 있던 노드들을 함수로 합쳐줬지만, 이번에는 아에 새롭게 함수를 만드는 것을 테스트 해보자. 이벤트 그래프 좌측 칸의 함수 오른쪽에 있는 +버튼을 통해 함수를 생성할 수 있다. 생성하고 나면 위와 같이 해당 함수를 이벤트 그래프로 드래그하여 생성할 수 있다. 해당 함수를 더블 클릭하여 보면 처음에는 시작 노드만 존재한다. 그리고 오른쪽 디테일 탭을 보면 입력과 출력 칸을 볼 수 있다. 입력칸에 Text1 및 인티저를 설정해주면 시작노드 실행핀 아래에 해당 변수가 입력값으로 생기는 것을 볼 수 있다. 이를 테스트 삼아 Print string에 연결해주었다. 이벤트 그래프로 돌아가 보면 우리가 설정해준 입력값이 그대로 반영되어 있는 것을 볼 수 있다. 이번에는 출력 칸을 살펴보자. 출력..
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 2-20 함수 현재 레벨 블루 프린트 화면을 보면 다음과 같이 다소 복잡하게 보인다. 이를 위해 특정 기능을 가진 노드들을 묶어 하나의 함수로 깔끔하게 정리가 가능하다. 함수로 묶기에 앞서 원하는 노드들을 묶어 코멘트 블록을 묶는 방법도 있다. 원하는 노드들을 드래그 후 C를 누르면 위와 같이 코멘트 블록으로 표시된다. 해당 코멘트 블록은 우측 디테일 탭에서 이름 수정이 가능하다. 하지만 오히려 겉보기에 더 난잡하다고 느껴질 수도 있다. 우선 탄약을 발사하는 부분을 함수로 묶어준다. 플레이어 폰을 가져와서 충격을 주는 노드들 까지 모두 드래그하여 우클릭을 하면 함수로 접기가 존재한다. 이를 사용하여 하나의 함수로 묶어줄 수 있다. 위에 많은 노드들이 위와 같이 하나로 묶인 것을 볼 수 있다. 해당 함수는 좌측 상..
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 2-19 Booleans and Branches 저번에 탄약을 20개로 정하고 쏠 때마다 감소하도록 해주었다. 하지만 다 떨어졌음에도 불구하고 음수를 출력하는 것을 볼 수 있었다. 이를 위해 Branch 와 Boolean을 이용하여 탄약이 0개 미만이면 발사를 멈추도록 해줄 수 있다. 먼저 Booleans는 yes or no에 대한 데이터 타입이다. (참, 거짓) 그리고 branch는 위 Booleans 값에 따라 하거나, 하지 않거나를 결정한다. (참 -> 행동 o, 거짓 -> 행동 x) 또한 비교 연산자를 통해 크거나, 작거나, 같거나 등 비교를 통해 반환 받은 부울 또한 참고할 수 있다. 우선 우리는 탄약 갯수가 0개보다 많을 때만 발사가 이루어져야 한다. 이를 위해 우선 Greater 노드를 가져와 Get..
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 2-16 액터 컴포넌트 이번엔 기존의 액터에 여러 개의 요소를 추가하고 이를 하나의 액터처럼 움직이도록 물리학 적용해준다. 이를 위해 기존에 배치했던 선반 메시를 이용한다. 현재 선반은 양쪽 지지대만 있고 내용물이 없는 상태이다. 해당 메시는 SM_Rack01이고 안에 내용물은 SM_Rack02이다. SM_Rack02를 단순히 끌어서 SM_Rack01에 붙이는 것을 시도해볼 수 있다. 이 경우 겉으로 보기엔 멀쩡해보이지만 실제 플레이를 해서 발사체를 발사해 맞춰보면 물리학이 비정상적으로 적용하고 있는 것을 확인이 가능하다. 이를 위해 SM_Rack02 메시를 뷰포트로 드래그 하는 것이 아닌 SM_Rack01을 누르고 우측 디테일 탭에 해당 메시의 StaticMeshCOmponent아래에 자식 요소로 들어가도록 드..