본문 바로가기

전체 글787

VARCO 3D 알아보기 ▣ 이번 글부터 AI를 이용해서게임에 사용할 3D 에셋을 만들어보겠습니다.지금까지 Unity에서는직접 준비한ModelMaterialTextureAnimationPrefab등의 에셋을 가져와서게임을 만드는 방법을 사용했습니다.그런데 게임을 직접 만들다 보면다음과 같은 문제가 생깁니다.총 Model이 필요하다.회복 아이템이 필요하다.열쇠가 필요하다.Enemy Character가 필요하다.상자나 책상 같은 환경 Object가 필요하다.3D Modeling을 직접 할 수 있다면Blender나 Maya 같은 Tool에서 만들 수 있습니다.하지만 3D Modeling을 처음부터 공부하지 않았거나Prototype에 사용할 에셋이 빠르게 필요하다면에셋 제작 자체가 큰 작업이 될 수 있습니다.이번 과정에서는이런 3D 에.. 2026. 9. 29.
언리얼엔진5 Motion Matching Chooser로 걷기 달리기 애니메이션 데이터베이스 분리하기 ▣ 앞에서는 Motion Matching과 Pose Search를 이용해서 캐릭터 이동 애니메이션을 만들었습니다.구조는 다음과 같았습니다.Locomotion Animation↓Pose Search Database↓Motion Matching↓Pose History↓Output Pose그리고 하나의 Pose Search Database에IdleWalkRunStopPivot같은 Animation을 모두 넣었습니다.처음 Motion Matching을 익힐 때는 이런 구조가 간단합니다.하지만 Animation이 많아지면 문제가 생길 수 있습니다.예를 들어걷고 싶은 상태인데Run Animation 후보까지 검색달리고 싶은 상태인데Walk Animation 후보까지 검색하게 됩니다.Motion Matching 입장.. 2026. 9. 29.
Unity6 GameObject와 Component 알아보기 ▣ 이전 글에서는Unity6의 3D 공간에서 사용하는XYZ좌표를 알아보고Cube를 이용해서바닥과 벽을 배치해봤습니다.이번 글에서는Unity에서 게임을 만들 때가장 기본이 되는GameObjectComponent에 대해서 알아보겠습니다.앞으로 우리가 만들PlayerEnemyDoorWeaponItemCameraLight등도기본적으로 GameObject와여러 Component를 조합해서 만들어집니다.1. GameObject란?Unity의 Scene에 존재하는대부분의 Object는GameObject입니다.예를 들어PlayerEnemyCubeDoorGunAmmoCameraLight등을GameObject로 만들 수 있습니다.하지만 GameObject 자체가모든 기능을 가지고 있는 것은 아닙니다.GameObject는여.. 2026. 9. 28.
Unity6 3D 좌표와 오브젝트 배치 이해하기 ▣ 이전 글에서는Unity6의Scene ViewGame View차이와Scene View를 이동하는 방법을 알아봤습니다.이번 글에서는3D 게임을 만들 때 기본이 되는XYZ3D 좌표를 알아보고Scene에 GameObject를 직접 배치해보겠습니다.앞으로벽바닥문아이템총Enemy등을 원하는 위치에 배치하려면3D 좌표를 이해해야 합니다.1. 3D 공간이란?2D 게임에서는 일반적으로가로와 세로를 이용해서Object의 위치를 표현합니다.XY두 개의 축을 사용합니다.하지만 3D 게임에는깊이가 추가됩니다.따라서XYZ세 개의 축을 사용합니다.Unity에서는 이 세 개의 값을 이용해서3D 공간에서 GameObject가어디에 있는지를 나타냅니다.2. Unity의 X, Y, Z축Unity의 3D 좌표는다음과 같이 이해하면 됩니.. 2026. 9. 28.
Unity6 Scene View와 Game View 알아보기 ▣ 이번 글에서는Unity6에서 게임을 만들 때가장 많이 사용하게 되는Scene ViewGame View에 대해서 알아보겠습니다.Unity를 처음 실행하면Scene과 Game이라는두 개의 화면이 보입니다.처음에는 두 화면이 비슷해 보여서어떤 차이가 있는지헷갈릴 수 있습니다.간단하게 보면Scene View→ 개발자가 게임 공간을 만드는 화면Game View→ 실제 Player에게 보이는 게임 화면입니다.이번 과정에서는Unity 6.6을 기준으로 진행하겠습니다.1. Scene View란?Scene View는게임의 공간을 직접 제작하는작업 화면입니다.Scene View에서는PlayerEnemyCameraLightWallDoorItemWeapon같은 GameObject를직접 확인하고 배치할 수 있습니다.예를 들.. 2026. 9. 28.
Unity6 처음 시작하기 ▣ 이번 글부터 Unity6와 VARCO를 이용해서직접 3D 게임을 만들어보겠습니다.이번 과정에서는 단순히 Unity의 기능을 하나씩 알아보는 것이 아니라직접 하나의 게임을 만들어가면서필요한 기능을 하나씩 사용해보겠습니다.최종적으로는Player가 3D 공간을 이동하고↓아이템을 획득하고↓문과 버튼을 조작하고↓총을 사용하고↓Enemy와 전투하고↓AI Enemy가 Player를 추격하고↓게임의 목표를 완료하는간단한 3D FPS 게임을 만들어보겠습니다.게임에서 사용하는총탄약회복 아이템열쇠Enemy상자책상문환경 Object등의 3D Asset은VARCO를 이용해서 직접 만들어볼 예정입니다.1. 이번 과정에서 사용하는 Unity이번 과정에서는Unity 6.6을 기준으로 진행합니다.Unity 6.6의 Editor V.. 2026. 9. 28.
Unity6 C# for, while, foreach 반복문과 함수와 매개변수, return 알아보기 ▣ 이번 글에서는 C#의반복문과 함수를 알아보겠습니다.앞에서는변수연산자ifswitch를 이용해서값을 저장하고,계산하고,조건에 따라 다른 코드를 실행하는 방법을 알아봤습니다.이번에는 같은 코드를 여러 번 실행할 수 있는forwhileforeach반복문을 알아보겠습니다.그리고 코드를 기능 단위로 묶어서필요할 때 실행할 수 있는함수매개변수return도 같이 알아보겠습니다.예를 들어 게임에서는Enemy 10개 생성여러 Item 확인Player에게 Damage 적용점수 계산HP 회복공격력 계산같은 기능을 계속 만들게 됩니다.이때 반복문과 함수를 사용하면같은 코드를 계속 복사하지 않고더 읽기 쉽게 만들 수 있습니다.이번 글의 흐름은for↓while↓foreach↓break / continue↓함수↓매개변수↓retu.. 2026. 9. 28.
Unity6 C# 연산자와 if, switch 조건문 ▣ 이번 글에서는 C#의연산자와 조건문을 알아보겠습니다.앞 글에서는intfloatboolstring같은 자료형을 이용해서게임에서 사용할 값을 변수에 저장해봤습니다.예를 들어int hp = 100;int damage = 20;float moveSpeed = 5.0f;bool isDead = false;같은 값을 만들었습니다.하지만 변수에 값을 저장하는 것만으로는게임 기능을 만들기 어렵습니다.예를 들어 게임에서는공격을 받으면 HP 감소HP가 0 이하라면 사망점수가 100 이상이면 ClearPlayer가 살아 있고 공격할 수 있을 때만 Attack같은 처리가 필요합니다.이런 기능을 만들려면값을 계산하고,비교하고,조건에 따라 실행할 코드를 선택해야 합니다.이때 사용하는 것이연산자ifelseswitch입니다.이번.. 2026. 9. 28.
언리얼엔진5 Motion Matching과 Pose Search로 캐릭터 이동 애니메이션 구현하기 ▣ 기존에는 캐릭터의 이동 애니메이션을 만들 때Idle↓Walk↓Run↓Stop↓Turn같은 상태를 State Machine으로 만들고 각각의 Transition 조건을 직접 연결하는 방식을 많이 사용했습니다.하지만 이동 애니메이션이 많아지면정지 상태에서 앞으로 출발정지 상태에서 왼쪽으로 출발달리다가 급정지왼쪽으로 달리다가 오른쪽으로 방향 전환180도 Pivot느린 Walk빠른 Run처럼 관리해야 하는 상태와 전환 조건도 계속 많아집니다.Unreal Engine에서는 이런 Locomotion 시스템을 만들 때Motion MatchingPose Search를 사용할 수 있습니다.Motion Matching은 현재 캐릭터의 움직임과 이전 Pose를 기준으로현재 상황에 가장 적합한 Animation Pose를.. 2026. 9. 28.
Unity6 C# 변수와 자료형, public, private, SerializeField 사용 방법 ▣ 이번 글에서는 C#에서 데이터를 저장하는변수와 자료형을 알아보고,Unity에서 자주 사용하는publicprivate[SerializeField]의 차이를 알아보겠습니다.앞 글에서는 C# Script를 만들고GameObject에 Component로 연결했습니다.이번에는 Script 안에실제 데이터를 저장해보겠습니다.게임에는 굉장히 많은 데이터가 필요합니다.예를 들어 Player라면체력이동 속도공격력이름사망 여부현재 위치등이 있을 수 있습니다.C#에서는 이런 값을변수에 저장해서 사용합니다.예를 들어HP = 100MoveSpeed = 5PlayerName = "Player"IsDead = false같은 데이터를 저장할 수 있습니다.그리고 Unity에서는C# Script의 일부 변수를Inspector에 표시.. 2026. 9. 23.
Unity6 C# Script 생성하고 GameObject에 연결하기 ▣ 이번 글부터 Unity에서 사용하는C# Script를 알아보겠습니다.지금까지는 Unity Editor에서GameObject 생성Transform 수정Component 추가Prefab 생성등을 직접 설정했습니다.하지만 실제 게임을 만들려면Player가 움직이고,Enemy가 공격하고,Item을 획득하고,점수가 증가하는 것처럼게임의 동작을 만들어야 합니다.이런 기능을 구현할 때Unity에서는 주로C#을 사용합니다.예를 들어Player 이동Enemy AI공격아이템 획득문 열기점수 계산게임 시작 / 종료같은 기능을C# Script로 구현할 수 있습니다.이번 글에서는 아직 복잡한 C# 문법을 배우지 않습니다.먼저C# Script 생성↓Visual Studio에서 Script 열기↓MonoBehaviour 구조 .. 2026. 9. 23.
Unity6 에셋과 프리팹 생성 및 관리 방법 ▣ 이번 글에서는 Unity 프로젝트에서 사용하는에셋과 프리팹이 무엇인지 알아보고,직접 프리팹을 만들어보겠습니다.그리고프리팹 에셋프리팹 인스턴스오버라이드ApplyRevert의 차이도 알아보겠습니다.마지막에는 프로젝트가 커졌을 때에셋을 찾기 쉽도록폴더와 이름을 정리하는 기본적인 방법도 살펴보겠습니다.앞에서 Unity 프로젝트 폴더 구조를 알아보면서Assets폴더를 확인했습니다.그리고 Scene을 공부하면서Project Window에 저장된 Scene도하나의 에셋이라는 것을 알아봤습니다.Unity 프로젝트를 만들다 보면Project Window에는 점점 많은 파일이 생깁니다.예를 들어SceneC# ScriptTextureSpriteMaterial3D ModelAudioAnimationPrefab등입니다.이런.. 2026. 9. 23.
언리얼엔진5 C++ NewObject CreateDefaultSubobject SpawnActor SpawnActorDeferred 차이 ▣ 언리얼 엔진 C++에서 객체를 만들다 보면 여러 생성 함수를 만나게 됩니다.NewObjectCreateDefaultSubobjectSpawnActorSpawnActorDeferred이름만 보면 전부 객체를 만드는 함수처럼 보입니다.하지만 각각 사용하는 대상과 시점이 다릅니다.처음에는 다음처럼 기억하면 이해하기 쉽습니다.NewObject→ 게임 실행 중 UObject 생성CreateDefaultSubobject→ 생성자에서 기본 Subobject / Component 생성SpawnActor→ 게임 실행 중 Actor를 World에 생성SpawnActorDeferred→ Actor를 생성하되 초기값을 넣은 뒤 생성 과정을 마무리이번 글에서는 Unreal Engine 5.8을 기준으로 네 함수의 차이와 실.. 2026. 9. 23.
Unity6 Edit Mode와 Play Mode 차이 알아보기 ▣ 이번 글에서는 Unity Editor의Edit Mode와 Play Mode의 차이를 알아보겠습니다.Unity로 게임을 만들 때는계속 다음 작업을 반복하게 됩니다.게임 제작↓실행↓테스트↓문제 확인↓수정↓다시 실행Unity Editor에서는게임을 제작하고 편집하는 상태를Edit Mode라고 하고,Editor 안에서 게임을 직접 실행해서 테스트하는 상태를Play Mode라고 합니다.간단하게 먼저 정리하면Edit Mode→ 게임을 만드는 상태Play Mode→ 만든 게임을 실행해서 테스트하는 상태라고 생각하면 됩니다.특히 Unity를 처음 사용할 때는Play Mode에서 Inspector 값을 수정한 다음Play Mode를 종료했더니수정한 값이 다시 원래대로 돌아오는 경우가 있습니다.이것은 Unity에서 굉.. 2026. 9. 22.
Unity6 Scene 생성, 저장, 전환 기본 ▣ 이번 글에서는 Unity Project에서새로운 Scene을 생성하고,Scene을 저장하고,여러 Scene 사이를 전환하는 기본적인 방법을 알아보겠습니다.앞에서 Scene은GameObject를 배치하고 게임의 콘텐츠를 구성하는 단위라고 알아봤습니다.예를 들어 게임에TitleStage01Stage02Ending같은 화면이나 Stage가 있다면각각 별도의 Scene으로 구성할 수 있습니다.간단하게 보면Unity Project├─ Title Scene├─ Stage01 Scene├─ Stage02 Scene└─ Ending Scene형태입니다.Scene을 여러 개 사용하기 전에먼저Scene 생성Scene 저장Scene 열기Scene 전환방법부터 알아보겠습니다.1. Scene 다시 알아보기Scene은게임이나.. 2026. 9. 22.
언리얼엔진5 C++ GameInstance와 GameInstanceSubsystem으로 전역 데이터 관리하기 ▣ 게임을 만들다 보면 Level이 변경되어도 유지해야 하는 데이터가 필요합니다.예를 들어MainMenu↓CharacterSelect↓Stage01↓Stage02순서로 Level을 이동한다고 하겠습니다.이때 다음과 같은 데이터는 Level이 변경되어도 유지해야 할 수 있습니다.선택한 캐릭터선택한 난이도현재 Run Score현재 Stage 번호게임 세션 중 유지해야 하는 설정값일반적인 Actor나 GameMode에 이런 데이터를 저장하면 Level이 변경될 때 해당 객체도 다시 생성되기 때문에 데이터가 사라질 수 있습니다.이럴 때 사용할 수 있는 것이UGameInstance와UGameInstanceSubsystem입니다.이번 글에서는 Unreal Engine 5.8을 기준으로GameInstance에 데이터.. 2026. 9. 22.
Unity6 Gizmo와 Pivot, Center 알아보기 ▣ 이번 글에서는 Unity Scene View에서 GameObject를 조작할 때 사용하는Gizmo와Pivot,Center의 차이를 알아보겠습니다.앞에서는 Transform의PositionRotationScale을 이용해서 GameObject를 이동하고,회전하고,크기를 변경하는 방법을 알아봤습니다.Scene View에서는 Inspector에 숫자를 직접 입력하지 않아도GameObject를 선택한 다음MoveRotateScaleTool을 이용해서 Transform을 조작할 수 있습니다.이때 Scene View에 나타나는 축과 Handle을 이용해서GameObject를 움직이게 됩니다.그리고 Tool Settings에는PivotCenter라는 설정이 있습니다.처음에는 두 설정을 바꿔도 GameObject .. 2026. 9. 21.
Unity6 Tag와 Layer 차이와 사용 방법 ▣ 이번 글에서는 Unity에서 GameObject를 구분할 때 사용하는Tag와 Layer의 차이와 사용 방법을 알아보겠습니다.Unity로 게임을 만들다 보면Scene에 수많은 GameObject가 생깁니다.예를 들어PlayerEnemyGroundItemWeaponDoorNPC같은 Object가 있을 수 있습니다.이때 단순히 GameObject 이름만 이용해서각 Object의 역할을 구분하는 것보다Unity에서 제공하는TagLayer를 사용하는 경우가 많습니다.처음에는 둘 다 GameObject를 분류하는 기능처럼 보여서차이를 이해하기 어려울 수 있습니다.가장 간단하게 먼저 정리하면Tag→ 이 GameObject가 무엇인지 구분Layer→ 이 GameObject를 어떤 시스템에서 처리할 것인지 구분이.. 2026. 9. 21.
언리얼엔진5 C++ PlayerController Possess UnPossess로 Pawn 제어하기 ▣ PlayerController는 현재 자신이 제어할 Pawn을 변경할 수 있습니다.예를 들어 게임을 만들다 보면플레이어 캐릭터↓차량 탑승↓차량 조작↓차량에서 내림↓다시 플레이어 캐릭터 조작처럼 플레이어의 입력 주체를 바꿔야 하는 경우가 있습니다.또는캐릭터 사망↓새로운 캐릭터 생성↓새로운 캐릭터 조종이나Player↓드론 조종↓Player 복귀같은 시스템에서도 같은 구조를 사용할 수 있습니다.이때 사용하는 대표적인 함수가Possess()와UnPossess()입니다.이번 글에서는 Unreal Engine 5.8을 기준으로PlayerController에서 현재 Pawn 확인Possess로 다른 Pawn 제어UnPossess로 제어 해제OnPossess와 OnUnPossessPawn 교체Auto Possess.. 2026. 9. 21.
언리얼엔진5 C++ Sprint Crouch Dash와 Stamina 캐릭터 이동 시스템 구현 ▣ 기본적인 캐릭터 이동을 만들었다면 다음으로 자주 추가하게 되는 기능이 있습니다.걷기달리기 Sprint앉기 Crouch대시 Dash스태미나 StaminaTPS, 액션, RPG 등 캐릭터를 직접 조작하는 게임에서는 자주 사용하는 기능입니다.이번에는 기존 Enhanced Input 이동 코드에Shift→ SprintC→ CrouchLeft Alt→ Dash입력을 추가하고,Sprint→ Stamina 지속 소모Dash→ Stamina 일정량 소모Stamina가 없으면→ Sprint / Dash 제한일반 이동→ Stamina 회복까지 하나의 캐릭터 이동 시스템으로 만들어보겠습니다.Unreal Engine 5.8을 기준으로 작성합니다.구현할 전체 구조최종 흐름은 다음과 같습니다.기본 이동│├─ Sprint│ .. 2026. 9. 21.
Unity6 GameObject 생성, 복제, 삭제, 활성화 방법 ▣ 이번 글에서는 Unity Scene을 구성하는 기본 객체인GameObject를 생성하고,복제하고,삭제하고,활성화 / 비활성화하는 방법을 알아보겠습니다.앞에서 Unity의 기본 구조를Scene↓GameObject↓Component형태로 알아봤습니다.그리고 GameObject에는 기본적으로Transform Component가 존재하고,Position,Rotation,Scale을 이용해서 위치와 방향, 크기를 변경할 수 있다는 것도 확인했습니다.게임을 만들다 보면 Scene에PlayerEnemyItemGroundCameraLightDoor같은 GameObject를 계속 만들게 됩니다.같은 Object가 여러 개 필요하면 복제하고,필요하지 않은 Object는 삭제할 수도 있습니다.게임 진행 상황에 따라보이게.. 2026. 9. 18.
Unity6 World 좌표와 Local 좌표 알아보기 ▣ 이번 글에서는 Unity의 Transform에서 자주 사용하는World 좌표와 Local 좌표의 차이를 알아보겠습니다.앞 글에서는 Transform Component의PositionRotationScale을 이용해서 GameObject의 위치와 회전, 크기를 변경해봤습니다.GameObject 하나만 사용할 때는 Position 값을 그대로 보면 되기 때문에좌표가 크게 어렵지 않습니다.하지만 GameObject 사이에 Parent와 Child 관계가 생기면다음과 같은 상황을 볼 수 있습니다.Scene에서 보는 위치와Inspector에 표시되는 Position이 서로 달라 보인다.이런 차이를 이해하려면World CoordinateLocal Coordinate개념을 알아야 합니다.Unity 공식 문서에서도.. 2026. 9. 18.
언리얼엔진5 C++ ActorComponent로 재사용 가능한 게임 기능 만들기 ▣ 게임을 만들다 보면 서로 다른 Actor에서 같은 기능이 필요한 경우가 많습니다.예를 들어Player→ 공격 CooldownEnemy→ 공격 CooldownWeapon→ 발사 CooldownSkill→ 사용 Cooldown처럼 사용하는 Actor는 서로 다르지만 실제 필요한 기능은 비슷할 수 있습니다.이 기능을 각각의 클래스에 직접 구현하면APlayerCharacter→ Cooldown 변수→ Timer→ Cooldown 함수AEnemyCharacter→ Cooldown 변수→ Timer→ Cooldown 함수AWeapon→ Cooldown 변수→ Timer→ Cooldown 함수처럼 같은 코드가 반복됩니다.이럴 때 공통 기능을 UActorComponent 하나로 분리하면Player└─ ActionC.. 2026. 9. 18.
언리얼엔진5 C++ TWeakObjectPtr 사용법과 UObject 안전하게 참조하기 ▣ 게임을 만들다 보면 다른 Actor나 UObject를 잠시 기억해두고 나중에 다시 사용해야 하는 경우가 많습니다.예를 들어 AI가 현재 공격할 Player를 기억한다고 하겠습니다.Enemy↓Player Target 저장↓Player 추적↓Player 공격그런데 Target으로 저장한 Player가 먼저 사망해서 제거되면 어떻게 될까요?Enemy 입장에서는저 Actor가 아직 존재하는가?이미 Destroy되었는가?계속 사용해도 되는가?를 확인해야 합니다.이처럼 다른 UObject의 수명을 직접 책임지지 않으면서객체가 살아 있는 동안만 안전하게 참조하고 싶을 때 사용할 수 있는 것이TWeakObjectPtr입니다.이번 글에서는 Unreal Engine 5.8을 기준으로 TWeakObjectPtr의 사용 .. 2026. 9. 18.