Multiplay RPG 전투 개발 - Soft Lock 시스템
·
Unreal Engine 프로젝트/개인 공부 프로젝트(RPG 전투, Multiplay, AI)
개요Soft Lock 시스템은 플레이어의 추가적인 조작 없이 플레이어의 캐릭터가 마지막으로 타격한 개체를 바라보게 하는 시스템을 말한다. 요구사항은 아래와 같다.플레이어 캐릭터가 액터를 타격하면 해당 액터의 방향을 바라본다.여럿을 타격할 경우 가장 가까이 있는 마지막으로 타격한 액터를 바라보도록 한다.개발 내용SoftLock을 Targeting Component에서 처리하게 하고 싶었지만, 아무리 생각해도 공격 판정을 하는 Combat Component의 HitCheck()에서 하는 것이 좋아보였다.따라서 Combat Component의 HitCheck에서 타격에 성공했을 경우 소프트 락 옵션이 켜져 있다면 서버에서 소프트 락을 적용하는 ProcessSoftLock()을 실행하게 했다.캐릭터의 회전 값을..
Multiplay RPG 전투 개발 - Targeting Component
·
Unreal Engine 프로젝트/개인 공부 프로젝트(RPG 전투, Multiplay, AI)
개요Multiplay RPG 전투에서의 타게팅 시스템을 만들어보고자 했다. 내용은 아래와 같다.Q를 눌러 정면에 있는 액터를 타게팅한다.타게팅한 액터를 캐릭터와 카메라가 바라보도록 설정하거나 카메라만 타게팅한 액터를 바라보게 설정할 수 있다.이를 관리하는 액터 컴포넌트를 제작했으며 이를 앞으로 Targeting Component라 부른다.개발 내용Q를 눌렀을 때, 호출되는 HardLockTargeting() 함수이다.이미 타게팅을 하고 있는 경우, 타게팅을 비활성화하며 Tick() 함수 호출을 중지한다. 이때, 타게팅 중에 캐릭터가 타게팅한 액터를 바라보게 하는 옵션이 켜져있을 경우 Server RPC로 타게팅이 종료됨을 알리고 캐릭터가 컨트롤러의 Yaw 회전을 따라가지 않도록 설정한다. LookInpu..
Multiplay RPG 전투 개발 - Combat Component(대미지 리액션)
·
Unreal Engine 프로젝트/개인 공부 프로젝트(RPG 전투, Multiplay, AI)
개요대미지가 가해졌을 때 대미지 리액션을 출력하는 것을 개발했다.이때 대미지 리액션을 하기 전 캐릭터의 회전에 대해 3가지 옵션을 개발했다.맞기 전의 회전을 유지, 방향에 따른 대미지 리액션 애니메이션 출력대미지를 준 캐릭터를 바라보게 설정, 정면에서 맞는 대미지 리액션 애니메이션을 출력대미지 리액션 애니메이션의 루트 모션에 의해 맞은 방향으로 이동하도록 캐릭터의 회전을 설정 개발 내용OnRegister()에서 액터 컴포넌트를 소유한 캐릭터가 대미지를 받을 경우, HandleDamageEvent가 호출되도록 델리게이트에 함수를 바인딩했다. 대미지를 받았을 때 호출되는 HandleDamageEvent() 함수이다.먼저, 인자로 넘어온 DamageType을 캐스팅해 재생해야하는 대미지 리액션 크기를 얻어온다..
Multiplay RPG 전투 개발 - Combat Component(공격 판정)
·
Unreal Engine 프로젝트/개인 공부 프로젝트(RPG 전투, Multiplay, AI)
개요공격 판정은 AnimNotifyState를 이용해 공격 애니메이션 중 특정 프레임 동안 검에 공격 판정이 생기게 했다. 한번의 공격에서 액터에 중복해서 대미지가 전달되지 않도록 대미지를 입힌 액터들을 배열에 저장하고 이를 이용해 대미지를 이미 입힌 액터인지 확인했다. 이때, UDamageType을 전달해 현재 공격 판정에 대한 대미지 정보를 전달하는 방법으로 대미지를 받은 캐릭터의 대지미 리액션 크기를 정했다. 개발 내용 UAnimNotifyState_EnableHitCheckAnimNotifyState에서 Notify가 시작되면 스켈레탈 메쉬를 소유한 캐릭터한테서 CombatComponent를 찾아내고 CombatComponent가 있다면 공격판정을 하게끔 SetEnableHitCheck() 함수를..
Multiplay RPG 전투 개발 - Combat Component(회피 동작)
·
Unreal Engine 프로젝트/개인 공부 프로젝트(RPG 전투, Multiplay, AI)
개요지상인지 공중인지와 전투상태인지에 따라 다른 8방향으로의 회피 동작을 개발해보기로 했다. 공중에서 회피 동작을 하는 동안에는 이전 속도에 의해 위로 뜨거나 중력의 영향을 받지 않으며 공중에서의 회피 동작에는 최대 횟수가 정해져 있다. 개발 방법UMADirectionalMontageData 회피 동작이나 대미지 리액션의 경우 캐릭터가 바라보는 방향과 이벤트가 발생한 방향에 따라 다른 애니메이션이 재생되어야한다. 이를 위해 방향성이 있는 몽타주 애니메이션을 관리하는 데이터 애셋 클래스를 생성해 사용했다. UMADirectionalMontageData에는 위 사진과 같은 함수와 변수가 있다. 각각은 아래와 같다.GetMontageRootMotionDirection() : 각도를 인자로 받아 각도에 해당하는..
Multiplay RPG 전투 개발 - Combat Component(콤보 공격)
·
Unreal Engine 프로젝트/개인 공부 프로젝트(RPG 전투, Multiplay, AI)
개요지상에서의 약공격과 강공격을 개발하고 약공격 콤보 중에 강공격을, 강공격 콤보 중에 약공격을 가능하게 해 더 스타일리쉬한 전투가 가능하게끔 제작해보았다. 공중에서는 약공격만 가능하지만 마지막 콤보 공격까지 진행하면 착지 공격이 가능하게끔 제작해보았다. 개발 내용UMAComboAttackAnimationData콤보 공격을 다루기 위해, 공통적으로 사용되는 정보들이 있다. 이를 관리하기 위해 데이터 에셋 클래스를 만들었으며 위 사진은 콤보 공격 애니메이션의 정보를 저장하는 데이터 에셋이다. 각 변수의 의미는 아래와 같다.ComboAttackMontage : 콤보 공격 애니메이션 몽타주를 의미한다.MontageSectionNamePrefix : 콤보 공격 애니메이션 몽타주에서 몽타주 섹션 이름의 접두사를 ..