[인생언리얼5] 04. 리플렉션 시스템
·
언리얼 엔진/[서적] 인생 언리얼5
1. 리플렉션언리얼 엔진에서 코드에 구현된 클래스와 변수, 함수 등을 미리 읽고 조사하는 기능이다. int 자료형은 플랫폼마다 메모리를 차지하는 크기가 달라지는 경우가 발생하므로 int32 정수 자료형을 사용한다. 이런 이유 때문인지 int 자료형의 경우 UPROPERTY 기능을 사용할 수 없다.1) UPROPERTY 옵션- EditAnywhere- EditInstanceOnly- EditDefaultsOnly- VisibleAnywhere- VisibleInstanceOnly- VisibleDefaultsOnly2) UFUNCTION 옵션- BlueprintCallable- BlueprintPure : Get으로 시작하는 노드로 호출 가능- 델리게이트 처리할 때도 사용 2. 클래스 전방 선언헤더파일에 ..
[인생언리얼5] 03. 실행 파일로 패키징하기
·
언리얼 엔진/[서적] 인생 언리얼5
패키징패키징 과정 1. C++ 클래스 파일과 블루프린트 파일들을 모두 컴파일한다. 2. 모델링, 음원 파일과 같은 리소스 파일들을 앱을 실행할 디바이스에 적합한 포맷으로 변환한다. (쿠킹) 3. 컴파일된 파일과 쿠킹된 파일을 묶어서 플랫폼에 맞는 실행 파일로 만든다.ex) PC → exe 파일, 안드로이드 → apk 파일기본 레벨 설정  [Edit] - [Project Settings] - [Maps & Modes] 탭에서 Game Default Map에 기본 레벨로 설정할 맵을 지정하면 됩니다.빌드 구성 이제 어떤 목적으로 패키징을 할 것인지 설정해야 합니다. [Edit] - [Project Settings] - [Packaging] 에서 Project 속성입니다. 빌드 구성설명Debug프로젝트 디버깅..
[인생언리얼5] 02. 세이브 및 로드
·
언리얼 엔진/[서적] 인생 언리얼5
SaveGameBP_SaveGame 생성 간단한 데이터를 저장하는 경우에는 블루프린트만으로 구현이 가능한데요.SaveGame 클래스를 상속받는 블루프린트를 하나 생성해주도록 합시다 !해당 클래스의 이름은 BP_SaveGame으로 설정해주었어요 !목표 변수 설정 세이브 및 로드를 적용할 변수 Score를 만들어주었구요 !세이브 Integer 자료형을 매개변수로 받는 Save Score 함수를 구현했어요 ! Create Save Game Object 함수를 호출해서 실제로 데이터를 저장할 클래스를 지정해줍니다. 해당 클래스를 Instance로 받아주고, 매개변수의 값을 Score 변수에 저장합니다. Score 변수에 데이터를 저장했으니, 저장한 상태로 Slot을 지정해주면 Slot Name으로된 시스템 슬롯..
[인생언리얼5] 01. 모델링, 머티리얼 속성
·
언리얼 엔진/[서적] 인생 언리얼5
모델링3ds Max, 마야, 블렌더 등 3D 모델링 아티스트들이 제작한 모델링 파일을 임포트 해야하는 상황이 있을 텐데요 !Import 시 모델 데이터를 어떻게 처리해서 가져올 것인지 설정할 수 있는 옵션을 살펴봅시다. 모델링의 방향과 크기가 언리얼 엔진에 맞춰서 작업되지 않았다면, 방향이나 Pivot이 어긋나 있을 수 있습니다.Transform 속성에서 위치, 회전 값을 조정해서 언리얼 엔진에 맞게 변환해줄 수 있어요 ! 또한, 원본의 사이즈를 조절해야 할 때에는 균등 스케일 (Uniform Scale) 값의 조정을 통해 맞춰줄 수 있습니다. 외부 3D 모델링 프로그램의 좌표계와 언리얼 엔진의 좌표계가 다른 경우가 종종 있다고 해요. 이럴 때에는 기타 속성의 Force Front XAxis (전방 X축..
[언리얼엔진] 05. Enemy 플레이어 추적
·
언리얼 엔진/[개인프로젝트] FPS 구현 맛보기
Enemy 기능 구체화코드 작성 막상 Enemy 클래스를 구현하려고 보니, 빼놓은 것들이 좀 있더라구요. 기본적으로 몬스터들은 플레이어를 바라보며 다가와야합니다. 여기서 필요한 건 "회전" 기능과 "이동" 기능입니다. 따라서, 이동속도와 회전속도가 필요해요 !언리얼에서는 캐릭터 이동에 특화된 "CharacterMovementComponent"가 존재하죠. 컴포넌트의 기능을 활용하기 위해 Actor를 상속받는 구조에서 Character를 상속받는 구조로 변경해주도록 하겠습니다.마지막으로는 공격 기능도 추가해주어야 하니, Attack 함수도 넣겠습니다. Enemy.h더보기#pragma once#include "CoreMinimal.h"#include "Apocalypse/ApocalypseCharacter...
[언리얼엔진] 04. Enemy 클래스 구현
·
언리얼 엔진/[개인프로젝트] FPS 구현 맛보기
Enemy코드 작성 이번 프로젝트에서 제일 까다로운 부분인 것 같아요. 근거리, 원거리, 보스 몬스터를 구현해야 하는데 어떻게 구현해야 효율적으로 구현했다고 소문이 날까요 ?우선, 근거리-원거리-보스 몬스터가 공통적으로 갖는 기능들이 있겠죠 ? 추상 클래스를 작성해서 상속받도록 해줍시다 ! 오늘 중으로 프로젝트를 끝내야 하는 만큼 시간이 없으니 생각나는대로 쫘르륵 작성해봐요 ! #pragma once#include "CoreMinimal.h"#include "GameFramework/Actor.h"#include "Enemy.generated.h"UCLASS()class APOCALYPSE_API AEnemy : public AActor{ GENERATED_BODY() public: AEnemy(); ..
[언리얼엔진] 03. 총 발사 기능 구현
·
언리얼 엔진/[개인프로젝트] FPS 구현 맛보기
총 발사 방식총알 발사하는 방식을 어떻게 구현할까 생각해보니, 방법이 2가지 정도 떠올랐습니다 !첫 번째는 마우스 우클릭을 하면 투사체가 생성되고, 생성된 투사체로 적과 충돌 판정을 처리하는 방법이에요.두 번째는 마우스 우클릭을 하면 조준하고 있는 부분에 적이 있는 지 체크한 후, 존재한다면 바로 데미지를 주는 방법입니다 ! 첫 번째 방법 같은 경우에는 유니티에서 한 번 구현을 해본 경험이 있었고, 즉각적인 반응이 오지 않는다는 점에서 재미가 떨어지더라구요.. 물론 총알 속도를 극한으로 높이면 되긴 하지만 그럴 바에는 두 번째 방법으로 구현하는 게 메모리 측면에서도 구현 방법 측면에서도 효율적이라고 생각했습니다 ! 결론적으로 저는 LineTracing 기능을 활용해서 마우스 우클릭 시 즉각적인 리액션을 ..
[언리얼엔진] 02. 맵, 캐릭터 세팅
·
언리얼 엔진/[개인프로젝트] FPS 구현 맛보기
프로젝트 생성언리얼엔진에서 제공하는 1인칭 템플릿으로 프로젝트를 생성했습니다 !중간에 큰 총소리가 나니, 소리 줄여서 보세요 ! 팔도 붙어있고, 캐릭터의 기본적인 기능도 구현이 되어있습니다. 무엇보다 총 발사 기능도 구현이 되어있는게 매우 편하게 할 수 있을 것 같아요 !다만, 몇 가지 수정사항이 보이네요. 총이 유탄 발사기 같다는 점 ! 맵 세팅이 안 되어있다는 점 ! 그리고 마우스 왼쪽 버튼을 누르고 있어도 한 발만 나간다는 점 !한 번 차근차근.. 천천히.. 수정해볼까요 ? 맵 세팅어떤 맵이 좋을까 하다가 제가 직접 제작하기에는 그래픽적으로 너무 못 생길 것 같아서 (제가 모델링에 소질이 없어요 ..) 에셋을 구하기로 했습니다 ~ 몬스터와 전투를 벌여야하니 좀 넓은 맵으로다가 뭐가 없을까 찾아봤는데..