Unreal Engine/게임클래스 - 언리얼엔진 기초

[41강] Inherit Weapon Diagram

whereareyoung 2024. 7. 26. 00:25

무기 교체시에 있던 버그 해결 

Sword 나 Wizard 이벤트 진입시 Idle 상황인지를 검사하는 코드를 추가해서 버그수정 

1. BP_Player > 이벤트그래프

CanSwordEquip 함수를 복사해 IsStateIdle 생성 (Ctrl + W)

 

2. BP_Player > 이벤트그래프 > Sword Event 다음과 같이 세팅 

 

3. BP_Player > 이벤트그래프 > Sword Event > Equip Sword

의미가 없어진 노드 제거하고, 다음과 같이 세팅 

 

4. BP_Player > 이벤트그래프 > Sword Event > Sheath Sword

마찬가지로 의미가 없어진 노드 제거하고, 다음과 같이 세팅 

 

5. 의미가 없어진 함수 "CanSwordEquip", "CanSwordSheath" 삭제

 

6. BP_Player > 이벤트그래프 > Wizard Event 다음과 같이 세팅 

 

 

칼빼는 속도, 넣는속도 빠르게 하여 플레이를 쾌적하게 하기 

* 주의! Sword_Draw_2 > 애셋 디테일 > Rate Scale 로도 조정가능하다, 하지만 전체가 속도가 변경되는 문제점이 있음 

애니메이션 원본 상태에서 PlayRate 를 이용해서 플레이 속도를 조정해서 사용할 수 있음 

하지만 원본에서 수정하게 되면 원본을 참조하는 몽타주나 상태 등에서 모두의 속도가 올라가 버림 

그래서 관리의 어려움 때문에 원본의 속도는 1로 유지한 상태에서 참조하는 곳으로 가서 속도를 조절함 

 

1. ABP_Player > 애님그래프 > Unarmed / Sword > Draw_Sword_1 > Play Rate 1.25

 

2. ABP_Player > 애님그래프 > Unarmed / Sword > Draw_Sword_2 > Play Rate 1.25 

 

3. ABP_Player > 애님그래프 > Unarmed / Sword > Sword_Sheath_1 > Play Rate 1.25 

 

4. ABP_Player > 애님그래프 > Unarmed / Sword > Sword_Sheath_2 > Play Rate 1.25 

 

5. ABP_Player > 애님그래프 > Wizard 블렌드 시간 다음과 같이 설정 

 

불 던지는 속도 빠르게 하여 플레이 쾌적하게 하기 

BP_Player > 이벤트그래프 > Attacking Event > Attack Wizard Event > In Play Rate 2.0 

 

앞으로는 긴 시간동안 Weapon 파트를 업그레이드 할 건데, 이에 관한 설명이다.

1. BP_Player, BP_Enemy 는 공통적으로 "캐릭터" 자료형의 상속을 받았다. 서로 다른 캐릭터로부터 상속을 받았지만 캐릭터에 기능을 끼워놓으면 둘 다 영향을 받게 금 되어있다. 이를 활용해서 작업을 할 수 있으나, 기본적으로 "캐릭터" 클래스는 언리얼에서 제공하는 것이므로 수정이 불가능하다.

* 언리얼 소스를 받아서 C++ 로 수정후 컴파일 하면 되긴 되는데 좋은 생각은 아닌걸로 사료된다. 

 

2. 이에 대한 해결책으로 인터페이스(Interface)를 생성해 BP_Player 와 BP_Enemy 의 연관관계를 만들어 사용할 예정이다. 둘다 웨폰을 가지고 있기 때문에 Weapon 입장에서는 Player 에서 Call 되든 Enemy 에서 Call 되든 상관없이 제 기능을 할 수 있다.

Weapon 을 수정해야하는 상황에서 Enemy Weapon을 수정하고 Player Weapon 수정하고 이중 작업을 해야하는 상황을 피할 수 있다.

 

3. 결론적으로, 무기측의 최상위 클래스는 BP_Weapon 으로 Weapon 은 BP_Combo 로부터 상속을 받고 Combo는 combo 가 있는 애들 (Sword 같은) Combo는 BP_Sword, BP_body, BP_Axe 로부터 상속받음 

* 처리 후 BP_Body 를 실제로는 BP_Fist라는 클래스로 만들어서 사용. 

 

4. Weapon 이 가져야 하는 것은 Power, Critical 을 계산하기 위해 무기 각각의 데이터 테이블(시트)를 가지고, 이 테이블을 통해서 파워를 계산해 오는 수식을 가진다. 또 필요하면 자기만의 수식을 추가해서 그 무기만의 수식으로 해서 결합해 쓸수 있도록 작업해두어야 한다. 예를들어, 공속과 콤보에 따라 파워 값이 달라질 수 있다. 이와 같이 BP_Weapon, BP_Combo 는 화면상에 보이는 애들은 아니지만 기능적인 면을 담당하게 될 것이다. 

 

5. Weapon 의 기능을 정리하고, Interface 를 통해서 Owner (Player 이든, Enemy 이든)가 이 기능을 가져다가 쓸 것이다.

 

위와같이 분리, 상속으로 기능을 추가해가는 방식을 이용하면 차후 게임 제작에 있어 훨씬 관리가 편한 구조를 만들 수 있다. 이것이 2020년대 게임의 기본 구조인데, 이걸 이해하면 시스템을 확장하는데 어려움이 없다. 예를들어 BP_Item call 해서 아이템 역할을 할 수 있도록.. 확장에 용이한 구조이기 때문에 이를 이해하면 작업에 진행하는데 있어 크게 어려움이 없다. 

 

흥미로운 강의였다! 위 이론을 바탕으로 할 다음 구현이 기대가 된다. 

'Unreal Engine > 게임클래스 - 언리얼엔진 기초' 카테고리의 다른 글

[43강] Inherit Weapon  (0) 2024.07.31
[42강] Interface  (0) 2024.07.29
[40강] Attach Particle System  (0) 2024.07.25
[39강] FireBall Overlap Event  (0) 2024.07.24
[38강] Projectile  (0) 2024.07.16