전체 글 403

[UE4] 정점(Vertex)으로 Mesh 그리기 (UProceduralMeshComponent, Positions/Indices/Normals/ Colors/Uvs, UpdateMeshSection)

게임 개발을 공부하면서 언리얼 엔진만을 다룬다고 하더라도 DirectX에서 구현하는 것처럼 정점(Vertex)를 이용한 Texture 그리기, Mesh 다루기 등의 개념들을 잘 알고 있어야 한다. 따라서 이번에는 정점을 다루는 Vertex 클래스를 생성한 뒤, 정점으로만 그린 Cube를 게임에 배치하는 내용을 구현해보았다. 추후에는 이러한 내용들을 이용하여 툴바에 추가해두었던 커스텀 버튼(LoadMesh)의 기능으로 어떤 Mesh를 선택할 때 Mesh의 정보를 읽어와 Color를 변경하거나 Mesh 파일을 따로 저장하는 등의 기능을 구현할것이다. 💻 Draw Vertex 클래스 먼저, 정점 데이터를 가지고 Mesh를 직접 그릴 수 있는 DrawVertex 클래스를 생성하였다. UProceduralMesh..

[UE4] ToolBar 버튼-2 : Style (Icon 추가, FSlateStyleSet, IPluginManager, FSlateImageBrush, FSlateIcon, FSlateStyleRegistry, RegisterSlateStyle)

이전 학습에서 ToolBar에 LoadMesh 라는 이름의 버튼을 하나 추가하였다. 오늘은 만든 버튼을 다른 ToolBar의 버튼들과 비슷하게 버튼 아이콘을 설정하는 Button Style Set을 구현해보았다. 🎨 버튼 Style Set 생성하기 버튼의 Style을 설정할 수 있는 ExampleStyle 클래스를 생성하였다. 이 클래스는 싱글톤 형식으로 구성하기 위해 스마트 포인터를 이용한 Instance 객체와 Get 함수를 생성해주었다. 이외에 RegisterIcon 함수는 툴바 버튼에 아이콘을 불러와 설정해주는 기능을 구현한다. FSlateStyleSet 클래스로 만드는 StyleSet 변수는 어떠한 Style들(아이콘, 폰트 등등) 의 모음을 구현할 수 있다. VisualStudio에도 글꼴, ..

[Portfolio] Evade 및 GhostTrail 구현

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

[UE4] ToolBar 버튼-1 : Command (TCommands, RegisterCommands, FExtender, AddToolBarExtension)

📱 ToolBar 언리얼 엔진의 상단부분을 보면 툴바(ToolBar)가 존재한다. 이러한 ToolBar에 Load Mesh 기능이나 Open Viewer 기능 등을 수행할 수 있는 커스텀 툴바 버튼을 제작해보았다. 💻 Button Command 클래스 먼저, 버튼을 관할하는 ButtonCommand 클래스를 작성하였다. ButtonCommand 클래스는 버튼의 모양을 정의하는 것이 아니라 버튼의 명령을 정의하는 클래스이다. #include "Framework/Commands/Commands.h" 헤더파일을 추가하여 명령들을 다룰 수 있도록 TCommands를 상속받았다. TCommands는 템플릿 클래스인데 싱글톤 객체이므로 자식의 자료형인 FButtonCommand를 템플릿으로 전달하여 사용한다. 또한..

[UE4] Command 명령어-2 : Window창 띄우기 (SWindow, SVerticalBox, SNew, MainFrameModule, FConsoleCommandWithArgsDelegate, ParseIntoArray)

이전 학습에서는 명령어의 기능으로 간단한 Log를 출력해보았으니 이번에는 명령어를 입력하면 새로운 Window 창을 띄우고 창 안에 내용들을 출력할 수 있는 기능을 구현해보았다. 🚩 Slate 위젯으로 만든 Window 창 띄우기 Console Command의 델리게이트에 등록해두었던 OpenWindow 함수를 수정하여 구현했다. 스마트 포인터 TSharedRef를 이용하여 SWindow와 SVerticalBox를 각각 생성하였다. 위젯을 만들때 사용하던 Border, Text 등등이 하나하나 위젯인데, Slate에서도 똑같이 위젯을 사용한다. 이때 사용되는 위젯들 앞에는 S를 접두사로 붙인다. 따라서 위젯명이 SWindow와 SVerticalBox이다. Slate는 언리얼 엔진4에서 제공되는 커스텀 유..

[UE4] 람다식(Lambda), capture절, 람다식 장단점

📚 람다(Lambda)람다는 알고리즘이나 비동기 함수에 전달되는 몇 줄의 코드를 캡슐화할 때 사용할 수 있다. 동기 함수는 스레드 간의 순서를 맞추면서 작동하지만, 비동기 함수는 순서를 맞추지 않기 때문에 어디서 사용될지 모르는 멀티 스레드같은 기능을 구현할 때 사용한다. 또한 람다는 함수의 선언과 수행이 끝난 뒤 그 자리에서 바로 소멸시키기 때문에 간단하게 사용할 때 유용하게 사용할 수 있다. (복잡한 함수를 구현할때는 사용하지 않는것이 좋다) 위 사진은 람다식의 구조를 파악해볼 수 있는 람다 구문의 일부이다.1️⃣ [ ] 캡처절람다식은 익명 메서드인 만큼 익명 이므로 함수 이름이 없다. 대신에 [ ] 기호가 이름을 대체하는 역할을 수행한다. 이러한 [ ] 기호 안에 들어가는 내용을 캡처절(Captur..

🎮Unreal4/Basic 2023.03.24

[Portfolio] DualSword Skill Detail 수정 및 Dash

https://youtu.be/JgAZJVjOwZE 진행중인 작업 - 스킬 수정 및 간단 스킬 추가 - Dash 카메라 이동 수정 - 지옥의 파티클 찾기 진행 예정 작업 - 플레이어 - 밑에서 위로 공격하는 공중콤보 구현 - 회피 - 맵적용, IK, Parkour 진행 완료 작업 - 플레이어, 무기, 공격 애니메이션 에셋 찾기 - Dual Sword 이동 및 공격 애니메이션 적용 - Dual Sword Equip/Unequip 구현 - 기본 4콤보 공격 구현 - 공중 3콤보 공격 구현 - Dead 애니메이션 적용 (공중에서 Dead / 땅에서 Dead) - 공중콤보 Enemy 데미지 처리 - 방어, 방어해제, 반격(Parrying) 구현 - 타겟팅을 이용한 공중 7콤보 공격 구현 - 검기 Trail, P..

[UE4] Command 명령어-1 : Log 출력 (IConsoleCommand, IConsoleManager, HAL, VA_ARGS, RHI, TSharedPtr, MakeShareable)

⌨️ Command 명령어 게임을 플레이하고 ' ~ / ` ' 키를 누르면 cmd 명령어를 입력할 수 있는 콘솔 창이 나타난다. 이러한 command 명령어를 원하는 기능으로 구현해주는 명령어 추가를 구현해보았다. ⌨️ IConsoleCommand, IConsoleManager 클래스 사용 Command 명령어를 구현하기 위해 ExampleConsoleCommand 클래스를 생성하였다. 콘솔 커맨드 명령어는 IConsoleCommand 클래스를 통해 추가할 수 있다. 💡 HAL IConsoleCommand 클래스를 사용하기 위해선 HAL/IConsoleManager 헤더파일을 추가해야 한다. 여기서 HAL은 Hardware Abstraction Layer의 약자로 하드웨어 추상화 계층을 의미한다. 위키백..

[UE4] 디버그 모드 카테고리 기능 구현 (FGameplayDebuggerCategory, CollectData, DrawData, BlendMode:ESimpleElementBlendMode, AlphaBlend)

이전 학습을 통해 Example 이라는 이름으로 디버그 모드의 카테고리를 생성하였다. 오늘은 해당 카테고리의 수행 기능을 구현해 보았다. 💡 Actor 정보 출력 기능 Example 카테고리를 선택하면 플레이어의 정보부터 선택하는 Actor 정보, Forward의 LineTrace 충돌 정보 등을 실시간으로 출력하도록 기능을 구현해보았다. FGameplayDebuggerCategory 클래스를 살펴보면 virtual 키워드로 작성되어 재정의 할 수 있는 함수가 있다. OnDataPackageReplicated 라는 리플리케이트 함수도 있고, CollectData라는 함수도 있다. CollectData는 리플리케이트를 위해 데이터를 모으는 함수이다. 실제로 디버깅할 수 있는 데이터를 만들어주는 것이다. 리..

[UE4] 모듈(Module), 디버그 모드 카테고리 추가하기, 스마트 포인터(Shared Point, Shared Referrence, Unique Point, Weak Pointer)

💡 모듈(Module) C에서는 독자적인 기능을 모아둔 것을 라이브러리라고 표현하지만, 언리얼에서는 라이브러리가 아닌 모듈(Module)이라고 표현한다. 가장 먼저, FExampleModule이라는 플러그인을 하나 만들어보았다. 기본 플러그인으로 플러그인을 생성하면 위와 같은 헤더파일이 생성된다. 모듈이 실행될 때 StartupModule() 함수가 실행되고, 모듈이 종료될 때 자동으로 ShutdownModule() 함수가 실행된다. 따라서 StartupModule() 함수가 Entry Point(진입점)이고 ShutdownModule() 진출점?이다. 진입점을 가지고 있는 클래스는 무조건 IModuleInterface 를 상속받고 있어야하는데 이러한 클래스를 언리얼은 IMPLEMENT_MODULE(FE..

[UE4] 플러그인(PlugIn), 라이브러리(Lib/Dll), 나나이트

🔌 플러그인 프로그램을 개발할 때 각자마다 쓰는 툴은 전부 다르다. 굳이 본인에게 쓸모없는 툴을 넣어서 프로그램을 제작할 필요는 없기 때문에 필요한 툴만 모아서 한번에 만든 것이 게임 파일이다. 또한 사용자에게는 프레임워크와 게임실행파일정도가 노출될 뿐이지 사용자에게 렌더링 툴이나 모델 툴을 공개해선 안된다. 이렇게 사용하는 툴만 따로 빼서 만들어놓은 것을 플러그인이라고 한다. ✔️ 라이브러리 Lib : 정적 라이브러리로, 프로그램이 실행될 때 프로그램 메모리 영역을 공유하여 사용한다. 즉, 한번 라이브러리를 불러오면 프로그램이 종료될때까지 제거되지 않는다. Dll : 동적 라이브러리로, 프로그램과 별도로 작동하여 원하는 때에 불러올 수 있고 원하는 때에 제거할 수 있다. 🖼️ 나나이트 나나이트는 굉장히..

🎮Unreal4/Basic 2023.03.22

[Portfolio] DualSword DownAttack 마무리, Dash 구현중

https://youtu.be/HTfjTYIpuEU 진행중인 작업 - Dash 구현중 (Dash 파티클 변경) - 지옥의 파티클 찾기 진행 예정 작업 - 플레이어 - 밑에서 위로 공격하는 공중콤보 구현 - 맵적용, IK, Parkour 진행 완료 작업 - 플레이어, 무기, 공격 애니메이션 에셋 찾기 - Dual Sword 이동 및 공격 애니메이션 적용 - Dual Sword Equip/Unequip 구현 - 기본 4콤보 공격 구현 - 공중 3콤보 공격 구현 - Dead 애니메이션 적용 (공중에서 Dead / 땅에서 Dead) - 공중콤보 Enemy 데미지 처리 - 방어, 방어해제, 반격(Parrying) 구현 - 타겟팅을 이용한 공중 7콤보 공격 구현 - 검기 Trail, Particle 적용 - Dua..

728x90