작업 영상
기술/기간
사용 기술 : Unreal Engine4 C++
제작 기간 : 3개월
작업 내용
1.Player
1-1 Move
Blendspace를 사용하여 Idle -> Walk -> Run을 자연스럽게 애니메이션 변화가 가능합니다. Unreal Engine 4.25 버전 부터 나이아가라가 추가되어서 나이아가라와 파티클을 사용하여 이펙트를 구현했습니다.
1-2 Dash
SetActorTransform을 사용하였습니다. 또한 Dash 중 SetCollisionResponseToChannel함수를 사용하여 적과 충돌하지 않게 하였습니다. 언덕의 경우 뚫고 가거나 끼는 등의 문제가 생겨 LineTrace를 사용하여 언덕이더라도 Dash의 거리를 보장했습니다.
1-3 Zoom In/Out
Zoom In/Out은 마우스 휠 입력을 받아 SpringArm의 TargetArmLenght를 조절하여 구현했습니다.
검과 마법 두 가지 무기를 갖고 전투를 합니다.
검 상태일 땐 타격감을 위해 Enemy에게 피해를 줬을 때 CameraShake와 GetGlobalTImeDilation 함수를 사용하였습니다.
마법 상태일 땐 원거리 공격을 하고 공격이 적과 충돌하면 다른 Particle을 실행하고 SphereOverlapActors를 사용하여 구현했습니다.
1-4 Weapon
검, 마법 각각 3가지 스킬을 사용할 수 있으며 스킬은 SkillManagerComponent라는 클래스를 만들어서 사용합니다.
SkillManagerComponent은 구현한 스킬들을 갖고 있으며, bool 값을 줘 블루프린트에서 이 스킬을 체크하면 사용이 가능합니다.
1-4.1 Sword Weapon
검의 스킬은 회오리 공격, Dash 공격, 폭발 공격 3가지를 구현했습니다.
1-4.1.1 회오리 공격
ProjectileMovement를 사용하여 구현했습니다. 또한 시간마다 회전값을 줘서 곡선으로 이동하도록 구현했습니다.
1-4.1.2 Dash 공격
일반 Dash의 연장선입니다. 대각선으로 좌우 2번씩 총 4번 이동합니다.
1-4.1.3 폭발 공격
SetViewTargetWithBlend 함수를 사용하여 카메라 시점 이동을 구현하였고, 폭발시 충돌체를 활성화합니다. 폭발 시점은 NotifyState를 사용하여 애니메이션에서 설정합니다.
1-4.2 Magic Weapon
마법의 스킬은 Telekinesis, Teleport, Recall 3가지를 구현했습니다.
1-4.2.1 Telekinesis
Interface를 사용하여 Player와 Object와의 상호작용 하도록 하였고, 타겟팅 중인 Object의 Depthstencil 값에 변화를 줘서 현재 타겟팅 중인 Object를 인지할 수 있도록 구현했습니다.
1-4.2.2 Teleport
LineTraceSingle를 사용하여 카메라와 지면의 충돌 위치를 찾고 출돌 위치에 파티클을 렌더링합니다. 다시 사용시 TeleportTo 함수를 사용하여 이동합니다.
1-4.2.3 Recall
과거 지점으로 Transform을 바꾸는 스킬입니다. 시간을 되돌린다는 상상으로 구현했습니다. 일정 프레임마다 Player의 Transform을 저장하고 스킬 사용시 저장한 Transform으로 Player를 이동합니다.
1-5 Targeting System
Interface를 사용하여 Player와 Enemy의 상호작용 하도록 하였고, 타겟팅 중인 Enemy의 Location과 Player의 Camera의 Location을 사용하여 회전값을 구한 후, Controller를 회전시켜 구현했습니다.
2. Enemy
팩토리 패턴(Factory Pattern)을 사용하여 Boss와 Paladin 두가지로 구현했으며, Paladin은 Boss의 소환물입니다.
Enemy는 BTService를 사용하여 행동하며, Idle, Attack, Move, Skill, Hitted, Chase, InAir, Death 상태에 따라 행동합니다.
Attack과 Skill은 난수를 사용하여 결정합니다.
BTService에서 받은 상태를 토대로 BehaviorTree에서 TaskNode를 실행합니다.
TaskNode 역시 C++로 구현했습니다.
후기
컴퓨터 사양이 너무 안좋아서 컴파일 한 번에 30분씩 걸린점이 너무 힘들었다. 심지어 인텔리센스도 느려서 일일히 타이핑하고 컴파일 했더니 오타 및 에러 때문에 날려먹은적이 한 두번이 아니다. 현재 SSD를 추가함으로써 해결했으니 다음엔 좀 더 쾌적한 환경에서 작업이 가능할 것이다.
계획보다 많이 축소된 것이 아쉽다. 원래 무기는 4개, 2스테이지 + 보스까지 총 3스테이지로 구성하려고 했으나, 시간에 쫓겨 프로토타입으로 제작한것이 너무 아쉽다.
기껏 구현 다 했는데 이펙트가 안이뻐서 버린것이 너무 많았다. 예를 들어 오라블레이드 같이 발사체를 구현했는데 파티클이 너무 안이뻐서 못써먹겠다 싶어 버린것이 많다.
'개발 > 포트폴리오' 카테고리의 다른 글
DirectX11 Portfolio (6) | 2022.05.30 |
---|
댓글