본문 바로가기

전체 글

(144)
언리얼C++ 5일차(액션 바인딩, 행동 함수 구현) 현재까지 게임모드를 만들고 게임모드로 캐릭터와 플레이어 컨트롤러를 관리했다.플레이어 컨트롤러는 사용자의 입력과 캐릭터 사이를 연결해주고 IMC를 활성화 시켰다.이제 어떤 키를 눌렀을 때 어떤 행동(함수)를 할것인지를 구현해야한다.캐릭터에 액션 바인딩 추가하기 입력 액션을 처리할 함수를 선언한다.인핸스드 인풋에서 입력 액션 값은 FInputActionValue로 전달된다.// 캐릭터 헤더struct FInputActionValue; // Enhanced Input에서 액션 값을 받을 때 사용하는 구조체 UFUNCTION() void Move(const FInputActionValue& value); UFUNCTION() void StartJump(const FInputActionValue& value); ..
언리얼C++ 5일차(컨트롤러, 인풋시스템, IA, IMC) 플레이어 컨트롤러입력장치(키보드, 마우스, 게임패드 등)에서 입력을 하면 플레이어 컨트롤러에서 입력을 받고 플레이어 컨트롤러가 소유하고 있는 폰에게 명령을 내린다.주요 기능1. 다양한 입력장치의 이벤트를 처리한다.2. 마우스나 게임패드의 축 입력을 받아 카메라 동작을 수행할 수 있다.3. 언리얼의 UMG 기반 UI를 통해 버튼 클릭, 드래그, 터치 등의 이벤트를 컨트롤러에서 받을 수 있다.(인벤토리 열기, 스킬 사용 등의 명령을 UI에서 트리거하면 컨트롤러가 해석해 폰, 게임모드 등 다른 시스템으로 전달 가능)4. 특정 폰에 빙의해서 폰을 제어하고 필요할 때 Unpossess로 연결을 해제하고 다른 폰과 연결이 가능하다.5. 멀티플레이 시 각 플레이어마다 고유한 컨트롤러가 있어 서로 다른 캐릭터 조작이 ..
언리얼C++ 5일차(GameMode) 게임 모드는 게임의 전반적인 규칙과 흐름을 총괄 관리하는 컨트롤 타워 역할을 하는 클래스다.승패 조건이나 점수 계산 방법은 어떻게 설정할지 등 게임 플레이의 핵심 로직을 담당한다.GameMode의 주요 기능과 책임플레이어 Pawn/Character 스폰게임이 시작될 때 (또는 플레이어가 리스폰될 때), DefaultPawnClass 또는 지정한 Pawn 클래스를 자동으로 스폰합니다.스폰된 Pawn을 플레이어가 조작할 수 있도록 PlayerController와 연동해주는 역할을 합니다.PlayerController 지정플레이어의 입력(키보드, 마우스, 게임패드 등)을 전달하고 처리하는 PlayerController가 어떤 클래스로 동작할지 설정합니다.게임 규칙 관리점수 계산, 타이머, 라운드 제어, 난이도..
6번 과제(회전 발판과 움직이는 장애물 퍼즐 스테이지) 필수 과제 (기본 요구 사항)필수 과제 1번 - 서로 다른 Actor 클래스 2개 이상 구현각각 StaticMeshComponent를 가지며, 맵에 배치 가능한 형태여야 합니다.두 클래스는 서로 다른 동작 로직을 수행해야 합니다.필수 과제 2번 - Tick 함수 기반 동적 Transform 변경회전 기능Tick(float DeltaTime)에서 AddActorLocalRotation() 사용하여 매 프레임 회전 처리이동 기능Tick(float DeltaTime)에서 위치를 변경하여 왕복 이동 구현MoveSpeed, MaxRange, StartLocation 등을 고려해 일정 범위를 벗어나면 이동 방향을 반전시키는 로직 구성프레임 독립성이동/회전 시 반드시 DeltaTime을 활용하여 하드웨어 성능에 관계..
언리얼C++ 3일차(리플렉션 시스템) 리플렉션 시스템은 C++ 클래스의 변수 및 함수 정보를 엔진 내부의 메타데이터 형태로 저장해서 에디터나 블루프린트에서 활용할 수 있게 만들어주는 시스템이다.C++에 있는 여러 멤버 변수, 함수 등을 에디터와 블루프린트에서 직접 설정, 호출이 가능하도록 한다.매개변수를 코드에서만 변경하는 것이 아니라, 에디터에서 바로 조정 (슬라이더나 숫자 입력)하여 반복 테스트를 빠르게 진행할 수 있다. 언리얼에서 C++로 액터를 생성하면 이미 클래스 선언에 리플렉션 관련 매크로가 포함되어있다.#pragma once#include "CoreMinimal.h"#include "GameFramework/Actor.h"#include "Item.generated.h"DECLARE_LOG_CATEGORY_EXTERN(LogJi..
언리얼C++ 2일차(트랜스폼) 트랜스폼위치(Location), 회전(Rotation), 크기(Scale)을 합쳐서 트랜스폼(Transform)이라고 한다.이 트랜스폼에는 x(빨강), y(초록), z(파랑) 값이 있는데 이를 조정하여 위치, 회전, 크기 값을 조절할 수 있다.좌표는 월드 좌표와 상대 좌표가 있다.월드 좌표는 레벨 전체에서의 절대적인 위치, 회전, 크기 이며 월드의 원점(레벨 좌표 0,0,0)이 기준점이 된다.상대 좌표는 컴포넌트 사이에서 사용되며 부모 컴포넌트가 기준점이 된다. void AItem::BeginPlay(){ Super::BeginPlay(); SetActorLocation(FVector(300.0f, 200.0f, 100.0f)); SetActorRotation(FRotator(0.0f, 90.0f, 0...
언리얼C++ 2일차(UE_LOG, 라이프 사이클 함수) UE_LOG UE_LOG(LogTemp, Warning, TEXT("My Log!"));UE_LOG(로그 카테고리, 로그 수준, 출력할 메세지) 로 로그를 출력할 수 있다.로그 카테고리는 로그를 구분하기 위한 이름이다. 여기서는 LogTemp라는 엔진에서 기본 제공하는 임시 카테고리를 사용했다.로그 수준은 로그의 중요도와 색상을 나타내는데 Warning은 노란색, Display는 흰색, Error는 빨간색 등 다양하게 있다.출력할 메세지는 TEXT매크로를 사용하여 유니코드로 만들어야한다. 형식 지정자(%d, %f 등)를 사용해서 변수 값도 출력 가능. 컴파일 후 액터를 뷰포트에 배치하고 실행해보면 Output Log에 My Log!가 출력된다.여기서 필터를 사용해서 원하는 카테고리의 로그만 볼 수 있다...
언리얼C++ 2일차(C++ 파일 삭제, C++로 컴포넌트 추가하기) 언리얼에서 C++ 파일 삭제1. Solution Explorer에서 Remove(Del)를 하고 Save All(ctrl+shift+s)로 저장한다. 이 작업은 솔루션에서만 제거를 하고 아직 디스크의 파일(물리 파일)은 남아있다.2. 프로젝트 폴더에서 방금 Remove했던 .h, .cpp파일을 직접 삭제를 한다.(물리 파일 삭제)3. VS로 돌아가서 빌드를 한 후 다시 언리얼 에디터를 실행하면 해당 클래스가 컨텐츠 브라우저에서도 사라진 것을 확인할 수 있다.만약 이 과정을 무시하고 언리얼 에디터에서만 삭제하거나 솔루션에서 Remove하지 않고 폴더에서 파일을 삭제하면 빌드 에러 또는 클래스 미삭제 같은 문제가 발생한다.항상 에디터 종료 -> 솔루션 Remove -> 물리 파일 삭제 -> VS 빌드 -> ..