24. [UE5] NPC 만들기(정적/동적/Socket)

2024. 11. 3. 22:28·4. 언리얼 엔진(Unreal Engine) 공부/Unreal Engine 5
함수 노드의 종류
일반 함수(Funtion / 파란색)
- 실행 핀이 있음
- 클래스, 상태를 자유롭게 변경이 가능

순수 함수(Pure function / 초록색)
- 실행 핀이 없음
- 데이터, 상태를 변경하지 않음 → 항상 동일한 데이터를 가져온다는 보장이 있음
- 현재 필요한 데이터를 가지고 와야 할 때의 경우가 많음 (ex : Get / 조작, 가공하는 노드가 아님)

1. 정적인 NPC(의자에 앉기, 서있기)

1) NPC 제작

  • Controller → AI가 제어함
  • Animation → Locomotion(Idle, Walk), Sitting

2) 동작 만들기

  • Mixamo에서 애니메이션 가져오기
  • 5개의 캐릭터를 가져온 후 파일 정리(Skeleton은 Mesh 폴더 안에 넣기)
  • NPC들의 Blueprint Character를 만들어야 함

 

 

  • Character Blueprint의 편집창에 들어가 Mesh Component에서 Leonard 캐릭터를 불러옴
  • Capsule Component를 선택해서 Capsule Half Height 사이즈를 확인(88), Mesh Z 위치를 -88로 하면 바닥에 딱 맞춤
  •  캐릭터 Z축 위치를 -90으로 맞춰 앞을 바라보는 파란색 화살표와 위치를 동일하게 함

 

 

  • 머리카락이 잘 안보일 때는 Mesh Component 내 헤어 Element Material 편집창에 들어가서 텍스쳐 하나를 Alpha와 Opacity를 연결

 

 

  • 반복 동작은 Use Animation Asset을 선택해 애니메이션을 넣어줌
  • Blueprint Character를 Viewport에 꺼내 배치하기
  • 위와 같은 방법으로 여러 개의 NPC 제작 후 배치

 


2. 동적인 NPC(걸어가기)

디테일하지는 않지만 심플하게 쓸 수 있는 방법

  • Character Blueprint 내 편집창에서 Use Animation Blueprint 사용
  • Character를 돌아다니고 멈추는 등의 상태로 만들 것 → 컨트롤러로 제어하고 AI로 움직이게 함
  • EventGraph로 이동해 AI MoveTo 노드를 사용
  • 게임 시작하자마자 움직이게 할 것 → Event BeginPlay
  • 현재 위치 : Get Actor Location / 랜덤한 움직임 구현 : Get Random Reachable Point In Radius → 이 두 노드를 Origin에 연결해 돌아다니는 캐릭터의 현재 위치를 랜덤하게 함
  • Radius 1000정도 설정
AI MoveTo
  • Pawn : 외부 입력을 받을 수 있는 Blueprint Class. 여기에서의 Pawn은 외부 제어로 움직이는 객체 → self 를 연결(나 자신을 움직이기)
  • Destination : Random(불규칙)한 목적지로 설정. 움직임이 게임 실행 동안 지속적으로 업데이트(목적지가 계속 업데이트 되어야 한다는 의미로, 돌아다니는 캐릭터의 현재 위치를 파악해야 함)
  • Acceptance Radius : 움직임의 반경
  • Stop on Overlap : 충돌 영역에 닿으면 멈추게 할 것인가

 

 

  • 실행해도 아직 움직이지는 않음 → 돌아다녀야 하는 영역을 표시해야 함(이동 영역)
  • Nav Mesh Bounds Volumn 추가, 바닥과 겹쳐지도록 배치
  • P를 누르면 초록색 영역이 보임 → NPC의 이동 영역이 됨

 

 

  • 반복 실행
    • for loop 노드 : 동시 실행
    • 시간 흐름에 따른 반복 : 30FPS → Event Tick / Timeline 노드
    • 하나의 동작이 끝나고 나서 반복 : 재귀 실행(한 사이클의 실행이 끝나면 동일한 루팅을 다시 실행)
  • 끝나고 나면 다시 실행하도록 AI MoveTo 내 OnSuccess에 동일하게 반복 실행할 수 있도록 하기
  • Custom Event로 NPCWalk 생성 후 연결
  • 시작하자마자 NPC Walk가 실행되고, 아래의 노드로 반복 실행되도록 함 → 계속 반복적으로 움직임

 

 

  • 재귀 실행 NPCWalk 노드 전에 잠깐의 텀을 주는 노드 넣기 → Delay
  • 자연스러운 불규칙함을 위해 Random Float in Range 노드를 Delay duration에 넣어주기
    • Random Float in Range  : 범위를 지정하면 그 안에서 다양한 숫자가 랜덤으로 생성됨
  • 한 곳에 머무는 시간이 좀 더 길어짐
  • 그러나 캐릭터의 움직임의 속도가 빨라 조정할 필요가 있음

 

 

  • Character Movement에서 Character Blueprint의 최대 속도, 최저 속도를 확인
  • EventGraph에서 지정해주기
  • Character Movement와 Set Max Walk Speed 연결

 

 

  • 전체 맵 내에서 움직일 수 있도록 Nav Mesh Bounds Volumn 공간 덮기
  • Animation Blueprint 만들기. Mixamo_Bot_Skeleton 선택
    • AnimGraph : 상태를 만들어줌. 서있거나 걸어다니는 두 가지 동작만 만듦 → Locomotion만 있으면 됨
    • State Machine : Locomotion 만들기. 더블 클릭으로 들어가서 Add State (Idle, Walk)

 

 

  • Idle State 더블클릭 → 제자리에서 움직이는 모션
  • 마네킹 애니메이션으로 가서 걷는 모션 Walk_Fwd를 Mixamo_bot을 타겟으로 Retargeting
  • 완료한 애니메이션 Walk, Idle 애니메이션을 Locomotion으로 연결(둘 다 Loop Animation 체크)

 

 

  • 상태를 전환하는 조건 만들어주기
  • 변수 만들기 → ShouldMove
    • 윗 부분의 상태 전환에 변수 연결(Idle to Walk)
    • 아래 부분의 상태 전환에는 not boolean을 껴 넣어 변수 연결(Walk to Idle)

 

 

  • EventGraph에서 제어하기
  • 동작 여부 체크 : ShouldMove → Speed → Velocity
  • Try Get Pawn Owner : 그 안에 있는 컨트롤러 데이터를 쓰고자 함
  • 속도(Velocity)를 가져와서 속력(Vector Length)을 추출함. 3보다 큰 지 비교함 → 움직임만 체크하면 됨
  • Blueprint Character에 애니메이션 블루프린트(ABP_Mixamo) 할당

 

 

  • 목적지까지 가는 중간에 장애물을 만났을 때 멈춰야 할 때는 Character Blueprint의 EventGraph의 AI MoveTo에서 Stop on Overlap 체크하기
    • 좀 더 상세하게 하려면, Acceptance Radius 200 → 반응 영역 2m정도 / 그래도 제자리 걸음의 경우가 있음
  • Event ActorBeginOverlap으로 장애물이 있으면 멈추도록 다시 설정

 

 

  • Nav Mesh Bounds Volumn을 여러 개 만들어 영역을 지정해 NPC들이 그 곳에서만 움직이도록 하기

 

 


3. 애니메이션에 소품 적용하기(Socket)

 

애니메이션으로 움직이는 캐릭터에 가방을 쥐어주도록 해보자

 

  • Skeletal Mesh 편집창에 들어감
  • Skeletal tree의 right hand 찾아서 Add Socket
  • RightHandSocket이 생긴 것 확인

 

 

  • RightHandSocket 우클릭 Add Preview Asset 클릭으로 미리보기
  • Character Blueprint로 이동해서 StaticMesh Component 생성 후 Mesh 하위에 넣어주어야 Parent Socket을 설정할 수 있음
  • ParentSocket에 RightHandSocket 지정 후 Static Mesh 선택
  • Skeletal Mesh 편집창의 Preview 위치를 맞춰주면 Blueprint의 위치가 맞춰짐

 

 

  • Blueprint Character 편집창에서 디테일하게 수정

'4. 언리얼 엔진(Unreal Engine) 공부 > Unreal Engine 5' 카테고리의 다른 글

26. [UE5] PCG(Procedural Content Generation)  (1) 2025.01.13
25. [UE5] Dialogue 대화 기능 구현 - 작성중  (0) 2024.11.11
23. [UE5] UI Interaction(Widget)  (0) 2024.10.30
22. [UE5] 다른 액터와 캐릭터가 상호작용 하기(Overlap, CutScene, LevelBlueprint)  (1) 2024.10.23
21. [UE5] 블루프린트를 위한 프로그래밍 기초  (1) 2024.10.18
'4. 언리얼 엔진(Unreal Engine) 공부/Unreal Engine 5' 카테고리의 다른 글
  • 26. [UE5] PCG(Procedural Content Generation)
  • 25. [UE5] Dialogue 대화 기능 구현 - 작성중
  • 23. [UE5] UI Interaction(Widget)
  • 22. [UE5] 다른 액터와 캐릭터가 상호작용 하기(Overlap, CutScene, LevelBlueprint)
스농이
스농이
2024.07.22부터의 기록
  • 스농이
    3D 비주얼 아티스트 성장일지
    스농이
  • 전체
    오늘
    어제
    • 3D 비주얼 아티스트 공부 기록 (78)
      • 1. 콘텐츠 기획 공부 (7)
        • 콘텐츠 기획 [이론] (3)
        • 콘텐츠 기획 [실습] (4)
      • 2. 3D 렌더링 및 생성형 AI 공부 (7)
        • VRED (2)
        • Stable Diffusion & Blender (2)
        • Midjourney & GPT4o (3)
      • 3. 후디니(Houdini) 공부 (16)
        • Houdini [이론] (8)
        • Houdini [실습] (8)
      • 4. 언리얼 엔진(Unreal Engine) 공부 (33)
        • Unreal Engine 5 (26)
        • Automotive Animation 스터디 [기.. (5)
        • Automotive Cinematic 스터디 [심.. (2)
      • 2. 블렌더(Blender) 공부 (15)
        • 지오메트리 노드 [이론] (3)
        • 지오메트리 노드 [실습] (2)
        • Blender [이론 및 실습] (10)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
스농이
24. [UE5] NPC 만들기(정적/동적/Socket)
상단으로

티스토리툴바