묻공러
'게임 엔진' 카테고리의 글 목록 (9 Page)

게임 엔진

게임 엔진/[코드조선] 언리얼

언리얼 Character - Pawn vs. Character

ACharacter vs. APawn 폰의 경우는 너무 추상적이고 범위가 넓기에인간형 폰을 좀 더 효과적으로 구현하기 위한 클래스가 캐릭터 클래스이다ACharacter 클래스는 APawn 클래스를 상속받은 클래스이다APawn처럼 Capsule Component와 Skeletal Mesh Component는 동일하지만CharacterMovementComponent를 사용한다는 점이 다르다CharacterMovementComponent vs. FloatingPawnMovementComponent CharacterMovementComponent는점프와 같은 중력의 영향을 받는 움직임을 제공한다걷기 이외에도 기어가기, 날아가기, 수영하기 등의 다양한 움직임 모드를 제공한다멀티 플레이 환경에서 캐릭터들 간의 움직..

게임 엔진/[코드조선] 언리얼

언리얼 Pawn - 애니메이션 기초 설정

애니메이션 블루프린트 C++ 코드로 애니메이션을 하드코딩해서 지정하는 방법도 있지만, 게임의 규모가 커지면 애니메이션을 재생하는 코드를 관리하기 어렵다따라서, 언리얼은 체계적으로 애니메이션 시스템을 설계할 수 있도록 애니메이션 블루프린트를 제공한다 애님 그래프(Anim Graph) 애니메이션 블루프린트에서 애니메이션의 흐름을 설계할 수 있다Asset Browser에서 원하는 애니메이션 애셋을 애님 그래프에 드래그 드랍하고OutputPose 노드와 연결을 하면 쉽게 재생시킬 수 있다해당 노드를 클릭해 Details에서 다양한 설정을 적용할 수 있고Loop Animation를 통해 반복되게 설정할 수도 있다애님 그래프 컴파일작업을 하고 상단 Toolbar의 좌측 Compile과 저장을 반드시 해줘야 한다스켈..

게임 엔진/[코드조선] 언리얼

언리얼 Pawn - Pawn 조작

폰의 조작 구현UE5 부터는 아래의 방식이 Deprecated 방식이기에Enhanced Input System을 사용하면 된다만약 UE4를 사용하는 프로젝트라면아래의 방식으로 조작을 구현할 수 있다 1) Input 키 설정Toolbar > Settings > Project Settings > Input에서 입력 설정이 가능하다 - Axis Mappings조이스틱의 레버와 유사하고축과 관련된 정보를 담으며-1 ~ 1 사이의 값이 게임로직에 전달된다- Action Mappings조이스틱의 버튼과 유사하고 0 혹은 1 값이 게임로직에 전달된다키보드의 조작을 통해 이동을 구현하기 때문에Axis Mappings를 추가해서 UpDown과 LeftRight 입력을 생성하면 된다UpDown에는 W키 / S키, Left..

게임 엔진/[코드조선] 언리얼

언리얼 Pawn - Pawn 클래스 생성 및 내부

Pawn 핵심 컴포넌트인간형 폰을 위한 컴포넌트로 사용되는 것은 아래와 같다참고로 실제 게임 구현에서는해당 APawn을 상속받아 만든 ASPlayerPawn은 사용하지 않고ACharacter를 상속받아 클래스를 만든다 - Capsule Component 충돌 처리를 위한 컴포넌트로 루트 컴포넌트의 역할을 주로 담당한다캐릭터 절반 높이와 몸둘레를 설정해주어야 하는데해당 에셋을 Viewport에 드래그 드롭하고Viewport 좌상단 Perspective를 눌러 Front로 시점을 바꾸어서원하는 시작 위치에 마우스 휠 버튼 누르고, 끝 위치에 드래그하면 cm 단위 값이 나온다 - SkeletalMesh Component 캐릭터 랜더링과 애니메이션을 담당한다 - FloatingPawnMovement Compon..

게임 엔진/[코드조선] 언리얼

언리얼 게임 플레이 프레임워크 - 이벤트 함수 Flow

GameMode의 주요 이벤트 함수는 아래와 같다// SGameMode.h...UCLASS()class STUDYPROJECT_API ASGameMode : public AGameModeBase{ ...public: ASGameMode(); virtual void InitGame(const FString& MapName, const FString& Options, FString& ErrorMessage) override; virtual void InitGameState() override; virtual void PostInitializeComponents() override; virtual void PreLogin(const FString& Options, con..

게임 엔진/[코드조선] 언리얼

언리얼 게임 플레이 프레임워크 - 플레이어 컨트롤러와 폰

플레이어 컨트롤러 가상 세계에서 플레이어를 대변하는 무형의 액터이다플레이어 컨트롤러는 플레이어와 1:1로 연결되어 폰을 조작할 수 있다플레이어가 입장할 때마다 배정되고배정된 플레이어 컨트롤러는 변경이 불가능하다폰 플레이어 컨트롤러에게 조종당하는 액터이다플레이어 컨트롤러는 정신, 폰은 육체와 같다플레이어는 플레이어 컨트롤러를 통해서 현재 조종하는 폰을 버리고 다른 폰에 빙의할 수 있다 주요 용어- 로그인(Login) 플레이어의 게임 입장으로언리얼 에디터 > Toolbar > 플레이 버튼(Play In Editor)을 통해 가능하다- 빙의(Possess) 플레이어 컨트롤러가 폰을 소유해서 조종하는 과정이다게임 모드에 플레이어 컨트롤러 지정하는 방식 플레이어 컨트롤러 액터를 생성하고 해당 액터 개체를 게임 모..

게임 엔진/[코드조선] 언리얼

언리얼 게임 플레이 프레임워크 - Game Mode

게임 모드플레이어에게 보이지 않는 무형이다대표적으로 두 가지 역할을 한다1) 게임 플레이 중 사건이 발생할 때 게임 진행의 심판 역할ex. 게임 승리 조건, 살아남은 플레이어가 혼자라면 해당 플레이어 승리,... 2) 플레이어 입장을 준비하는 역할. ex. 플레이어 컨트롤러, 플레이어가 빙의할 폰 지정, …  게임 모드와 게임 서버게임 모드는 서버와 밀접한 관계가 있으며서버의 역할과도 마찬가지라고 할 수 있다게임 모드는 하나의 PC(서버 컴퓨터)에만 존재한다 만약 방을 파서 플레이하는 게임이라면 (리슨서버) 방장의 PC에만 게임 모드 액터가 존재한다혹은 데디케이티드 서버(클라 로직이 없고, 서버 로직만 동작하는 서버)라면 데디 서버에만 게임 모드 액터가 존재한다즉, 게임 모드는 서버 컴퓨터에만 존재하고,..

게임 엔진/[코드조선] 언리얼

언리얼 게임 플레이 프레임워크 - 기본 구성

언리얼 엔진에서의 게임 제작언리언 엔진으로 게임을 제작 과정은 아래와 같다1) 레벨 구성 2) 레벨에 WorldStatic과 같은 액터와 플레이어와 상호 작용할 액터들 배치3) 게임 플레이 설계 4) 게임 로직에 따라 게임 플레이가 원활하게 진행되게 하는 작업 1~2단계를 통해 레벨 구성이 완료되고 3~4단계에서 사용하는 것이 언리얼에서 제공하는 게임 플레이 프레임워크이다게임플레이 프레임워크 언리얼 게임플레이 프레임워크는 다양한 게임 장르와 멀티 플레이까지 지원할 수 있도록 설계된 언리얼 프레임워크이다 게임플레이 프레임워크의 핵심 3가지 요소는 아래와 같다- 게임 모드(Game Mode) 게임의 규칙을 관리하는 클래스 - 플레이어 컨트롤러(Player Controller) 실질적으로 게임에 입장하는 플..

게임 엔진/[코드조선] 언리얼

언리얼 Actor - 주요 이벤트 함수

이벤트 함수 게임이 시작될 때, 액터는 준비/시작/지속/퇴장의 과정을 거친다이 과정에서 언리얼 엔진에 의해 자동으로 호출되는 함수를 이벤트 함수라고 한다주요 이벤트 함수의 호출 및 순서에 따른 구분은 아래와 같다- PostInitializeComponents() 액터를 구성하는 모든 컴포넌트가 초기화되었고 액터 자신이 초기화 될 수 있는 상태일 때 호출되는 함수로준비 과정에 속한다- BeginPlay() 해당 함수가 호출되면서 액터는 자신에게 주어진 로직을 수행하기 시작하며시작 과정에 속한다- Tick(float DeltaSeconds) BeginPlay() 함수가 한 번 호출되는 함수라면, Tick() 함수는 매 프레임마다 호출된다Tick() 함수의 매개변수인 DeltaSeconds는 이전 프레임부터 ..

게임 엔진/[코드조선] 언리얼

언리얼 Actor - 언리얼 에셋 지정

에셋 지정을 하는 방식은 두 가지이다 1) 오브젝트 패스를 이용언리얼은 애셋의 고유한 키 값으로 경로 값을 사용한다애셋을 클릭하고 Ctrl + C 하면 오브젝트 패스를 얻을 수 있고{오브젝트 타입}'{폴더명}/{파일명}.{에셋명}' 의 형식을 가진다이를 ConstructorHelpers의 기능을 이용해 오브젝트를 찾게 하고SetStaticMesh와 같은 함수로 에셋 설정이 가능하다 하지만아트팀에서 해당 에셋을 수시로 변경하고 이동시키는 경우가 많기에해당 방법은 안전하지 않은 방법이다// STorch.cpp...ASTorch::ASTorch(){ ... BodyStaticMeshComponent = CreateDefaultSubobject(TEXT("BodyStaticMeshComponent")..