전체 글 403

[UE4] 공격 기능 - DoAction (UFXSystemAsset, Abstract, Blueprintable/NotBlueprintable)

이전 학습에 무기의 장착/해제 기능을 구현하였고, 이번에는 공격 기능을 구현해보았다. 💻 WeaponStructures - FDoActionData (Sturct) 먼저, DoAction에 필요한 데이터의 속성을 WeaponStructure 컴포넌트에 추가주었다. FDoActionData 는 몽타주와 실행속도, 공격하면서 움직일 수 있는지, 카메라를 고정시킬것인지, 공격 시 나타날 이펙트가 있는지, 이펙트의 위치/크기 정보 등을 가지고 있다. UFXSystemAsset 클래스는 자식으로 UNiagaraSystem과 UParticleSystem을 가지고 있어, 두 클래스의 구분없이 이펙트를 저장할 수 있다. DoAction 함수에는 Owner 캐릭터의 State 컴포넌트와 Movement 컴포넌트를 가져와..

🎮Unreal4/C++ 2023.04.13

[UE4] Equip/Unequip (WeaponAsset, WeaponComponent, Equipment, Attachment, AnimNotifyState_Equip)

Equip 기능을 구현하기 위해서 먼저, Equip과 관련된 객체 및 데이터를 WeaponAsset 클래스(Data Asset)에 초기화시켰다. 💻 WeaponAsset : DataAsset 이전에는 AttachmentClass와, EquipmentClass까지만 선언하여, DataAsset의 구조만 잡아놨었다. 이번에는 Attachment 객체와 Equipment 객체를 직렬화하여 선언하고, 객체를 반환해주는 Get함수까지 제작하였다. 이때 Attachment와 Equipment에는 UPROPERTY로 각각 직렬화를 수행하였는데, 이는 두 객체가 NULL이 되는 상황이 와도 가비지컬렉터에 의해 제거되지않도록 하기 위함이다. 생성자에서는 AttachmentClass와 EquipmentClass의 기본 선..

🎮Unreal4/C++ 2023.04.12

[UE4] 무기 장착 후 공격 시스템 구조 (Attachment-Equipment-DoAction, CWeaponStructures), 데이터 애셋 (Data Asset), NotBlueprintable

🏹 무기 장착 후 공격 시스템 구조 무기 모양과, 장착 방법, 액션 세가지로 분류하여 전투를 구현할 수 있다. 나는 Attachment 라는 객체를 무기 모양으로 설정하였다. Attachment에는 칼이 들어갈수도, 해머가 들어갈수도, 활이 될수도 있다. 장착 방법은 Equipment 라는 객체로 만들어서 기본적으론 몽타주를 실행시켰다. Equipment는 몽타주를 실행시킬 때 나타나는 Begin 이나 End 노티파이에 따른 어떠한 액션도 결정하도록 구상하였다. 액션은 어떠한 액션을 취할것인지를 나타낸다. 액션은 뭔가를 소유하며 작동하는데, 액션에 의해 Hit 되는 HitData 같은것이 있을 수 있다. (있을수도 없을수도 있다) 이 세가지는 각각을 독립적으로 구현하여, 서로간의 조합을 통해 다양한 기능..

🎮Unreal4/C++ 2023.04.11

[UE4] BackStep, InputComponent, UInterface, Notify_EndState, 인터페이스 생성 및 적용,

👣 BackStep 플레이어의 상태가 BackStep 상태가 되면 뒷걸음질치는 BackStep 기능을 구현해보았다. 스페이스바를 누르면 OnAvoid 함수가 실행되도록 함수를 등록하였다. OnAvoid 함수에서는 플레이어의 상태가 Idle 상태인지, CanMove 상태인지를 검사한 뒤, InputComponent를 통해 MoveForward의 AxisValue가 0보다 큰지를 검사한다. 뒷걸음질 치는것은 MoveForward의 AxisValue가 음수(-1)로 나오기 때문에 양수인 경우에는 함수를 중단시킨다. 💡 InputComponent의 사용 SetupPlayerInputComponent 함수가 아닌데도 InputComponent 객체를 사용할 수 있는 이유는, SetupPlayerInputCompo..

🎮Unreal4/C++ 2023.04.11

[C++] 인터페이스(Interface), 추상클래스(Abstract), 추상함수/가상함수(Virtual)

💡 인터페이스 (Interface) 인터페이스 클래스는 무관한 클래스 간의 공통되는 함수를 구현할 수 있도록 하는데 쓰인다. 예를 들어, AActor 클래스에 구현한 함정기능과, APawn/ACharacter 클래스에 구현한 Enemy 객체, 점수를 매길 수 있는 UDataAsset같은 클래스들이 존재할 때, 이 클래스들에 특정 기능을 공유하고자 할 때 공통 조상이 UObject 밖에 존재하지 않는다. 이럴때 인터페이스를 사용하면 된다. 인터페이스의 선언은 세가지만 기억하면 된다. 1️⃣ UCLASS 매크로가 아닌 UINTERFACE 매크로를 사용한다. 2️⃣ UObject를 직접 상속하는것이 아닌 UInterface를 상속한다. 3️⃣ UINTERFACE 클래스는 실제 인터페이스가 아니기 때문에 같은 ..

🎮Unreal4/Basic 2023.04.11

[Portfolio] Bow Skill 마무리 (SkyShoot, PowerShoot, ComboShoot)

https://youtu.be/dz00V3zCQtI 진행중인 작업 - Dissolve Material 구현중 - 몬스터 찾기 진행 예정 작업 - 맵적용, IK, Parkour - 몬스터 AI 진행 완료 작업 - 플레이어, 무기, 공격 애니메이션 에셋 찾기 - Dual Sword 이동 및 공격 애니메이션 적용 - Dual Sword Equip/Unequip 구현 - 기본 4콤보 공격 구현 - 공중 3콤보 공격 구현 - Dead 애니메이션 적용 (공중에서 Dead / 땅에서 Dead) - 공중콤보 Enemy 데미지 처리 - 방어, 방어해제, 반격(Parrying) 구현 - 타겟팅을 이용한 공중 7콤보 공격 구현 - 검기 Trail, Particle 적용 - DualSword Slash Skill 구현 - E..

[Portfolio] 무기 Bow 추가, Sky Skill 구현

https://youtu.be/Vl0KgLL0UkU 진행중인 작업 - Bow 스킬 구현중 - 스킬 콜리전 버그 수정 진행 예정 작업 - 플레이어 - 밑에서 위로 공격하는 공중콤보 구현 - 맵적용, IK, Parkour - 몬스터 AI 진행 완료 작업 - 플레이어, 무기, 공격 애니메이션 에셋 찾기 - Dual Sword 이동 및 공격 애니메이션 적용 - Dual Sword Equip/Unequip 구현 - 기본 4콤보 공격 구현 - 공중 3콤보 공격 구현 - Dead 애니메이션 적용 (공중에서 Dead / 땅에서 Dead) - 공중콤보 Enemy 데미지 처리 - 방어, 방어해제, 반격(Parrying) 구현 - 타겟팅을 이용한 공중 7콤보 공격 구현 - 검기 Trail, Particle 적용 - Dual..

[DX] ExportMesh, BinaryFile/BinaryWriter (WriteMeshData), ReadBoneData, ReadMeshData

3D 모델로 제작된 탱크를 fbx 파일로 정점들을 읽은 후, .mesh 형식의 파일로 저장해보았다. 🚩 ExportFile 이전 게시글에 Assimp를 이용한 ReadFile 함수를 작성하였다. 2023.03.13 - [DirectX] - [DX] 3D 모델, Assimp 작성된 ReadFile 함수를 이용하여 aiScene 객체에 읽어들인 파일 정보를 저장해두었고, Export Mesh 함수를 작성하여 .mesh 형식으로 파일을 저장하는 기능을 구현해보았다. 3D 파일을 Export 하기위해선 모델의 Bone Data를 모두 읽어들인 후, 읽은 Data를 토대로 Mesh파일을 저장해야 한다. 📃 Converter.cpp - ReadBoneData void Converter::ReadBoneData(ai..

🎨DirectX 2023.04.11

[자료구조] 힙(Heap), 우선순위 큐 (Priority Queue)

우선순위 큐는 우선순위가 가장 높은 데이터를 가장 먼저 삭제하는 자료구조이다. 단순 리스트를 이용하여 구현할 수 있고, 또는 힙(heap)을 이용하여 구현할 수 있다. 힙(Heap)은 완전 이진 트리 자료구조의 일종으로, 항상 루트노드를 제거한다. 완전 이진 트리: 루트 노드부터 시작하여 왼쪽 자식 노드, 오른쪽 자식 노드 순서대로 데이터가 삽입되는 트리 힙은 최소힙과 최대힙으로 나뉜다. 최소힙 : 루트 노드가 가장 작은 값을 가지므로, 값이 작은 데이터가 우선적으로 제거된다. 최대힙 : 루트 노드가 가장 큰 값을 가지므로, 값이 큰 데이터가 우선적으로 제거된다. 아래는 Cpp 클래스로 직접 우선순위 큐를 사용해 본 예제이다. #include #include #include #include using n..

[UE4] Player 상태 별로 몽타주, Enum 자료형→String 문자열 (State Component, Montages Component, DataTable, FTableRowBase, GetAllRows StaticEnum, GetValueAsString)

🗡️ 전투시스템 만들기 플러그인에 대한 공부를 마치고, 이제 C++ 프로젝트를 통한 전투 시스템을 구현해보려 한다. Player 자체는 이전에도 만들어보았기 때문에 간단했지만, 그때는 Collision과 LineTrace, 델리게이트같은 개념을 이해하기 위한 학습이었기에 Player에 다른 몽타주나 기능은 만들지 않았다. 2023.02.28 - [Unreal4/C++] - [UE4] ACharacter - Player 만들기 (Character Mesh, AnimInstance, Animation Blueprint, GameModeBase) 2023.02.28 - [Unreal4/C++] - [UE4] Player 이동, 회전 (MoveForward, MoveRight, OnHorizontalLook, ..

🎮Unreal4/C++ 2023.04.10

[UE4] Player 이동 시 애니메이션 튀는 문제 해결 (BP/C++)

💡 Player 이동 시 애니메이션 튀는 문제 해결 🚩 BluePrint 버전 이전에 만들어두었던 플레이어의 이동에서 살짝씩 애니메이션이 튀는 문제가 발생하였다. 그 원인은 Calculate Direction 함수에 들어가는 캐릭터의 Velocity값과, Get Control Rotation인 카메라의 방향값에 대한 혼동 때문이다. 액터가 바라보는 방향과 카메라가 바라보는 방향이 다르기때문에 둘 중 한 값으로 설정되며 값이 왔다갔다 하기 때문이다. 이 문제를 해결하기 위해 이전에 사용했던 Calculate Direction 함수를 빼고, 캐릭터의 Velocity 방향과, 카메라의 방향을 Delta(Rotator) 함수에 입력하였다. Delta 함수는 두 방향 벡터간의 차를 구하여 Normalize 해준다..

🎮Unreal4 2023.04.10
728x90