GAMES -> Thrid Person, BLUEPRINT, DESKTOP, MaximumStarter Content, Raytracing 둘다 체크 해제특히 Start Content 는 체크 해제해야 프로젝트가 훨씬 빨리 생성됨.Raytracing은 나의 GPU가 레
씬(레벨)은 액터라 불리는 다양한 오브젝트로 구성됨.아웃라이너는 레벨에 있는 액터를 텍스트로 표현한 것뷰포트는 해당 액터들을 시각적으로 표현한 것레벨에 새로운 액터를 추가하는 법툴바에 초록색 플러스 버튼 Quickly add to the project 클릭시 액터를 선
블루프린트란? 시각 프로그래밍 언어사진의 왼쪽에 있는게 블루프린트. 텍스트 기반인 C++와 상반됨.블루프린트는 언리얼 전용이라 언리얼 에디터에서 바로 프로그래밍할 수 있지만, C++는 업계 표준 언어라 프로그래밍하려면 vscode 등의 별도의 에디터가 필요함.블루프린트
프로젝트 생성 > Blank > BLUEPRINT > Starter Content 체크 후 생성에디터 밑에 Content Browser : Content 폴더의 파일 브라우저Content > StarterContent 폴더에 보면 Maps 폴더가 있는데맵이란 이 게임에
블루프린트에서 프로그래밍은 전기 회로를 연결하는 것과 비슷함.Print String을 선택하면 위와 같은 노드가 생성됨. In String 안의 텍스트를 수정할 수 있음.우클릭 -> begin play 검색 -> Event BeginPlay 선택Event BiginPl
기본적으로 씬 안에 있는 모든 오브젝트는 물리 법칙의 영향을 받지 않음.그 이유는 CPU가 Physics를 시뮬레이션하는데 부담이 있기 때문에 언리얼은 씬 안의 오브젝트에 기본적으로 시뮬레이션을 적용하지 않음. 따라서 필요하다면 명시적으로 활성화 해줘야 함.오브젝트 선
오브젝트에는 종종 매우 많은 데이터가 있을 수 있는데, 이러면 컴퓨터로 다루기에 너무 무거워질 수 있으며, 해당 오브젝트들을 여러 개 복사할 경우 실제로 매우 무거워짐.그러는 대신 레퍼런스라고 하는 스마트한 구조체를 사용함. 레퍼런스를 사용하면 작업시 해당 오브젝트로
큐브에 스페이스바를 누르면 점프하게 하고 싶음.블루프린트 창에서 우클릭 -> Space Bar 클릭이번에는 실행 핀이 2개. 한 개는 스페이스바가 눌렸을 때, 하나는 놓았을 때여러 노드를 이동하고 싶으면 드래그와 쉬프트로 여러 노드를 동시에 클릭하여 움직일 수 있음.p
오브젝트 프로그래밍의 진정한 힘은 클래스와 인스턴스를 사용할 때 나타남.클래스 : 기본 데이터와 기능을 가지며 인스턴스, 즉 오브젝트를 만들 수 있는 설계도인스턴스 : 클래스의 고유한 데이터 사본을 가지는 실제 오브젝트. 이러한 구조에는 두 가지 이점이 있음서로 다른
노드 사이의 연결 제거 : ALT 를 누른 상태에서 해당 연결 선 좌클릭노드 사이의 연결 방향 변경 : Ctrl 누른 상태에서 해당 연결 선 드래그스폰 : 플레이 중에 오브젝트를 생성목표 : 스페이스바를 누르면 씬에 없던 발사체가 스폰됨Space Bar 노드의 pres
데이터 타입 : Integer (정수), Float (실수) , String (문자열) , Bool(true/false)블루프린트에는 구조체라는 것이 있음.구조체는 오브젝트와 비슷하지만, 보통 매우 작으며 레퍼런스를 사용하지 않는다는 점에서 오브젝트와 차이점이 있음.너
목표 : 내가 보고 있는 곳에서 발사체가 발사됨. 게임 플레이 중에 F8을 누르고 조금 뒤로 이동하면 원래 내가 있던 곳에 검은색 구체가 생긴 것을 확인할 수 있음. 그리고 게임 플레이 중인데도 오브젝트를 클릭하여 선택할 수 있음. 내가 있던 곳에 생긴 검은색 구체
벡터 : 3D 공간에서의 방향과 크기컴퓨터 프로그래밍에서의 벡터 : 3개의 부동소수점 값 (x, y, z)벡터의 덧셈위치 벡터(pos)+ 이동 벡터(move) = 새로운 위치 벡터(newPos)순서를 바꿔도 결과는 마찬가지newPos.x = pos.x + move.xn
목표 : 새로운 레벨인 공장을 만들고 창문을 추가하며 언리얼에 포함된 지오메트리 브러쉬를 사용할 것임File > New Level > Basic 생성지오메트리 브러시를 사용할 것임. BSP라고도 부르는데, Binary Space Partioning 의 약자로 브러시
목표 : 재료와 조명을 추가하여 더 나은 씬으로 만들 것임.현재 맵, 레벨은 새로 만든 레벨이므로 이전 레벨에서 만든 블루프린트 작업 등은 전부 적용되지 않음. 그러나 이전 레벨에서의 블루프린트 작업을 복붙하는건 쉬움.이전 맵을 열고 레벨 블루프린트를 연 뒤, 컨트롤
위와 같은 오브젝트가 있을때, 가운데에 선반 오브젝트를 단순히 드래그 앤 드롭으로 놓을 수도 있지만 그러면 하나의 오브젝트가 아닌 두 개의 오브젝트가 Physics에 의해 연결돼있는것 처럼 보이는 것 뿐임.따라서 두 오브젝트를 하나의 오브젝트처럼 하려면 어떻게 해야할까
Barrel 오브젝트를 쌓아올리고 Simulate physics 를 활성화시키면 Barrel 들이 튕겨져 나가게 됨. 참고로 Barrel 오브젝트를 쌓아올릴때 alt 누른상태로 위로 이동시켜 복사할 수 있지만, 오브젝트를 드래그하고 그 위에 드롭하면 언리얼이 자동으로
목표 : 남아있는 발사체(탄약)의 개수를 화면 왼쪽에 보여주려고 함남아있는 탄약의 개수를 변수에 저장하고, 이 변수를 화면에 출력하려고 함.언리얼엔진에선 변수를 어떻게 생성할까?블루프린트의 Event Graph 창으로 가서 Window > My Blueprint 클릭블
목표 : 지금까지 작성했던 블루프린트의 엉망인 상태를 함수를 사용해 깔끔하게 정리할 것임.현재 블루프린트의 상태를 보면 뭐가 뭔지 한눈에 알아보기 힘듦.이를 위해 대부분은 관련된 블록들을 드래그로 선택하고 c를 눌러 코멘트 블록을 생성함. 그리고 코멘트 블록의 이름을
목표 : 처음부터 직접 함수를 생성하고, 함수에 입력을 주는 법과 출력 노드를 추가 하는 법을 알아볼 것임.기존에 있던 노드들을 묶어서 하나의 함수로 생성하는 방법 말고 아예 새로운 함수를 생성하려면My Blueprint 탭에서 FUNCTIONS 의 +버튼을 클릭하여
목표 : 함수에서 실행 핀을 제거하는 방법과 이게 왜 필요한지?Have Ammo 란 함수는 Ammo 가 0보다 크면 true를, 아니면 false를 리턴하는 함수그런데 이 함수가 실행핀을 가지고 있는건 좀 어색함.왜 어떤 함수는 실행핀이 필요하고, 어떤 함수는 필요 없
Spawn Projectile 함수의 일부인 위의 노드들은 전부 BP_Projectile 클래스의 인스턴스를 사용함.그렇다면 이 코드블록들을 전부 BP_Projectile 로 옮기면 좋지 않을까?데이터를 다루는 코드가 데이터 자체와 함께 살 수 있도록 하기 위해.이것이
레벨 블루프린트에서 우클릭 > Open Level 검색 > Open Level(By Name) 선택입력 데이터로 레벨의 이름을 받음. 따라서 현재 레벨의 이름이 필요함.현재 레벨의 이름을 문자열 형태로 반환하는 Get Current Level Name 노드를 생성해서
프로젝트에 필요한 에셋 다운로드플레이할 캐릭터 에셋인 Stylized Character Kit : Casual 01 다운로드배경으로 사용할 에셋이 있는 Unreal Learning Kit 다운로드Unreal Learning Kit는 기존과 달리 프로젝트에 적용하는 방법
Source Code : "사람"이 읽을 수 있는 형태의 코드. 우리가 작성하는 코드Binary Executable Code : 기계가 읽을 수 있는 코드. 0과 1로 구성된 바이너리 코드로, CPU와 GPU에서 빠르게 실행하도록 만듦.따라서 사람이 읽을 수 있는 코드
먼저 기본 에디터를 바꿔줘야 함. 프로젝트 설정이 아닌 에디터 설정.Edit > Editor Preferences > Source Code > Visual studio code생성하려는 클래스는 C++로 프로그래밍한 움직이는 플랫폼.메뉴바 Tools > New C++
헤더파일에 클래스가 정의 돼있고, cpp파일에서 구현해야 할 함수들이 있음.먼저 BeginPlay 함수에 주목cpp파일에서 BeginPlay 함수를 구현하는데, BeginPlay 함수는 게임 플레이 시 호출되는 함수.즉, 게임 플레이시 BeginPlay 함수 안에 구현
구조체 Vector 타입의 변수를 생성하고 사용할 것임.언리얼 C++에서 Vector 타입의 변수를 선언할땐 FVector 키워드를 사용.Vector 앞에 붙는 F는 구조체라는 것을 의미함. 언리얼만의 명명 규칙.MovingPlatform 클래스 앞에 A를 붙여서 Ac
Tick을 이해하려면 게임 루프라는 개념을 이해해야 함. 게임 루프로 대부분의 게임 엔진을 구축함.Game Loop1\. 먼저 게임 엔진이 플레이어의 입력을 가져옴. ex) 마우스, 키보드 입력2\. 입력에 따라 게임 상태를 업데이트함.3\. 게임 엔진에서 게임 상태를
헤더파일에서 클래스의 새 멤버변수 생성.UPROPERTY의 괄호 안에는 여러 개의 인자를 쓸 수 있는데, 이번에 Category 를 사용. Category 키워드를 사용하면 해당 변수가 Details 탭에 위와 같이 섹션으로 생성됨.그리고 cpp 파일을 위와 같이 작성
현재 우리는 앞으로만 이동하는 플랫폼을 구현함.그리고 이제 너무 많이 이동하면 다시 뒤로 돌아오게 하려고 함.이를 위해 이동한 거리를 알아야 함. 어떻게 구현할까?플랫폼의 시작 위치를 알기 위해 헤더파일에서 클래스 멤버변수 StartLocation 벡터 생성. 이 변수
불루프린트에서 사용했던 Branch 노드와 비슷한 기능을 하는 if 문if 문을 사용하여 플랫폼의 이동 거리가 설정한 이동 거리보다 커질 경우 반대 방향으로 이동하게 하려고 함.먼저 헤더파일에 플랫폼의 이동거리를 100으로 설정.cpp 파일에서 if 문의 조건문으로 이
이제 움직이는 하얀색 큐브가 아닌, 에셋에서 플랫폼을 사용할 것임.그리고 이동하는 플랫폼에 각각 설정을 따로 해주지 않기 위해서 클래스를 사용.현재 움직이는 캐릭터는 에디터 내에서 블루프린트 클래스를 사용하여 생성.이 방법말고 C++로 생성한 클래스를 기반으로 에디터에
이전에 만들었던 C++ 클래스를 기반으로 한 새로운 블루프린트 클래스 생성BP_PushingCube 블루프린트 클래스 생성 후 cube 모양의 스태틱 메시 컴포넌트 생성.그리고 크기가 작으므로 모든 방향으로 10배씩 조정.이때, Transform에서 자물쇠 표시를 누르
일반적으로 언리얼에서는 시작할 때 캐릭터를 월드 특정 위치에 배치하지 않음.배치하기 보다는 플레이어 스타트 지점에서 캐릭터가 스폰되게 하는 경우가 많음.이렇게 하는 가장 큰 이유는 플레이어의 시작 방식을 좀 더 유연하게 할 수 있기 때문임.예를 들어, 플레이를 시작할
이전에는 디버깅할때 블루프린트에서 Print String 노드를 사용하여 화면에 변수 또는 값을 출력했음.C++ 에서 디버깅하는 방법은 UE_LOG 함수를 사용하는 것.UE_LOG 함수의 첫 번째 인자는 로그 카테고리 유형두 번째 인자는 얼마나 시급한지, 즉 로그 수준
문자열 타입 FString 를 사용하여 로그에 출력 위와 같이 작성하고 실행이 제대로 되면 좋겠지만, 컴파일 에러가 발생함. 그 이유는, UE_LOG 함수는 인자로 FString 타입을 사용할 수 없음. 따라서 \MyString 으로 써줌으로써 FString 타입
클래스의 새로운 멤버 함수를 생성 및 구현하려고 함. 어떻게 할까?함수의 선언은 헤더 파일에 하고, 함수의 정의(구현)는 cpp 파일에서 함.클래스의 새로운 멤버 함수 MovePlatform 를 생성하려고 함.헤더파일에서 다음과 선언.이때, 기존에 생성했던 변수와 Mo
먼저 헤더파일에 FRatator 멤버변수 RotationVelocity 생성.기본적으로 회전하지 않길 원하므로, 디폴트값을 따로 설정하지 않음. 그러면 자동으로 디폴트값인 0,0,0 으로 설정됨.그리고 cpp 파일에서 RotatePlatform 함수를 위와 같이 구현.
지금까지 구현한 기능에서 게임을 즐길 수 있는 더 많은 요소를 추가함.먼저 새로운 섬을 추가하고, 해당 섬에 가기 위해 계단을 올라가야함.그런데 게임 플레이 시 계단이 너무 가파라서 안올라가짐.이를 위한 설정으로 캐릭터 클래스의 블루프린트 에디터로 이동왼쪽의 Compo
에픽게임즈 마켓플레이스에서 Medieval Dungeon 에셋 다운로드해당 에셋팩을 추가할 프로젝트 생성일인칭 템플릿을 사용할 것이므로 Games > First Person > C++, 체크박스 해제이후 다운받은 에샛 팩을 방금 생성한 프로젝트에 추가새로운 Empty