게임의 모든 콘텐츠와 코드를 저장해놓은 파일 .uproject오브젝트들을 배치하여 게임 장소를 구성한 파일 .ump게임을 구성하는 모든 레벨이 담긴 컨테이너.오브젝트의 프로퍼티와 기능을 정의하는 코드.C++이나 블루프린트로 생성한다.부모 클래스의 멤버를 자식 클래스에게
그냥 int를 쓰면 컴파일러, 플랫폼에 따라 다를 수 있으므로 언리얼에서 제공하는 정수 타입을 쓰는 것이 권장된다.일반적인 문자열을 사용할 때현지화 텍스트가 필요할 때자주 사용되는 문자열을 식별자로 지정해서 문자열을 비교할 때소모되는 메모리가 적고 CPU 시간 절약멀티
언리얼에서 클래스를 생성했을 때 자동으로 생성되는 함수들.일반적으로는 생성자, BeginPlay(), Tick()의 세 가지가 있다.클래스가 생성될 때 한번 호출.초기값 설정할 때에도 사용.게임이 시작되거나 월드에 스폰되었을 때 호출.매 프레임마다 호출.Tick이 불필
변수에 UPROPERTY를 지정하면 언리얼 에디터와 연동됨.엔진에 의해 가비지 콜렉션, 리플렉션 등이 관리된다.에디터 창에서 아키타입(초기값)만 편집 가능어떤 Visible 지정자와도 호환이 안됨블루프린트에서 읽거나 쓸 수 있음저장하지 않고 메모리에 임시 보관하는 변수
액터가 Y축을 따라서 이동하고 있을 때X축 기준 회전 = RollY축 기준 회전 = PitchZ축 기준 회전 = Yaw위키피디아 - Aircraft principal axeshttps://en.wikipedia.org/wiki/Aircraft_principal
월드에 있는 Object 나 Actor 에 대한 값이나 주소(reference)를 담는 프로퍼티.Instance Editable(눈 모양 아이콘)을 체크하면 레벨 내 배치된 각 인스턴스의 값을 수정할 수 있음이벤트 그래프에서 사용할 수 있는 함수, 흐름 제어, 변수 등
Print String 함수를 사용한다.블루프린트출력 결과UE_LOG 매크로 함수를 사용한다.C++ 코드출력 결과
나중위치 = 시작위치 + (속력 * 시간) 위치 (x_0) GetActorLocation()으로 액터의 현재 위치를 받고, SetActorLocation()으로 액터의 새 위치를 설정한다. 속력 (v) FVector::Normalize를 써서 단위 벡터를 방향으로
Input parameter로 Direction과 Speed를 받게 함키 입력값을 받아 위치 변경 함수(Translate)에 입력됨 함수를 복사 붙여넣기하면 다른 클래스에서 사용 가능
플레이어의 위치를 향해 추적하는 오브젝트를 만든다.이전 글: 목적지로 추적하는 벡터= 나중위치 - 처음위치
키 바인딩 BP_Bullet Bullet 스폰 연속 발사
총알이 적에 충돌하면, 적이 플레이어에 충돌하면 파괴되는 기능을 구현했다.이전 글: BP_Bullet의 CollisionBox가 BP_Enemy만 Overlap하게 설정결과
C++ 코드로만 문을 만들어보았다.Overlap되는 물체가 플레이어인지 체크하는 부분이 구현되어있지 않다.Timeline이나 Tick 함수를 사용하지 않아 딱딱하게 열린다.
블루프린트로 다양한 문을 만들어보았다.함수를 사용하지 않고 Physics Constraint Component를 붙여서 Door의 회전각을 90도로 제한시켰다.Physics Constraint ComponentBox Component에 Overlap이 감지되면 Time
기존에 만들었던 Cpp 문을 개선해보았다.플레이어가 Line Trace하면 문이 OnInteract 메소드를 호출하게 만들었다.문이 OnInteract 메소드 호출 시, Timeline과 Float Curve로 문이 부드럽게 열리게 수정했다.언리얼 삼인칭 템플릿 캐릭터
블루프린트 없이 100% C++ 코드로만 엘리베이터를 만들어보았다.지난번에 만든 C++ 문의 코드를 응용했다.https://velog.io/@woojoo0407/C-문-만들기CapsuleCollision에 Overlap시 OnOverlapBegin과 OnOve
std::vector와 비슷하게 사용할 수 있는 동적배열std::map과 비슷하게 사용할 수 있는 동적배열 (Key-Value pair)중복 원소를 허용하지 않는 배열언리얼 문서 - TArrayhttps://docs.unrealengine.com/4.27/ko
BP로 만들었던 플레이어 이동을 C++로 옮겨보았다.Link: https://velog.io/@woojoo0407/BP-플레이어-이동인생 언리얼 교과서
헤더 소스 // Begin Play boxComp->OnComponentBeginOverlap.AddDynamic(this, &AEnemy::OnMyComponentBeginOverlap); // 함수 바인딩 // Actor Begin Overlap void AEn
delayTime마다 반복해서 함수를 호출하는 타이머를 만든다.Arrow Component의 위치에 적(Enemy)을 Spawn하는 함수를 타이머에 바인딩한다.언리얼 문서 - 게임플레이 타이머https://docs.unrealengine.com/4.27/ko/
BP와 ABP의 차이점은 무엇일까?Blueprint: 기능을 담당 (이동 기능, 점프 기능)Animation Blueprint: 스켈레탈 메쉬의 애니메이션을 담당※ 즉, 언리얼에서 애니메이션이란 스켈레탈 메쉬의 움직임을 말한다.Animation Mode: 스켈레탈 메쉬
C++에서 타이머를 활용하여 Enemy가 시간 간격을 두고 EnemyBullet을 생성하게 만든다.
Build.cs 파일에서 UMG 모듈을 추가한다.위젯 블루프린트에서 Text를 추가한다.C++로 UserWidget 클래스를 생성한다.C++에서 동일한 이름으로 UTextBlock를 선언하고, UPROPERTY 지정자로 에디터와 연동시켜준다.Game Mode에서 위젯을
Button_Restart, Button_Quit을 만든다이것을 C++로 만들어보자.함수를 바인딩한다.
SaveGame 클래스로 Instance를 만들어 Slot에 저장하고불러올 때는 저장한 Instance를 불러온다.블루프린트로 게임 저장하기https://docs.unrealengine.com/4.26/ko/InteractiveExperiences/SaveGa
디버그용으로 함수 이름, 라인을 출력하는 유틸리티 매크로를 만들어본다.전역으로 사용할 매크로 함수를 프로젝트 헤더에 설정한다.FString(\_\_FUNCTION\_\_) : 함수 이름을 문자열로 표현함FString::FromInt::(\_\_LINE\_\_) : 호출
컴포넌트 구조
AController 클래스에 입력값을 저장해놓고, 필요한 곳(Character Movement Component)에서 꺼내 사용하는 구조이동, 점프회전(TPS 게임 기준) 항상 카메라가 캐릭터의 정면 방향을 바라보게 한다. CharacterSpring Arm Comp
📄 헤더 > 📄 소스 >ATPSPlayer::ATPSPlayer() { // ... > // 총 메쉬 설정 gunMeshComp = CreateDefaultSubobject(TEXT("gunMeshComp")); gunMeshComp->SetupAtt
📄 Bullet.h >cpp #include "Bullet.h" #include "Components/SphereComponent.h" #include "GameFramework/ProjectileMovementComponent.h" > // Sets default
📄 총알 발사하기 ✏️ TPSPlayer.h > ✏️ TPSPlayer.cpp > 📄 연사 (Auto Fire) ✏️ TPSPlayer.h > ✏️ TPSPlayer.cpp >
2초 후에 사라지는 총알을 만든다.이하 세가지 방법 모두 결과는 같다.
UMG 모듈을 추가한다.BeginPlay : 게임 시작 시 UserWidget을 생성한다.SetupPlayerInputComponent : 키 입력시 호출되는 함수(BindAction)에서 위젯을 Viewport에서 붙이거나 제거한다.WBP_Sniper를 만든다.BP_
직선을 그어서 채널에 Block되는 액터를 반환한다.
Ignore : Event 발생 없음Overlap : Overlap Event 발생 (Generate Overlap Event == true일 경우)Block : Hit Event 발생 (Simulation Generates Hit Event == true일 경우)우선
📄 Blueprint 📄 C++ >
AI Controller에 의해 컨트롤되는 대상 (Body)Pawn이 AI Controller를 가지고 있음AI가 빙의한 Pawn을 조종하는 의지 (Soul)보통 AI Controller가 Behavior Tree를 실행시킴상황에 따라 실행할 행동을 판단함 (Brain
로컬머신에서 실행 원격머신에서 클라이언트를 받지 않는 서버로컬 플레이어 없이 사운드, 그래픽, 사용자 입력, 기타 플레이어 관련 기능을 제거한 전용 서버로컬 플레이어가 있는 서버로, 원격 플레이어에게도 접속을 허락함Dedicated / Listen 서버로 접속되는 클라
📄 Header 📄 Cpp
더이상 참조되지 않거나 소멸한 UObject 를 주기적으로 자동 제거해주는 편리한 기능Garbage Collection이 발생하면 Root Set로 지정된 오브젝트부터 시작해서 UObject 레퍼런스 트리를 전부 추적한다. 트리 검색에서 찾지 못한 UObject는 더이
Game Instance 게임 프로그램이 실행부터 종료 시까지 유지되는 단 하나의 전역적인 객체 (Singleton) Level이 전환되더라도 Game Instance에 저장된 데이터가 유지되기 때문에 플레이어의 스탯 등을 Data table로 저장할 때 사용하면 좋다
언리얼 엔진은 멀티플레이어 기능을 지원하기 위해 서버-클라이언트 아키텍처를 사용해 내장 네트워크 프레임워크를 제공한다.이를 잘 사용하기 위해서는 코드를 다음과 같이 분리해서 설계해야한다.서버에서만 동작하는 코드클라이언트에서만 동작하는 코드서버와 클라이언트 모두에서 동작
언리얼 네트워크에서는 액터의 Authority를 누가 가지고 있는지를 조사하기 위해 Role이라는 프로퍼티를 사용한다.Role은 원격상대적인 프로퍼티이기 때문에 누가 조사하는가에 따라 반대가 될 수 있다.서버가 Authority를 갖는 액터서버가 Control 한다.서
형상관리 툴의 일종.언리얼엔진에서 퍼포스와 연동되는 소스컨트롤 기능을 지원해준다.Git과 비교하면 Git은 텍스트 편집 위주거나 소규모 프로젝트에서 사용하기 적합하고, Perforce는 바이너리 파일의 수정이 많거나 여러명이 동시 작업하는 프로젝트에 적합한 측면이 있다
총이 나오는 게임에서 버튼을 가만히 눌렀을 때, 연사(기관총)와 점사(샷건) 총기는 발사 로직이 다르다.전통적인 총기 발사 로직은 플래그 변수와 Timer를 설정해 총기 발사가 가능한지 체크하는 방식이다.Enhanced input system을 활용해 플래그 변수와 T
원신처럼 여러 명의 캐릭터를 실시간 교대하는 시스템을 연구했다.플레이어 컨트롤러에서 여러 명의 캐릭터를 스폰 후, 조작할 캐릭터에 빙의(AController::Possess)하고 위치를 바꾸는 방식으로 구현했다.이하 코드는 플레이어 컨트롤러 부분으로, 싱글플레이에서 문
언리얼 엔진의 커스텀 UI 프로그래밍 프레임워크언리얼 엔진의 에디터 인터페이스는 슬레이트로 만들어져있다.Contents Browser, Blueprint Editor, Animation Editor, Material Editor 등Slate UI 프레임워크를 사용하기
하나 이상의 순수 가상 메소드(pure virtual method)를 포함하는 클래스기본 구현이 없는 가상(virtual) 함수.반드시 상속받은 자식 클래스에서 해당 순수 가상 함수를 재정의(override) 시켜줘야 한다.실행 초기의 런타임 과정에서 언리얼 오브젝트마
TMap 안에 TArray 등의 Nested container를 직접 넣을 수는 없다.이럴 때 구조체를 선언하고 이 안에 Nested container를 넣으면 된다.
언리얼 엔진으로 제작된 게임의 실행 시 초기화 프로세스를 정리해보았다.https://youtu.be/IaU2Hue-ApI?si=w4VHdAL3f9MI2lxe
Transient 지정자를 포함한 UPROPERTY는 휘발성 데이터로 지정된다.직렬화(Serialization) 대상에서 제외되어 세션 간에 전송되지 않으며, 디스크 공간을 아낄 수 있다.CurrentHp와 같이 시시각각 변동하며 저장할 필요가 없는 변수에 사용하기 좋
공통점데이터를 저장하는데 쓸 수 있는장점csv, json 파일로 익스포트, 임포트할 수 있다.단점항목이 추가되고 파일이 커질수록 관리하기 까다롭다.장점즉, Data Table에서 하나의 Row에 해당하는 데이터만 각자 보관하게 한다.
PostEditChangeProperty() 함수로 에디터에서 블루프린트 변경 사항을 포착할 수 있다.이하 코드는 에디터에서 SprintSpeed가 항상 WalkSpeed보다 크게 조정해준다.https://www.reddit.com/r/unrealengine/
언리얼 에디터 상의 변수의 색깔을 정리한 자료를 취합했다.\*\*<span style="color: <span style="color: <span style="color: <span style="color: <span style="color:
액터의 능력 및 스킬을 구축하기 위한 프레임워크능력(Ability)과 액터 간의 종속성을 최소화하여 유연한 개발이 가능하다.액티브 스킬, 패시브 스킬, 속성 변경, 연출 추가 등 사실상의 모든 기능이 구현 가능하다.액터의 모든 Ability를 관리캐릭터가 검을 휘두르는
언리얼 엔진에서 지원하는 파이썬 API를 스크립팅에 활용해본다.플러그인을 활성화한다.프로젝트 세팅에서 파이썬 스크립트 폴더를 지정하고 에디터를 재실행한다.지정한 폴더에 파이썬 스크립트(tutorial_script.py)를 생성하고 이하의 내용을 작성한다.print ('
GitHub 링크: https://github.com/Woogl/UEAssetPrefixer언리얼 Blueprint Asset에 Prefix를 자동으로 추가하는 플러그인을 만들었다.개발한 이유는 팀원과 네이밍 컨벤션을 통일하기 위해서, 그리고 불필요한 시간 낭
Gameplay Ability System은 강력한 게임 개발 프레임워크다.Data-Driven 개발로 각 객체간의 종속성을 최소화할 수 있고, 멀티플레이 게임을 만드는데 좋다.하지만 단점도 있다.그 중 하나가 유저 입력과 어빌리티를 연결하는 바인딩이다. 방법이 통일되
Hold Button을 만든 방법에 대해 알게된 점과 방법을 기록한다.제공하는 딜리게이트OnClickedOnPressedOnReleasedOnHoveredOnUnhoveredUMG의 UButton을 상속받지 않는다! (착각하기 쉬운 부분)Common UI Plugin의