[UE] Collision

허건호·2023년 2월 23일
1

Unreal Engine

목록 보기
6/6
post-thumbnail

Intro

  • 본 학습 자료는 경희대학교 게임 & 실감형 컨텐츠 제작 동아리 Ludens 의 Unreal-Study 자료입니다.

Player

  • 우리는 먼저 Player 의 무기에 Collision 을 추가해줄겁니다.

Weapon Collision

  • PlayerBP 를 열어줍시다.

  • 메시 컴포넌트의 하위 항목으로 'Box Collision' 을 추가해줍시다. 이름은 Weapon 으로 합시다.

  • Weapon 의 디테일 탭에서, '부모 소켓' 을 FX_weapon_base 로 바꿔줍시다.

  • 그리고, 트랜스폼의 각 요소들을 바꿔줍시다.

  • 위와 같이 트랜스폼을 변경하면 다음과 같이 칼의 크기와 비슷한 Collision 이 생성될 것입니다.

  • 만약 Collision 이 이상하거나, 조금 더 잘 맞게 바꾸고 싶다면 직접 트랜스폼의 요소들을 변경하면 됩니다.

Collision 설정

  • 디테일 탭을 조금 내리다보면, '콜리전' 이라는 항목이 있습니다.

  • 'Can Character Step Up On' 을 'No' 로 설정해줍시다. 말 그대로 칼 위에 다른 캐릭터가 서 있을 수 없도록 설정하는 것입니다. (크게 중요하진 않습니다.)
  • '콜리전 프리셋' 을 'Custom...' 으로 설정해주고, '콜리전 활성화됨' 을 'No Collision' 으로 설정해줍시다.

    왜 콜리전을 없애버리는 지 궁금하신 분도 계실겁니다. 곧 설명하겠지만, Player 가 공격을 할 때만 Collision 을 On 하고, 공격이 끝나면 Off 하는 방식을 사용할 것이기 때문에, 평소에는 No Collision 상태로 설정해두는 것입니다.

  • 마지막으로, '콜리전 반응' 에서 오버랩을 체크해줍시다. 무언가가 Collision 을 통과하였을 때 반응하겠다는 뜻입니다.

Overlap Event 생성

  • 디테일 탭을 조금 더 내리면, '이벤트' 라는 항목이 있습니다.

  • '컴포넌트 오버랩 시작 시' 이벤트를 추가해줍시다. + 버튼을 누르면 됩니다.

  • 바로 이벤트 노드로 넘어왔다면 잘 생성된겁니다.

  • 오버랩 된 다른 액터가 'Enemy' 라는 Tag 를 가지고 있을 때만 'Enemy' 라는 문구를 출력하겠다는 이야기입니다.
    • Print String 노드는 확인용입니다.

Ememy Tag 추가

  • 우리는 Enemy 에게 'Enemy' 라는 Tag 를 추가한 적이 없습니다. 따라서 추가해줍시다.
    • EnemyBP 를 열어줍시다.

  • EnemyBP (셀프)를 선택한 뒤, 디테일 탭에서 Tag 를 검색해줍시다.

  • 태그 항목 옆에 있는 '+' 버튼을 눌러주고, 인덱스[0] 에 Enemy 를 적어줍시다.

Collision On/Off

  • 우리는 AnimNotify 를 이용하여 Collision 을 켜고, 끌겁니다. AnimNotify 1주차에 이어 재등장~

Montage 에서 Notify 추가

  • PrimaryAttack_A_Slow_Montage, PrimaryAttack_B_Slow_Montage, PrimaryAttack_C_Slow_Montage, PrimaryAttack_D_Slow_Montage 에 똑같은 작업을 수행할 것임으로, PrimaryAttack_A_Slow_Montage 를 예시로 들어 설명하겠습니다.
    • PrimaryAttack_A_Slow_Montage 를 검색하여 열어줍시다.

PrimaryAttack_A_Slow_Montage

  • 먼저, 노티파이 트랙을 하나 더 추가해줄겁니다. 다음과 같이 추가해줍시다.

  • 노티파이 트랙 '2' 의 빈공간을우클릭하고, 다음과 같이 새 노티파이를 추가해줍시다.

  • 이와 같은 방법으로 노티파이를 2개 추가해줄겁니다. 이름은 각각 'AttackStart' 와 'AttackFinish' 로 해줍니다.
    • 말 그대로, 공격의 시작 지점과 끝 지점에서 Notify 를 발생시켜주는 역할을 합니다.

  • 각각의 노티파이 위치를 위와 같이 조정해줍시다.
    • 본인이 생각하기에 공격의 시작이라고 생각되는 지점에 AttackStart 를 배치하고, 끝이라고 생각되는 지점에 AttackFinish 를 배치해주면 됩니다.

PrimaryAttack_B_Slow_Montage

PrimaryAttack_C_Slow_Montage

PrimaryAttack_D_Slow_Montage

Notify Event 추가

  • Montage 에서 Notify 를 발생시켜줬으니, 이를 이벤트 그래프에서 받아주어야 합니다.
    • PlayerAnimBP 를 열고, 이벤트 그래프로 갑시다.

  • AttackStart Notify 가 발생하면 Collsion Enabled 상태가 되고, AttackFinish Notify 가 발생하면 No Collision 상태가 됩니다.
  • 이제 플레이하여 확인해봅시다!

  • 'Enemy' 가 잘 출력되네요~

Enemy

  • 이제 Enemy 의 무기에 Collision 을 추가해줄겁니다.
    • Enemy 의 무기 개수가 2개라는 것을 제외하면, 큰 흐름은 Player 와 같습니다.

Weapon Collision

  • EnemyBP 를 열어줍시다.

  • 위와 같이 Box Collision 을 2개 추가해줍시다.

    • Enemy 는 Player 와 달리, 무기가 2개이므로 Weapon_R 과 Weapon_L 을 구분하여 생성하는 것입니다.
  • Weapon_R 과 Weapon_L 은 일부 항목들을 제외하면 같으므로, Weapon_R 을 예시로 설명하겠습니다.

  • 트랜스폼의 각 요소들을 위와 같이 바꿔주고, 부모 소켓을 FX_WeaponBase_R 로 바꿔줍시다.
    • 그리고, 무기의 두께가 얇으므로 '박스 크기' 도 바꿔줍시다.

Collision 설정

  • 앞서 했던 것처럼, 콜리전을 설정해줍시다.

Overlap Event 생성

Player Tag 추가

  • PlayerBP 를 열어줍시다.

  • PlayerBP (셀프)를 선택한 뒤, 디테일 탭에서 Tag 를 검색해줍시다.

  • 인덱스[0]에 Player 를 적어줍시다.

Weapon_L

  • 이제 Weapon_R 의 Collision 설정이 끝났습니다. Weapon_L 도 해주는 것을 잊지 맙시다.

  • 위와 같이 바꿔주고, 콜리전 세팅도 Weapon_R 과 똑같이 바꿔줍시다.

  • 그리고 '컴포넌트 오버랩 시작 시' 이벤트도 만들어줍시다.

  • 이제, Collision 에 대한 설정은 끝났습니다.

Collision On/Off

  • 마찬가지로 AnimNotify 를 이용하여 Collision 을 켜고, 끌겁니다.

Montage 에서 Notify 추가

  • Player 와 다른 점은, Weapon_R 과 Weapon_L 을 구분해야 한다는 것밖에 없습니다.
    • 우리는 AttackStart_R / AttackStart_L 및 AttackFinish_R / AttackFinish_L 을 통해 구분해줄겁니다.

Primary_Attack_A_Normal_Montage

  • Attack1 BTT 에 사용하는 Montage 입니다.

Primary_Attack_Normal_Montage

  • Attack2 BTT 에 사용하는 Montage 입니다.

Primary_Attack_B_Normal_Montage

  • Attack3 BTT 에 사용하는 Montage 입니다.
    • 2개의 무기를 모두 사용하므로, 노티파이도 전부 추가해주어야 합니다.

Ability_Q_Montage

  • Dash BTT 에 사용하는 Montage 입니다.

Ability_Ultimate_Montage

  • FlyAttack BTT 에 사용하는 Montage 입니다.

Notify Event 추가

  • 2가지의 노티파이(R/L)를 생성하였기 때문에 Event 도 2가지 만들어 주어야 합니다.
    • EnemyAnimBP 를 열고, 이벤트 그래프로 갑시다.

Projectile Collision

  • Slash BTT 가 실행되면 Projectile 이 생성되며 날아옵니다. 따라서 Projectile 또한 Collision 설정을 해주어야 합니다.
    • ProjectileBP 를 열어줍시다.

Collision1

  • Blade1 의 하위 항목에 Box Collision 을 만들고 이름은 Collision1 으로 해줍시다.

  • 디테일 탭에서 다음과 같이 바꿔줍시다.

  • 콜리전 설정을 다음과 같이 바꿔줍시다.

  • 오버랩 이벤트를 생성해 줍시다.

Collision2

  • Blade2 의 하위 항목에 Box Collision 을 만들고 이름은 Collision2 로 해줍시다.

  • 디테일 탭에서 다음과 같이 바꿔줍시다.

  • 콜리전 설정을 다음과 같이 바꿔줍시다.

  • 오버랩 이벤트를 생성해 줍시다.

  • 이제 모든게 완료되었습니다! 플레이하여 확인해봅시다~

  • 'Player' 가 잘 출력되는 것을 확인하실 수 있습니다~

마치며

  • 이로써 언리얼 스터디 3주 과정의 강의가 모두 끝났습니다. 제대로 된 게임이 되려면 추가해야할 요소들이 많지만, 게임 제작에 있어서 핵심이 되는 부분들은 대부분 살펴본 것 같습니다. (아닐 수도 있지만...ㅎㅎ)

  • 나머지는 여러분들께 맡기겠습니다! 시간적 제약도 있고, 스스로 공부해보는 것도 좋으니까요~ 하지만 막막한 부분이 생긴다면 언제든 질문해주세요. 동아리 부원 분들이라면 개인적으로 연락주시고, 혹시나 외부에서 보시는 분들이 있다면 hkh7710@khu.ac.kr 로 연락주시면 최대한 답변해 드리겠습니다.

  • 그럼 모두들 화이팅~

profile
이사감 -> bit.ly/KunHo_Heo

0개의 댓글