전체 글830 언리얼엔진5 C++ Aim Assist 조준 보정 시스템 구현 TPS나 FPS 게임에서 조준할 때 에임이 적 근처에 있다면 조준점을 살짝 적 방향으로 보정해주는 기능을 사용할 수 있습니다.보통 이런 기능을 Aim Assist 또는 Aim Correction이라고 합니다.이번에는 복잡한 Lock On 시스템이 아니라Aim 시작↓화면 중앙 근처의 Enemy 찾기↓Enemy가 에임 범위 안에 있으면↓조준 방향을 Enemy 쪽으로 조금 보정하는 간단한 시스템을 만들어보겠습니다.Aim Assist 구조전체 구조는 간단합니다.RMB Aim↓Aim 상태 확인↓Player 앞쪽 Enemy 검색↓Camera 방향과 Enemy 방향 비교↓에임 중앙과 가장 가까운 Enemy 선택↓ControlRotation을 Enemy 방향으로 조금 보간Enemy에게 완전히 고정되는 것이 아니라현재 .. 2026. 10. 6. C++ Root Motion과 Motion Warping으로 공격 위치 보정하기 ▣ 근접 공격 애니메이션을 만들다 보면 캐릭터와 적 사이의 거리에 따라 공격 모션이 어색해지는 경우가 있습니다.예를 들어 공격 애니메이션 자체는 앞으로 150cm 정도 이동하면서 검을 휘두르도록 만들어졌다고 하겠습니다.하지만 실제 게임에서는 적이 항상 정확히 150cm 앞에 있는 것이 아닙니다.Player Enemy ● ------------------- ● 230cm이 상태에서 공격 애니메이션을 그대로 재생하면공격 시작↓애니메이션의 정해진 거리만큼 이동↓Enemy까지 도달하지 못함↓허공에서 공격할 수 있습니다.반대로 적이 너무 가까우면Player Enemy ● ---------- ● 70cm캐릭터가 적을 뚫고 지나가거나 서로 겹칠 수도 있.. 2026. 10. 2. Unity6 FPS 총격과 전투 Sound 적용하기 ▣ 지금까지FPS Combat에다음 기능을 만들었습니다.총 발사DamageAmmoReloadRecoilMuzzle FlashHit EffectEnemy Hit ReactionDeath마지막으로Sound를 추가해서전투 Feedback을완성하겠습니다.이번에는Shoot SoundReload SoundEmpty SoundEnemy Hit SoundEnemy Death Sound를 적용하겠습니다.1. Audio Folder 만들기Project Window에Assets└─ Audio └─ CombatFolder를 만듭니다.Audio File을정리합니다.예를 들어Gun_ShootGun_ReloadGun_EmptyEnemy_HitEnemy_Death입니다.2. Weapon에 AudioSource 추가Player 또.. 2026. 10. 1. Unity6 Enemy Hit Reaction과 Death 만들기 ▣ 이전 Animation 과정에서는Enemy에게IdleWalkAttackDeathAnimation을 적용했습니다.이번에는총을 맞았을 때Hit Reaction을 추가하고Health가 0이 되면Death Animation이실제로 실행되도록 만들겠습니다.1. Hit Animation 준비VARCO에서Hit Reaction Animation이 있다면Unity로 가져옵니다.Animation 이름은예를 들어Enemy_Hit로 하겠습니다.Humanoid Rig과Avatar 설정은앞의 Enemy Animation 과정과같이 설정합니다.2. Animator에 Hit State 추가AC_EnemyAnimator Controller를 엽니다.Enemy_Hit Clip을Animator로 Drag합니다.State 이름은Hit.. 2026. 10. 1. Unity6 FPS 총구 Flash와 Hit Effect 만들기 ▣ 이전 과정에서는FPS Weapon으로Enemy에게 Damage를 주고탄약, Reload, Crosshair,Recoil까지 만들었습니다.하지만 지금은LMB를 눌러도Raycast만 실행되기 때문에총을 쏘는 느낌이 부족합니다.이번에는Muzzle FlashHit Effect를 추가하겠습니다.1. Muzzle Flash총을 발사할 때총구에서 짧게 발생하는빛과 화염 효과를Muzzle Flash라고 합니다.앞에서 만들어둔MuzzlePoint를 사용하겠습니다.2. Particle System 만들기MuzzlePoint 아래에Particle System을추가합니다.VARCO_Gun└─ MuzzlePoint └─ MuzzleFlash3. Play On Awake 해제Particle System의Main Modul.. 2026. 10. 1. Unity6 FPS Crosshair와 총기 Recoil 만들기 ▣ 이전 글에서는총기에Magazine과 Reload를추가했습니다.이번에는사격 위치를 알 수 있도록화면 중앙에Crosshair를 만들고총을 쏘면Camera가 위로 들리는Recoil을 추가하겠습니다.1. Crosshair 만들기기존 HUD Canvas를사용하겠습니다.HUDCanvas아래에TextMeshPro Text를 하나 만듭니다.이름은Crosshair로 합니다.Text는+로 설정합니다.2. 화면 중앙 배치Rect Transform의Anchor를Center로 설정합니다.Pos X = 0Pos Y = 0으로 두면화면 중앙에Crosshair가 나타납니다.3. 정렬Text Alignment는가운데 정렬로 설정합니다.Font Size와크기는게임 화면에 맞게조절합니다.4. Recoil은 FPSPlayerLook과 .. 2026. 10. 1. Unity6 FPS 탄약과 Reload 시스템 만들기 ▣ 이전 아이템 과정에서는탄약 Item을 주우면PlayerItemInventory의 Ammo가증가하도록 만들었습니다.이번에는이 Ammo를FPS Weapon과 연결합니다.총기는Magazine→ 현재 총 안에 든 탄약Reserve Ammo→ Inventory에 가지고 있는 탄약두 부분으로 나누겠습니다.1. PlayerItemInventory 수정기존 PlayerItemInventory에현재 Ammo를 확인하는Property를 추가합니다.public int Ammo{ get { return ammo; }}2. TakeAmmo 만들기Reload할 때Inventory에서 필요한 만큼만가져오겠습니다.public int TakeAmmo( int amount){ int taken.. 2026. 10. 1. Unity6 FPS Weapon으로 Enemy에게 Damage 주기 ▣ 이전 글에서는Enemy에Health Component를 추가했습니다.이번에는FPSWeapon의 Raycast와Health를 연결하겠습니다.1. Weapon Damage 변수FPSWeapon에다음 변수를 추가합니다.[SerializeField]private int damage = 25;2. Raycast로 Health 찾기총알이 맞은 Collider에서부모의 Health를 찾습니다.Health health = hit.collider .GetComponentInParent();3. Health가 있다면 Damageif ( health != null){ health.TakeDamage( damage );}이렇게 하면Health를 가진 Enemy만Damage를 .. 2026. 10. 1. Unity6 Health와 Damage 시스템 만들기 ▣ 이전 글에서는Raycast가 Enemy를 맞혔는지판단했습니다.이번에는 Enemy에게실제Health를 추가하겠습니다.전체 흐름은Health Component 생성↓Max Health 설정↓TakeDamage()↓Current Health 감소↓0 이하↓Dead 상태입니다.1. Health Script 만들기새로운 Script를 만들고이름을Health로 합니다.using UnityEngine;public class Health : MonoBehaviour{ [SerializeField] private int maxHealth = 100; private int currentHealth; private bool isDead; public bool IsDead { .. 2026. 10. 1. Unity6 Raycast로 Enemy 명중 판정하기 ▣ 이전 글에서는LMB를 누르면FPS Camera에서Raycast가 발사되도록 만들었습니다.현재는 Ray가Collider를 맞히면단순히 Object 이름만출력합니다.이번에는맞힌 Object가Enemy인지 구분하겠습니다.전체 흐름은Enemy Collider 준비↓EnemyTarget 추가↓Raycast Hit↓GetComponentInParent↓Enemy 여부 확인↓명중 위치 확인입니다.1. Enemy Collider 확인Raycast가 Enemy를감지하려면Enemy에게 Collider가필요합니다.Enemy Root 또는몸을 구성하는 Child에Capsule ColliderBox Collider등을 추가합니다.Humanoid Enemy라면간단한 과정에서는Capsule Collider 하나로도테스트할 수 .. 2026. 10. 1. Unity6 FPS Weapon 조준하고 Raycast로 총 발사하기 ▣ 이전 글에서는VARCO Gun을FPS Camera 아래에배치했습니다.현재 구조는Main Camera└─ WeaponHolder └─ VARCO_Gun └─ MuzzlePoint입니다.이번에는RMB→ 조준LMB→ 총 발사기능을 만들겠습니다.총알 GameObject를실제로 날리는 대신Camera 앞쪽으로Raycast를 발사하는Hitscan 방식으로 구현하겠습니다.전체 흐름은Aim Action 추가↓Shoot Action 추가↓FPSWeapon 생성↓RMB 입력↓Camera FOV 변경↓LMB 입력↓Camera Forward Raycast입니다.1. Input Actions 열기기존PlayerInputActions를 엽니다.현재 Player Map에는MoveLookJumpRunInteractH.. 2026. 10. 1. Unity6 VARCO 총을 FPS Player에게 장착하고 위치 맞추기 ▣ 이전 과정에서는VARCO로 만든 Enemy를Unity6에 가져와IdleWalkAttackDeathAnimation을 적용했습니다.이제 3회차의 핵심인Player가 사용할 총을 만들어보겠습니다.이번 글에서는VARCO에서 만든 총 Model을FPS Player의 Camera 아래에 배치하고1인칭 화면에서자연스럽게 보이도록 위치를 맞추겠습니다.전체 흐름은VARCO Gun Import↓WeaponHolder 만들기↓Main Camera Child로 배치↓Gun Model 연결↓Local Position / Rotation 조절↓MuzzlePoint 만들기입니다.1. VARCO Gun ImportVARCO에서 만든총 Model을Unity Project로 가져옵니다.예를 들어Assets└─ Weapons ├.. 2026. 10. 1. Unity6 Enemy Idle / Walk / Attack / Death Animation 적용하기 ▣ 이전 글에서는VARCO Enemy를Unity6로 가져와서Humanoid RigAvatarAnimatorAnimator Controller를 설정했습니다.그리고Enemy의 기본 상태로IdleAnimation을 재생했습니다.이번에는남아 있는WalkAttackDeathAnimation까지 추가해서Enemy의 기본 Animation System을완성하겠습니다.최종적으로가만히 있음→ Idle이동→ Walk공격→ Attack죽음→ Death상태가 되도록 만들겠습니다.전체 흐름은Animator State 만들기↓Idle / Walk / Attack / Death 배치↓Animator Parameter 만들기↓Transition 연결↓Script에서 Parameter 변경↓Animation 전환 테스트입니다.1. .. 2026. 10. 1. Unity6 VARCO Enemy Character Import하고 Animator 설정하기 ▣ 이전 글에서는VARCO 3D에서Enemy Character를 만들고RigIdleWalkAttackDeathAnimation을 준비했습니다.이번 글에서는준비한 FBX File을Unity6 Project로 가져오겠습니다.그리고Humanoid RigAvatarAnimatorAnimator Controller를 설정해서Unity에서 Enemy Animation을재생할 준비를 하겠습니다.전체 흐름은FBX Import↓Model 확인↓Rig = Humanoid↓Avatar 생성↓Animation FBX Rig 설정↓Animator Controller 생성↓Enemy에 Animator 적용↓Idle Animation 테스트입니다.1. Enemy Folder 확인먼저 Project Window에Enemy용 Fold.. 2026. 10. 1. Unity6 VARCO Enemy Character Rig과 Animation 준비하기 ▣ 이전 과정에서는FPS Player를 만들고RaycastE 상호작용문 열기버튼탄약회복 아이템열쇠등의 기본적인게임 플레이 시스템을 만들었습니다.이번 3회차부터는본격적으로Player가 싸울Enemy를 만들어보겠습니다.먼저 VARCO 3D를 이용해서Enemy Character를 준비하고Unity에서 Animation을 사용할 수 있도록Rig과Animation을 준비하겠습니다.이번에 필요한 Animation은Idle→ 가만히 있을 때Walk→ Player를 향해 이동할 때Attack→ Player를 공격할 때Death→ 죽었을 때입니다.전체 흐름은VARCO Enemy 생성↓Character 형태 확인↓Rig 적용↓Animation 적용↓Idle / Walk / Attack / Death 준비↓FBX Expor.. 2026. 10. 1. Unity6 VARCO 아이템 배치하고 탄약·회복·열쇠 E입력으로 획득 및 사용하기 ▣ 이전 글에서는IInteractableInterface를 이용해서문잠긴 문버튼을Player의 하나의 E 상호작용 시스템으로처리했습니다.현재 Player의 상호작용 구조는FPS Camera↓Raycast↓IInteractable↓[E] 상호작용 UI↓E 입력↓Interact()입니다.이번에는 이 시스템을게임 속 아이템까지 확장하겠습니다.VARCO에서 만든탄약회복 아이템열쇠3D Asset을Unity Scene에 배치하고Player가 바라보면[E] 탄약 줍기[E] 회복 아이템 줍기[E] 사무실 열쇠 줍기와 같이 표시되도록 만들겠습니다.그리고 E를 누르면아이템 종류에 따라다른 기능을 실행합니다.Ammo→ 탄약 증가Heal→ 회복 아이템 증가Key→ PlayerKeyInventory에 Key 추가회복 아이템은Q.. 2026. 10. 1. Unity6 버튼으로 잠긴 문 열기 ▣ 이전 글에서는IInteractableInterface를 이용해서Player가 버튼을 바라보면[E] 버튼 누르기UI가 나타나고,E를 누르면Light ON / OFFGameObject ON / OFF를 제어하는ButtonInteractable을 만들었습니다.또 그보다 앞에서는LockedDoorInteractable을 이용해서특정 Key를 가지고 있어야열 수 있는 잠긴 문도 만들었습니다.이번 글에서는이 두 시스템을서로 연결해보겠습니다.게임에서는 이런 구조를자주 사용할 수 있습니다.잠긴 문↓직접 E를 눌러도 열리지 않음↓근처에서 버튼 발견↓[E] 버튼 누르기↓문 잠금 해제↓문 자동으로 열림즉 이번에는Button이 단순히Light나 GameObject를ON/OFF 하는 것에서 한 단계 더 나아가다른 Scrip.. 2026. 9. 30. Unity6 버튼 상호작용으로 조명과 GameObject 제어하기 ▣ 이전 글에서는IInteractableInterface를 이용해서Player가 문을 바라보면[E] 문 열기UI가 나타나고,E를 누르면 문이 열리고 닫히도록 만들었습니다.또한PlayerKeyInventory를 이용해서특정 열쇠가 있어야 열 수 있는잠긴 문도 만들었습니다.현재 상호작용 시스템의 기본 구조는FPS Camera↓Raycast↓IInteractable 확인↓Interaction UI 표시↓E 입력↓Interact()입니다.이번 글에서는이 구조를 그대로 사용해서새로운 상호작용 Object인Button을 만들어보겠습니다.Player가 버튼을 바라보면[E] 버튼 누르기UI가 나타나고E를 누르면조명 ON / OFFGameObject ON / OFF를 제어하도록 만들겠습니다.전체 흐름은Button Obj.. 2026. 9. 30. Unity6 열쇠가 필요한 잠긴 문 만들기 ▣ 이전 글에서는IInteractableInterface를 이용해서Player가 문을 바라보면[E] 문 열기UI가 나타나고,E를 누르면문이 부드럽게 열리고 닫히는DoorInteractable을 만들었습니다.현재 구조는FPS Camera↓Raycast↓IInteractable↓[E] 문 열기↓E↓DoorInteractable.Interact()↓문 열기 / 닫기입니다.하지만 현재 문은조건 없이모두 열 수 있습니다.서바이벌 호러나어드벤처 게임에서는다음과 같은 문이 필요합니다.사무실 열쇠가 필요한 문창고 열쇠가 필요한 문학교 열쇠가 필요한 문마스터키가 필요한 문이번 글에서는Player가지정된 열쇠를 가지고 있을 때만열 수 있는Locked Door를 만들겠습니다.전체 흐름은PlayerKeyInventory 만들.. 2026. 9. 30. Unity6 문 Pivot 설정하고 E 입력으로 문 열고 닫기 ▣ 이전 글에서는FPS Camera의Raycast를 이용해서Player가 바라보는 Object가상호작용 가능한 Object인지 확인했습니다.그리고IInteractableInterface를 만들어서DoorButtonItemKey처럼 서로 다른 Object를하나의 상호작용 시스템에서처리할 수 있도록 만들었습니다.현재 흐름은FPS Camera↓Raycast↓IInteractable 확인↓[E] 상호작용 UI↓E 입력↓Interact()입니다.이번 글에서는이 시스템에 실제Door를 연결해보겠습니다.Player가 문을 바라보면[E] 문 열기가 나타나고E를 누르면문이 부드럽게 열립니다.열린 문을 다시 바라보면[E] 문 닫기가 나타나고E를 다시 누르면문이 닫히도록 만들겠습니다.전체 흐름은Door Model 준비↓경첩.. 2026. 9. 30. Unity6 상호작용 가능한 오브젝트 구분하고 E 상호작용 UI 표시하기 ▣ 이전 글에서는FPS Camera가 바라보는 방향으로Raycast를 발사해서Player가 현재 바라보고 있는GameObject를 감지했습니다.현재 구조는FPS Camera↓Raycast↓Collider 감지↓RaycastHit↓CurrentTarget입니다.하지만 현재는 문제가 하나 있습니다.Raycast 앞에 Collider만 있다면무엇이든 감지됩니다.예를 들어WallFloorDoorButtonItem을 모두CurrentTarget으로 저장할 수 있습니다.하지만 실제 게임에서는모든 Object와 상호작용할 수 있는 것은 아닙니다.이번 글에서는Wall→ 상호작용 불가능Floor→ 상호작용 불가능Door→ 상호작용 가능Button→ 상호작용 가능Item→ 상호작용 가능처럼상호작용 가능한 Object를 구.. 2026. 9. 30. Unity6 FPS Camera Raycast로 바라보는 오브젝트 감지하기 ▣ 이전 글에서는Unity6의Input System과CharacterController를 이용해서FPS Player의WASD 이동Mouse 시점 이동Space 점프Left Shift 달리기기능을 만들었습니다.이제 Player가게임 속 공간을 돌아다닐 수 있게 되었습니다.하지만 아직 Player는게임 속 오브젝트와상호작용할 수 없습니다.예를 들어Player가 문 앞에 서 있어도지금 문을 바라보고 있는가?를 알 수 없습니다.아이템 앞에 서 있어도지금 아이템을 바라보고 있는가?를 알 수 없습니다.이번 글에서는FPS Camera가 바라보는 방향으로Raycast를 발사해서Player가 현재 바라보고 있는GameObject를 감지해보겠습니다.전체 흐름은FPS Camera↓Camera Position에서 Ray 시작.. 2026. 9. 30. Unity6 FPS Player Jump와 Run 만들기 ▣ 이전 글에서는Unity6의Input System과FPS Camera를 이용해서Mouse로 FPS Player의시점을 움직이는 기능을 만들었습니다.현재 Player는W A S D→ 이동Mouse→ 시점 이동을 할 수 있습니다.이번 글에서는 여기에Space→ JumpLeft Shift→ Run을 추가하겠습니다.기존에 만들었던FPSPlayerMovementScript를 그대로 확장해서걷기, 달리기, 점프, 중력을하나의 이동 Script에서 처리하겠습니다.전체 흐름은Input Actions에 Jump 추가↓Space 연결↓Input Actions에 Run 추가↓Left Shift 연결↓Jump 입력 받기↓CharacterController.isGrounded 확인↓Jump Velocity 계산↓Gravity.. 2026. 9. 30. Unity6 FPS Camera 만들고 마우스로 시점 움직이기 ▣ 이전 글에서는Unity6의Input System과CharacterController를 이용해서FPS Player가W A S D키로 이동할 수 있도록 만들었습니다.현재 Player는Player├─ Character Controller├─ Player Input└─ FPS Player Movement구조를 가지고 있습니다.하지만 아직 Player를 움직여도항상 같은 방향만 바라보고 있습니다.이번 글에서는 여기에FPS Camera+Mouse Look을 추가하겠습니다.마우스를왼쪽 / 오른쪽으로 움직이면Player 전체가 회전하고,마우스를위 / 아래로 움직이면Camera가 위아래를 바라보도록 만들어보겠습니다.전체 흐름은Player에 Camera 배치↓Input Actions에 Look 추가↓Mouse Delt.. 2026. 9. 30. 이전 1 2 3 4 ··· 35 다음