본문 바로가기

Unreal 게임개발종합반 2주차

7일차 250722 (강의 2-2)

액터의 상호작용 - 오버랩, 충돌이벤트

겹쳐짐(Overlap) 이벤트 발생

레벨 블루프린트에서 구현하기

1. 트리거 박스를 배치한다.

2. 레벨에서 트리거 박스를 선택 후 레벨 블루프린트에서 우클릭

트리거 박스를 클릭 후 레벨 블루프린트에서 우클릭을 하면 위처럼 뜬다.

3. 위 상태에서 add on actor begin overlap 노드 생성

add on actor begin overlap의 Other Actor가 겹쳐지는 액터에 대한 정보값을 가짐. 위 테스트는 트리거 박스에 겹쳐지는 OtherActor의 Name이 표시되는 로직이다.
트리거 박스에 겹쳐질 때 마다 왼쪽 위 캐릭터의 이름(BP_Character)이 뜬다.

액터를 생성하여 구현하기

1. 일반 액터 생성하기

2. 액터에 박스 콜리전 추가

3. 이벤트 그래프에서 Event ActorBeginOverlap의 Other Actor를 Print String 노드에 연결한다.

4. 액터를 레벨에 배치 후 오른쪽과 왼쪽을 번갈아가며 출력 테스트한다.

오른쪽 구역은 레벨 블루프린트에서 구현한 것(파란글씨), 왼쪽 구역은 액터 생성하여 구현한 것(빨간 글씨)

응용하기

목표 : Enemy의 범위 안에 캐릭터가 들어왔을 때 상호작용하기

1. Enemy 액터를 생성한다.

2. 액터에 Sphere 콜리전 추가한다.

3. Enemy가 캐릭터를 인식하려는 범위만큼 Sphere의 크기를 조정한다.

4. 이벤트그래프에서 Sphere을 클릭해준 후 Add On Component BeginOverlap 노드를 생성한다.

우클릭 시 Sphere에 대한 이벤트 추가라고 떠야함.

위와같이 Sphere를 클릭하여 Add On Component BeginOverlap를 생성하는 경우는 Sphere으로만 상호작용하여 이벤트를 실행하고 싶을 때 하는 방법이다.
액터의 모든 컴포넌트가 상호작용하여 겹쳐졌을 때의 이벤트를 실행 시키고 싶을 때는 Event ActorBeginOverlap 노드를 사용해주면 된다.

5. Enemy의 인식 범위(Sphere) 안에 들어오면 캐릭터 방향으로 회전하기.

Enemy를 회전시키기 위해 Set Actor Rotation 사용
Find Look at Rotation : 현재 액터(Enemy)의 위치를 기준으로 Target의 위치를 사용하여 회전 값을 구해주는 기능을 가진 노드이다.
Sphere에 겹쳐진 Other Actor의 정보를 Get Actor Location으로 연결하여 타겟의 위치 값을 구함.

6. Enemy를 레벨에 배치 후 테스트

범위에 들어갈 때마다 휙휙 돌아가며 잘 작동하는 모습이다. 하지만 범위 안에서 움직이면 회전이 되지 않는다.

 

위와같이 구현하면 Sphere 범위에 어떤 액터가 들어가든 Enemy가 회전을 한다.

아래는 이를 특정한 액터만 들어갔을 때 작동을 하고 싶을 때의 방법이다.

Cast To BP_Character를 사용하는 방법이다.

On Component BeginOverlap만 가지고는 겹쳐지는 액터가 캐릭터인지 차인지 알 수 없다. 캐릭터만 가지고 있는 어떠한 값들을 사용하기 위해 Cast To BP_Character 노드를 사용함.
즉, 알 수 없는 Other Actor 값을 캐릭터라는 클래스로 변경하는 것.

작동은 아까와 같이 되는 모습. 똑같이 범위안에서 움직일 때 회전하지 않는다.

캐릭터가 인식 범위 안에서 움직일 때 부드럽게 회전시키기.

1. Event Tick에 사용하기 위해 Bp_Character를 변수로 만든다.

인식 범위에 들어왔을 때 As BP_Charcter 변수에 캐릭터의 정보를 넣는 로직.

2. 인식 범위에서 나갔을 때 정보를 비우기 위한 노드를 구현한다.

인식 범위에서 나갔을 때 Set As BP_Character에 아무것도 연결되지 않아 비어있는 모습.

3. 캐릭터가 존재 할 때만 회전하도록 Is Valid? 노드 사용.

4. 아까와 같이 캐릭터의 위치를 바라보는 로직을 구현한다.

Event Tick에 구현하여 범위안에서 캐릭터가 움직일 때 Enemy가 따라서 회전한다.

5. Lerp(Rotator) 노드를 사용하여 부드러운 회전 시키기.

Enemy의 현재 회전값(Get Actor Rotation)과 Enemy가 목표로 하는 회전값(Find Look at Rotation)을 각 Lerp의 A, B에 연결하고 Event Tick의 Delta Seconds를 Alpha에 연결한다.

Lerp의 결과 값을 Set Actor Rotation에 연결한다.

Multuply(곱하기) 노드를 사용하여 회전 속도 조절이 가능하다.

충돌 이벤트

자동차와 충돌 시 다양한 효과 구현하기

1. 자동차 액터 생성

2. 컴포넌트에서 스태틱메시 클릭 후 On Component Hit 노드 생성

Static Mesh에 대한 이벤트 추가가 떠야한다.

3. Print String을 사용하여 테스트

자동차와 캐릭터가 부딪힐 때 캐릭터의 이름이 잘 출력되는 모습.

4. 자동차와 충돌 시 소리가 나도록 구현하기

Play Sound at Location 노드를 이용하고 사운드 에셋을 넣어준다.
Play Sound at Location에 자동차의 위치 값을 넣어주고 소리 재생 후 자동차가 사라지는 로직을 구현함.

5. 자동차와 충돌 시 캐릭터가 날아가도록 구현하기

Cast To BP_Character를 이용하여 hit 되는 Other Actor를 캐릭터로 변환해주고 Launch Character 노드를 생성한다.

Launch Character 노드는 캐릭터를 날려버리는 노드이다.

XYOverride와 ZOverride에 체크를 하면 캐릭터가 기존 가지고 있는 속도의 값을 무시 한 채 Launch Character 노드가 가진 Launch Velocity의 값으로만 발사하도록 한다.
체크를 하지 않으면 캐릭터가 가진속도와 Launch Velocity의 값을 계산하여 발사가 된다.

자동차와 캐릭터가 충돌 시 위로 1000만큼 날아가고 폭발 사운드가 재생된 후 자동차가 사라지는 로직.

6. 자동차와 충돌 시 이펙트(특수 효과) 발생.

구 버전 시스템

Spawn Emitter at Location은 캐스케이드 파티클 시스템을 스폰하는 노드인데 예전의 시스템이다.
현재는 나이아가라 시스템으로 대체됐다.
현재의 시스템은 Spawn System at Location 노드로 스폰하는데 현재 가지고있는 에셋이 없어서 구버전으로 테스트를 한 것. 둘 다 에셋에 맞게 사용 가능함. 차이는 없다.
현 버전 시스템

자동차와 충돌 시 캐릭터가 1000만큼 위로 점프하고 자동차가 사라지고 불꽃이 스폰되는 모습.

과제 : 자동문 열기, 다가오는 객체와 부딪히면 객체가 파괴 + 캐릭터 밀려나기

 

'Unreal 게임개발종합반 2주차' 카테고리의 다른 글

9일차 250724 (강의 2-6)  (0) 2025.07.29
9일차 250724 (강의 2-5)  (0) 2025.07.29
8일차 250723 (강의 2-4)  (0) 2025.07.28
8일차 250723 (강의 2-3)  (0) 2025.07.28
6일차 250721 (강의 2-1)  (0) 2025.07.28