전체 글 56

[TIL]Intelligence팀 거점(Capture Point) 시스템 구현

1. 거점 시스템 전체 구조ATCapturePoint 클래스를 만들어 각 거점을 액터로 배치UBoxComponent로 플레이어의 진입/이탈 오버랩 감지bPlayerInArea, CapturePercent 변수로 점령 상태 실시간 관리2. Tick 함수에서 점령률 제어플레이어가 진입하면 bPlayerInArea = trueTick에서 bPlayerInArea가 true면 CapturePercent 증가, false면 감소 또는 유지점령률이 100%에 도달하면 OnCaptured() 또는 NotifyWall() 호출3. 벽(문)과의 연동TArray LinkedWalls로 여러 벽과 연결점령률이 100%가 되면 for문으로 LinkedWalls의 모든 OpenWall() 함수 호출실제 움직임은 벽(문) 액터 ..

[TIL]Intelligence팀 프로젝트 적 스폰, 아이템 스폰

이번에는 언리얼 엔진에서 적 스포너와 아이템 스폰 시스템을 직접 구현했다.핵심은 타이머를 활용한 반복적 액터 생성! GetWorldTimerManager().SetTimer() 함수의 존재감이 정말 컸다.1. 타이머 기반 스포너 설계처음엔 BeginPlay()에서 한 번만 생성했지만, 원하는 건 일정 시간 간격으로 반복 생성이었다.이를 위해 언리얼의 SetTimer를 활용하면, 매 n초마다 원하는 함수를 반복 호출할 수 있다.// BeginPlay()에서 타이머 등록void ATItemSpawner::BeginPlay(){ Super::BeginPlay(); GetWorldTimerManager().SetTimer( SpawnTimerHandle, // FTimer..

[TIL]Intelligence팀 프로젝트 무기 구현

오늘 팀 프로젝트를 하며, ‘총 만들기’가 의외로 쉽지 않다는 걸 깨달았다.샷건, 라이플, 피스톨… 각 무기는 전혀 다른 성격과 메커니즘을 가진다.이걸 “계층 구조”와 “추상화”로 어떻게 풀어낼 수 있을까? 경험담을 기록한다.1. AItemBase – 모든 아이템의 뿌리게임에는 무기만 있는 게 아니다.치유 아이템, 퀘스트 아이템, 소모품 등도 전부 아이템의 일종이다.“공통점”을 추상화해서 뿌리 클래스로 만든다.이름, 설명, 아이콘 등 모든 아이템의 공통 속성줍기, 사용 등의 함수 시그니처만 선언반복되는 코드는 결국 공통 조상에게 준다.이게 객체지향의 시작이다!2. ATWeaponBase – 무기들의 공통 규약ATWeaponBase는 모든 총기가 반드시 가져야 하는 것만 선언한다.virtual void F..

[TIL]소스트리 & Git 기본 실습

1. 소스트리(Sourcetree) 설치무료 Git GUI 툴인 소스트리 설치 및 환경 설정 완료처음 쓰는 사람도 직관적인 인터페이스로 쉽게 Git을 사용할 수 있다2. Git 기본 개념Remote(원격 저장소): 깃허브(GitHub), 깃랩(GitLab) 등 서버에 있는 저장소Local(로컬 저장소): 내 컴퓨터에 복사된 저장소3. 커밋(Commit)과 푸쉬(Push) 실습커밋(Commit): 변경된 파일을 로컬 저장소에 저장푸쉬(Push): 로컬 저장소의 변경 내역을 원격 저장소로 전송4. 기본 명령어 실습 (CMD)git status // 현재 변경사항 확인git add . // 모든 변경 파일 스테이징git commit -m "커밋 메시지" // 커밋git push ..

[TIL] 언리얼 UMG 위젯 & 게임 데이터 연동

1. UMG 위젯이란?언리얼 엔진의 기본 UI(사용자 인터페이스) 시스템블루프린트/코드에서 HUD, 체력바, 타이머 등 게임 정보를 화면에 표시할 수 있음2. UMG 위젯 제작 과정위젯 블루프린트 생성 (예: MyHUDWidget)ProgressBar(체력), TextBlock(시간/타이머) 등 원하는 위젯 배치디자인/애니메이션 설정도 가능3. 게임 데이터(시간, 체력, 타이머 등) 연동 방법Bind 방식: 위젯의 Text, ProgressBar 등 UI 요소에 함수 바인딩이벤트 방식: 캐릭터, 게임모드 등에서 데이터가 바뀔 때마다 위젯에 값 전달// MyHUDWidget.hUFUNCTION(BlueprintImplementableEvent)void SetHealth(float NewHealth);UFU..

[TIL] 언리얼 엔진 – 인터페이스와 상속, 아이템 시스템

1. 인터페이스와 베이스(추상) 클래스의 차이점구분인터페이스베이스(추상) 클래스목적“이 기능 있음” 약속만 함“공통 동작/데이터”까지 구현구현/데이터함수 선언만, 구현/멤버 변수 없음함수 구현/멤버 변수 가능상속여러 개 동시 상속 가능한 번에 하나만 상속코드 재사용XO언리얼 예시IInteractableAItemBase2. 아이템 인터페이스와 베이스 클래스 구현 방법아이템 인터페이스 생성:UINTERFACE(Blueprintable)class UMyItemInterface : public UInterface{ GENERATED_BODY()};class IMyItemInterface{ GENERATED_BODY()public: virtual void OnPickup(AActor* Picker..

[TIL]언리얼 C++에서 SpringArm과 카메라 생성 & 부착

SpringArmComponent 생성 및 부착 SpringArmComp = CreateDefaultSubobject(TEXT("SpringArm"));SpringArmComp->SetupAttachment(RootComponent);SpringArmComp->TargetArmLength = 300.0f; // 원하는 길이SpringArmComp->bUsePawnControlRotation = true; // 회전 연동 CameraComponent 생성 및 SpringArm에 부착 CameraComp = CreateDefaultSubobject(TEXT("Camera"));CameraComp->SetupAttachment(SpringArmComp, USpringArmComponen..

[TIL] USXUnrealObject 헤더파일 해석

#pragma once// 중복 포함 방지용 헤더 가드#include "CoreMinimal.h"#include "UObject/Object.h"#include "USXUnrealObject.generated.h"// 언리얼 오브젝트 시스템 및 리플렉션에 필요한 기본 헤더 포함UCLASS(Blueprintable)// 이 클래스를 언리얼 리플렉션 시스템과 블루프린트에 노출class USXUnrealObject : public UObject// USXUnrealObject는 언리얼의 최상위 오브젝트 클래스인 UObject를 상속{ GENERATED_BODY() // 언리얼의 메타프로그래밍 코드 자동 삽입 (매우 중요)public: USXUnrealObject(); // 생성자 (객체가..

카테고리 없음 2025.07.08

TIL: C/C++ 기초 문법 복습

1. printf 포맷 옵션 실습 %d: 정수 출력 printf("%d", 12); → 12 %5d: 5자리 확보, 오른쪽 정렬 printf("[%5d]", 12); → [ 12] %-5d: 5자리 확보, 왼쪽 정렬 printf("[%-5d]", 12); → [12 ] %05d: 5자리 확보, 0으로 채움 printf("[%05d]", 12); → [00012] 2. printf에서 실수 출력 %f: float, double 출력 가능 (C에서는 차이 없음) %lf: double 용도이지만 C에선 %f와 동일 결론: 실수 출력엔 %f 쓰면 됨3. 포맷 문자열과 변수 연결 printf는 반드시 포맷 문자열(예: "%d")과 변수를 짝지어 사용해야 함 ..

[TIL]언리얼 엔진 폴리지 & 레벨 구조 문제 해결기

1. 폴리지 브러시가 동작하지 않는 문제기본 레벨(템플릿)에서는 폴리지 브러시(나무/풀 페인트)가 나타나지 않음.폴리지로 StaticMesh, Landscape 등 어떤 곳에도 페인팅이 불가.오픈 월드 템플릿으로 새 레벨 생성시 폴리지 정상 동작.원인: 기본 레벨에는 월드 파티션/데이터 레이어 구조가 없음!TIP: 폴리지 브러시를 쓸 계획이면 오픈 월드 레벨이나 월드 파티션이 활성화된 맵을 사용할 것.2. 월드 파티션/데이터 레이어와 폴리지폴리지, 대형 맵 작업 시 월드 파티션 + 데이터 레이어는 사실상 필수.기본 레벨은 전통적인 레벨 구조라 대규모 작업/폴리지 작업엔 부적합.데이터 레이어 패널이 비어 있으면, 폴리지 브러시가 나타나지 않음!3. 하늘 배경 변경 (스카이 쉐이프 활용)StaticMesh(..