
VScode 설치하기 저번 비주얼 스튜디오를 설치한데에 이어 이번엔 비주얼 스튜디오 코드를 설치할 차례이다. 이번엔 저번보다 더욱 간단하다. 우선 해당 사이트에 들어가 바로 보이는 다운로드 버튼을 눌러준다. 사이트 링크 : https://code.visualstudio.com/ Visual Studio Code - Code Editing. Redefined Visual Studio Code is a code editor redefined and optimized for building and debugging modern web and cloud applications. Visual Studio Code is free and available on your favorite platform - Linux,..

PC - 비주얼 스튜디오 설치 이번 게시물은 앞서 언급했던 비주얼 스튜디오에 대해 설치에 대해 간단히 다룬다. 이미 예전에 설치를 해놨었기 때문에, 강의에서 나온 화면을 캡처하여 정리하였다 우선 언리얼 엔진 버전을 지원하는 비주얼 스튜디오 버전을 체크해줄 필요가 있다. 이는 언리얼 공식 문서 페이지에서 확인이 가능하지만, 언리얼 5에 대한 업데이트는 아직까지 이루어지지 않았다. 따라서 강의에서 설명해준대로 VS 2022 버전을 다운로드해주면 된다. 개인 사용자용 무료판은 Visual Studio Community이다. 따라서 해당 설치 파일을 다운받아주면 된다. 사이트링크 : https://visualstudio.microsoft.com/downloads/ Download Visual Studio Too..

컴파일러와 에디터 이번 섹션에서 C++를 활용해 언리얼에서 작업을 하기 위해 컴파일러와 에디터에 대해 알아야한다. 우선 컴파일러가 왜 필요한지 알려면 소스코드에 대해서 먼저 알아야 한다. 소스코드란 우리가 쓰는 코드이며 C++과 같이 보통은 텍스트로 이루어져 있다. 따라서 읽는 주체가 사람이며, 사람이 읽을 수 있는 방식으로 게임에서 하려는 것이나 컴퓨터로 하려는 것을 설명하는 방식이다. 소스코드는 읽는 주체가 사람이기 때문에 기계가 무언가를 실행하고 구동하는데 활용되지는 않는다. 이는 바이너리 실행 파일의 역할이다. 바이너리 실행 파일은 0과 1로 구성된 바이너리 코드이며, 기계가 빠르게 읽고 CPU와 GPU에서 실행되도록 만들어져 있다. 소스코드와 바이너리 실행 파일 사이에는 간극이 존재하며, 이 간..

캐릭터 커스터마이징 캐릭터를 커스터마이징 하기 위해 우선 캐릭터 클래스를 생성해준다. 그리고 일단 실행을 해보면. 우리가 배치하면 3인칭 캐릭터가 아닌 자체 캐릭터가 나오는 것을 알 수 있다. 이는 플레이어 스타트가 존재하기 때문이기에 이를 지워준다. 하지만 아직도 부족하며, 3인칭 캐릭터가 우리가 사용할 것이란걸 알려주는 작업이 필요하다. 3인칭 캐릭터의 블루프린트 클래스로 가보면 디테일 탭에 플레이어 자동 빙의 칸이 존재한다. 해당 칸은 기본으로 비활성화되어있으며, 이를 Player 0으로 활성화를 해주면 해당 캐릭터가 최우선으로 빙의되게 된다. 이제 실행해보면 3인칭 캐릭터가 제대로 나오는 것을 볼 수 있다. 하지만 이상한 점이 있는데, 팔 부분 메시가 어긋난 것이랑 좌우로 회전이 안되는 것이다. ..

섹션 개요 - 장애물 공격 이번 섹션의 목표는 여러가지 장애물이 배치되어 있는 코스를 만들고 이를 통과하는 것이다. 장애물에는 위아래로 움직이는 플랫폼, 좌우로 움직이는 플랫폼, 빙글빙글 도는 플랫폼, 회전하는 벽 등이 있다. 이를 위한 에셋들을 가져오고, 이번 섹션부터 C++를 통해 다루기에 C++에 필요한 툴을 설치해준다. 그리고 에디터에서 이를 실행하기 위해 C++를 컴파일 하는 방법을 습득한다. 이에 더하여 C++의 기본 문법과 C++에서 액터를 생성하는 방법 등을 습득하고 블루프린트에 연결하는 방법 또한 습득하게 된다. 프로젝트 셋업 실질적인 첫 시작인 프로젝트 셋업이다. 이번 섹션을 위한 에셋 팩이 존재하여 이를 몇 가지 가져와 프로젝트를 생성하게 된다. 추가적으로 이번엔 3인칭 캐릭터를 생성..
Section 2 마무리 및 요약 이번 섹션을 통해 블루프린트, 프로그래밍, 언리얼, 객체지향 등에 대해 다음과 같이 기본적인 것들을 다뤘다. 블루프린트 : 노드, 핀 프로그래밍 : 변수, 문자열, 참조, 분기 언리얼 : 맵, 액터, 컴포넌트, 트랜스폼, 백터 객체지향 : 오브젝트/구조체, 클래스, 멤버 함수, Self 우리가 이번 Section에서 배운 모든 것은 C++로의 변환이 가능하며, 이번 Section에서는 블루 프린트를 위주로 다뤘지만 다음 Section에서는 C++에서 다루게 된다. 해당 Section은 블로그에 정리하면서 쓰기 위해 2번째 듣는 강의이다. 처음에는 이미 한 번 다 봤던 내용이니 빠르게 진도를 나갈 수 있다고 생각했지만, 처음에 듣기만 하고 따로 정리를 안해서인지 순간순간 ..

레벨 노드와 지연 노드 현재 만든 게임은 탄약을 모두 소모하면 총알이 없다는 것을 알려주고 더이상 할 수 있는 것이 없다. 이대로 두는 것은 의미가 없기에, 현재 레벨을 처음부터 다시 실행시킬 필요가 있다. 먼저 레벨을 열여야 한다. 이는 우클릭 후 Open Level을 검색해보면, Open Level (by name)과 Open Level (by object reference) 이렇게 2가지가 보이는 것을 알 수 있다. 우리는 여기서 Open Level (by name)을 선택해주었다. 함수 이름에서 알 수 있듯이 이름을 통해서 레벨을 연다는 것을 알 수 있다. 그렇다면 이름을 어떻게 알 수 있을까? 바로 Get Current Level Name 함수를 통해 쉽게 얻는 것이 가능하다. 그렇다면 레벨이 ..

멤버 함수 기존의 Spawn Projectile 함수를 보면 탄약을 스폰한 이후 해당 탄약의 전방 벡터를 얻고, 4000을 곱해 충격량량을 추가해주는 부분은 모두 BP_Projectile 인스턴스를 사용한다. 따라서 이 모두를 BP_Proejectile 클래스로 옮겨 데이터를 다루는 코드가 데이터 자체와 같이 살 수 있게 만들고자 한다. 함수가 조작하는 데이터와 함께 사는 것 이것은 객체 지향 프로그래밍의 핵심이기도하다. 이를 위해 BP_Projectile에 직접 함수를 추가해준다. 이렇게 추가한 함수를 멤버 함수라고 하며, 멤버 함수는 클래스의 함수로 항상 특정 인스턴스에서 호출되는 함수이다. 위는 테스트 삼아 BP_Projectile 클래스에 멤버 함수 Print Your Name을 추가해준 상태이다..

순수 함수 직전 강의를 통해 만들었던 Has Ammo 함수의 경우 다소 이상하다고 여길 만한 점이 있다. 그것은 바로 해당 함수에 실행핀이 굳이 필요한가? 이다. 그렇다면 함수에서 실행핀을 없앨 수 있을까? 또 실행핀이 필요한 함수와 그렇지 않은 함수는 어떤 경우가 있을까? 그에 관련해서 우선 사이드 이펙트라는 것을 알아야 한다. 사이드 이펙트란 함수가 실행되고 식별 가능한 효과가 생기는 것을 의미한다. 다음 함수들의 예시를 살펴보자. Print string -> 문자열이 보임 Add Impulse -> 충격이 가해지며 이러한 현상이 눈에 보임 Set Ammo -> 변수의 설정 값이 바뀜 이렇게 문자열이 보이거나, 충격이 가해지거나, 변수의 설정 값이 바뀌는 것 이것들은 함수가 실행된 후에 생기는 현상들..

리턴 타입 기존에 원래 있던 노드들을 함수로 합쳐줬지만, 이번에는 아에 새롭게 함수를 만드는 것을 테스트 해보자. 이벤트 그래프 좌측 칸의 함수 오른쪽에 있는 +버튼을 통해 함수를 생성할 수 있다. 생성하고 나면 위와 같이 해당 함수를 이벤트 그래프로 드래그하여 생성할 수 있다. 해당 함수를 더블 클릭하여 보면 처음에는 시작 노드만 존재한다. 그리고 오른쪽 디테일 탭을 보면 입력과 출력 칸을 볼 수 있다. 입력칸에 Text1 및 인티저를 설정해주면 시작노드 실행핀 아래에 해당 변수가 입력값으로 생기는 것을 볼 수 있다. 이를 테스트 삼아 Print string에 연결해주었다. 이벤트 그래프로 돌아가 보면 우리가 설정해준 입력값이 그대로 반영되어 있는 것을 볼 수 있다. 이번에는 출력 칸을 살펴보자. 출력..

함수 현재 레벨 블루 프린트 화면을 보면 다음과 같이 다소 복잡하게 보인다. 이를 위해 특정 기능을 가진 노드들을 묶어 하나의 함수로 깔끔하게 정리가 가능하다. 함수로 묶기에 앞서 원하는 노드들을 묶어 코멘트 블록을 묶는 방법도 있다. 원하는 노드들을 드래그 후 C를 누르면 위와 같이 코멘트 블록으로 표시된다. 해당 코멘트 블록은 우측 디테일 탭에서 이름 수정이 가능하다. 하지만 오히려 겉보기에 더 난잡하다고 느껴질 수도 있다. 우선 탄약을 발사하는 부분을 함수로 묶어준다. 플레이어 폰을 가져와서 충격을 주는 노드들 까지 모두 드래그하여 우클릭을 하면 함수로 접기가 존재한다. 이를 사용하여 하나의 함수로 묶어줄 수 있다. 위에 많은 노드들이 위와 같이 하나로 묶인 것을 볼 수 있다. 해당 함수는 좌측 상..

Booleans and Branches 저번에 탄약을 20개로 정하고 쏠 때마다 감소하도록 해주었다. 하지만 다 떨어졌음에도 불구하고 음수를 출력하는 것을 볼 수 있었다. 이를 위해 Branch 와 Boolean을 이용하여 탄약이 0개 미만이면 발사를 멈추도록 해줄 수 있다. 먼저 Booleans는 yes or no에 대한 데이터 타입이다. (참, 거짓) 그리고 branch는 위 Booleans 값에 따라 하거나, 하지 않거나를 결정한다. (참 -> 행동 o, 거짓 -> 행동 x) 또한 비교 연산자를 통해 크거나, 작거나, 같거나 등 비교를 통해 반환 받은 부울 또한 참고할 수 있다. 우선 우리는 탄약 갯수가 0개보다 많을 때만 발사가 이루어져야 한다. 이를 위해 우선 Greater 노드를 가져와 Get..

변수현재 발사체는 갯수 조절 없이 무한으로 발사할 수 있다.발사체의 갯수를 정해 일정 갯수를 발사하면 더 이상 발사가 불가능하게 만드는 것이 더 바람직하다.이를 위해서 변수가 필요하다. 변수란 정보를 담고, 조작하고, 참조하는걸 뜻한다.핵심은 정보를 담는 것이다.예를 들어 탄약이라고 이름 붙인 상자를 생각하면 된다.해당 상자에 20이라는 값을 넣고, 탄약이 얼마나 남았는 지를 체크해준다.탄약이라는 이름, 20이라는 데이터, 정수라는 형식을 가지게 된다. 우선 레벨 블루 프린트의 좌측을 보면 변수를 추가하는 부분이 바로 보인다.여기서 탄약이라는 이름의 변수를 추가해주고, 타입을 정수(인티저)로 바꿔준다. 해당 변수의 기본값 설정이 가능한데, 우선 레벨 블루 프린트를 컴파일을 해주면 위 이미지의 빨간 박스로..

충돌 메시저번에 만들었던 선반에 이어 선반 및 바닥에 배럴을 추가해준다.특히 바닥에 놓은 배럴은 배럴 위에 배럴을 쌓아 탑을 형성해준다.이후 플레이를 해보면 선반에 있는 배럴과 배럴 탑이 모두 위로 튀어 오르는 것을 볼 수 있다. 이는 언리얼에서 충돌을 계산하는 방식 때문에 일어나는 문제이다.먼저 와이어 프레임으로 보면 다음과 같이 복잡한 메시로 볼 수 있다. 이후 플레이어 콜리전으로 전환하면 다음과 같은 울퉁불퉁하여 충돌이 깔끔하게 일어날 것 같지 않은 메시를 볼 수 있다. 이를 고치기 위하여 우선 배럴 메시를 더블 클릭하면 해당 메시에 대한 에디터가 나온다.여기서 콜리즌에 대한 수정이 가능하며, 우선 기존의 울퉁불퉁한 콜리전을 삭제해준다. 그리고 다음과 같이 10면체 Z 단순화 콜리전을 추가해주..

액터 컴포넌트 이번엔 기존의 액터에 여러 개의 요소를 추가하고 이를 하나의 액터처럼 움직이도록 물리학 적용해준다. 이를 위해 기존에 배치했던 선반 메시를 이용한다. 현재 선반은 양쪽 지지대만 있고 내용물이 없는 상태이다. 해당 메시는 SM_Rack01이고 안에 내용물은 SM_Rack02이다. SM_Rack02를 단순히 끌어서 SM_Rack01에 붙이는 것을 시도해볼 수 있다. 이 경우 겉으로 보기엔 멀쩡해보이지만 실제 플레이를 해서 발사체를 발사해 맞춰보면 물리학이 비정상적으로 적용하고 있는 것을 확인이 가능하다. 이를 위해 SM_Rack02 메시를 뷰포트로 드래그 하는 것이 아닌 SM_Rack01을 누르고 우측 디테일 탭에 해당 메시의 StaticMeshCOmponent아래에 자식 요소로 들어가도록 드..