전체 글 403

[UE4] Mesh Component, Mesh Assets 만들기 (CreateDefaultSubobject, ConstructorHelpers, FObjectFinder)

🚩 Mesh Component 블루프린트 내에 생성할 Mesh Component를 C++ 클래스로 만들어보자. 먼저 .cpp 클래스에서 생성될 Mesh Component 변수를 선언해준다. 이후 컴포넌트의 초기화 소스코드를 사용하기 편리하도록 템플릿화 하였다. 컴포넌트 생성은 CreateDefaultSubobject 함수를 이용하여 생성할 수 있고, 매개변수로 컴포넌트의 이름이 들어간다. 블루프린트에서는 Root 컴포넌트가 기본인 Default Component로 정의되어 있지만, C++ 클래스로 생성할 시 Root 컴포넌트는 NULL이므로 꼭 지정해주어야 한다. 이는 SetRootComponent 함수를 이용해 초기화해주었다. 이렇게 만들어진 컴포넌트 생성 함수를 이용하여 Mesh Component를 ..

🎮Unreal4/C++ 2023.02.27

[UE4] UPROPERTY 기능 (EditAnywhere, EditInstanceOnly, EditDefaultOnly, VisibleAnywhere, BlueprintReadWrite)

💡 UPROPERTY 기능 EditAnywhere - EditInstanceOnly 기능과 EditDefaultOnly 기능을 둘 다 사용할 수 있다. EditInstanceOnly - C++클래스에서 기본값을 저장해놓은 뒤, 블루프린트 에디터를 거치지 않고 원하는 객체의 값만 변경할 수 있다. - 즉, 중간에서 편집이 불가능하고 배치됐을 때만 디테일 패널에서 편집이 가능하다는 의미이다. EditDefaultOnly - 블루프린트 에디터나, C++클래스 자체에서만 공용으로 사용한다. - 따라서 블루프린트 에디터 내에서는 EditDefaultOnly로 설정된 멤버변수가 보이는데, 뷰포트 옆 디테일 패널에서는 보이지 않는다. - Default Only 멤버변수 값을 변경하면 같은 클래스로 선언된 모든 멤버변..

🎮Unreal4/Basic 2023.02.27

[UE4] Actor C++ 클래스 기본 생성 코드 (클래스 선언, 직렬화 매크로,

📗 직렬화 사용 A ob; 라는 변수를 선언했을 때 A 객체 자체의 주소에 접근할 수 없다보니 바이트스트림 형태로 바꾸어 접근할 수있다. 따라서 어느 CPU나 어느 RAM이든 문제없이 I/O를 통해 접근할 수 있게 하는 기능이 직렬화 혹은 역직렬화이다. 프로그램을 내부적으로 사용할 때는 에디터에 공개할 필요가 없기 때문에 직렬화를 사용하지 않는다. 그러나 언리얼 엔진에서 게임을 개발할 때 사용하는 블루프린트도 에디터 소속이기 때문에 직렬화를 해줘야 블루프린트에 접근하여 게임을 개발할 수 있다. 즉, 에디터에서 직렬화하여 공개하고, 블루프린트에도 공개하라는 옵션을 설정하면 언리얼 엔진에서 C++을 통한 개발작업이 이뤄질 수 있다. 📙 클래스 선언 일반적으로 클래스를 선언할 때 class (프로젝트명 = 모..

🎮Unreal4/Basic 2023.02.26

[UE4] 직렬화 (시리얼라이제이션, Serialization)

💡 직렬화 직렬화는 시리얼라이제이션(Serialization)을 한글화한 용어이다. 컴퓨터공학에서 직렬화는 현재 오브젝트의 상태를 보관하고, 이른 다른 컴퓨터 환경에서 불러와 동일한 상황으로 만들어주는 기법을 의미한다. 🚩 C++ 시프트 연산자 C++에서는 객체를 옮겨주는 직렬화 기능을 지원하지 않는다. 대신 시프트(Shift) 연산자 를 통해 스트림에 데이터를 전송하는 기능을 제공한다. #include using namespace std; int main () { int i; cout i; cout

🎮Unreal4/Basic 2023.02.26

[C++] #pragma pack을 이용한 구조체 크기 지정

📚 #pragma pack#pragma pack을 이용하면 구조체 크기를 할당할 때 발생되는 메모리 낭비를 줄일 수 있다. 네트워크 통신을 할 때는 패킷의 사이즈를 정확하게 지정해야 하기 때문에 네트워크 헤더 구조체같은 경우에는 필수적으로 #pragma pack을 사용한다.🚩 #pragma pack 사용 안한 경우#pragma pack을 사용하지 않은 일반적인 구조체의 크기 할당은 크기가 가장 큰 자료형을 기준으로 배수만큼 커지게 이루어진다. 예제 코드의 결과를 보면 a와 b의 자료형은 각각의 바이트가 알맞게 할당되었지만, 구조체의 크기를 찍어보면 8바이트 크기가 할당되었다. 이는 구조체의 변수 중 가장 크기가 큰 자료형인 int의 4바이트를 기준으로 할당된 것이다. 따라서 구조체에서 실제 필요한 변수의..

[Portfolio] DualSword 기본콤보공격, 공중 띄우기

https://youtu.be/VHTMdKwY4t0 진행중인 작업 - 공중콤보, 위로 띄워서 공중에서 공격 - 기본 콤보공격 디테일 작업 진행 예정 작업 - 플레이어 - 공중콤보 공격 - 다운공격, 방어, 방어해제, 반격, 맵적용, IK, Parkour 진행 완료 작업 - 에셋 찾기 - 플레이어, 무기, 공격 애니메이션 에셋 찾기 - Dual Sword 이동 및 공격 애니메이션 적용 - Dual Sword Equip/Unequip 구현 - 기본 4콤보 공격 구현

[UE4] Enemy AI -7 : 장거리(Range) AI Avoid 기능 (EQS_Avoid, Warp)

🔥 장거리(Range) AI Avoid 기능 플레이어가 장거리 AI에게 가까이 다가갔을 때 플레이어의 시야에 보이지 않게 도망가는 회피 기능을 구현해보았다. 가장먼저, EQS를 이용하여 800~1200 크기의 랜덤한 Circle을 Player 중앙에 그려주고, 해당 위치에서 Player->Querier 방향과, Player->Item 방향을 내적하여 Player와 Item 사이의 각도를 구한다. 즉, AI에서 Player 방향이면 1을 반환하는 결과가 나온다. 장거리 AI가 움직이는 비헤이비어 트리에 Avoid를 추가하였다. 500 거리 안으로 들어오면 Equip을 통해 AI의 Warp 모드를 실행시키고, EQS를 통해 플레이어의 뒷방향으로 도망갈 위치를 찾는다. 이후 Action을 통해 해당 위치로 회..

[UE4] Enemy AI -6 : EQS를 이해하기 위한 예제 (Distance, Dot, Trace/Visibility)

💡 EQS를 이해하기 위한 예제 EQS의 테스트를 작성할 땐 처음에 무조건 점수(Score)값이 Test Purpose에 하나 존재해야 한다. 점수가 안나오면 Filter Only를 맨위에 쓸 수 없다. 🚩 예제1 - Distance. Filter와 Score를 적용하고 2D 거리를 측정하여 거리 300 이하는 자르기 🚩 예제2 - Dot. Enemy AI(Querier)와 Item 간의 내적 값 중 0.3 ~ 0.75 사이의 값만 선정하기 🚩 예제3 - Trace (Visible). Line 충돌을 이용하여 전 채널의 위치를 검사하여 가려진 곳을 1로 출력 🚩 예제4. 위 3개의 예제를 모두 적용하여 AI가 볼 수 없는 벽 뒤에 위치를 반환하도록 설정 EnvQueryContext Distance나 Do..

[UE4] Enemy AI -5 : 장거리(Range) AI, EQS란?(Environment Query System)

🔥 장거리 AI : BT_Range 장거리 Enemy AI 를 구현해보았다. 근접 AI 였던 BT_Melee와 거의 비슷하지만 몇몇 다른부분만 살펴보도록 하자. 1. 장거리 공격 기능 (BT_Range) 장거리 AI는 감지범위(1000)에 들어오면 감지를 시작하고, Avoid Distance(500) 밖에 위치하면 장거리 공격으로 FireBall을 쏘도록 구현하였다. 반대로 Avoid Distance안에 위치하면 Enemy가 플레이어와 가까워지지 않도록 회피하는 기능을 구현하였다. 장거리 AI는 순찰이나 추적기능을 전부 제외하고, 위치에 서있다가 범위에 들어오면 플레이어를 공격하고, 가까워지면 회피하는 구조로 구현하였기 때문에 비헤이비어 트리도 위와 같이 작성하였다. 다음과 같이 일정범위 안에 들어가면 ..

[UE4] Enemy AI -4 : 근접(Melee) AI 완성 (Equip Task, Action Task, Hitted Task)

👊 완성된 근접(Melee) 비헤이비어 트리 : BT_Melee Enemy가 플레이어를 감지하고 추적할 때 일정거리 안에 도달하면 Enemy를 공격(Action) 상태로 만들어 공격하는 AI 기능을 구현하였다. ( 이전에 AI 와 플레이어의 거리가 150 이하이면 Action 상태로 변화하도록 구현해놓았다. ) 공격을 하기에 앞서 Enemy가 먼저 Weapon을 장착(Equip)해야 하기 때문에 장착을 먼저 구현하였다. 1. 무기 장착하기 - Equip Task : BTTask_Equip Equip Task가 실행되면 무기 장착에 관한 조건문이 차례로 실행된다. 이미 무기가 장착되어있다면 바로 성공을 반환하는 Finish 함수를 호출하고, 장착되어있지 않다면 Sword, Warp, FireBall 종류에..

[UE4] Enemy AI -3 : 경로 순찰 (Spline Component, Spline Point)

Enemy AI가 Random 위치로 이동하며 순찰하는 기능을 구현했었는데, 이번에는 정해진 경로를 순찰하도록 구현해보았다. 🛣️ 경로 액터 만들기 : BP_PatrolPath 블루프린트 Actor 클래스(BP_PatrolPath)를 하나 생성하여, 컴포넌트로 Spline을 추가해주었다. Spline은 곡선을 의미하는데, 커브를 구현할 때 곡선을 꺾어 만드는것이 베지에 곡선(Bezier Curves)이었다. 또 그렇게 만들어진 경로를 실제로 렌더링해서 만들어 보여줄땐 캣멀롬 방식(Catmull-Romm)을 사용한다. 베지에 곡선과 캣멀롬 방식은 아래 게시글에 정리해두었다. 2023.02.22 - [Unreal4] - [UE4] 베지에 곡선(Bezier Curves), 에르밋/허밋 곡선(Hermite Cu..

[UE4] 베지에 곡선(Bezier Curves), 에르밋/허밋 곡선(Hermite Curve), 캣멀롬 스플라인(Catmull-Rom Spline)

🎢 베지에 곡선(Bezier Curves) 1차 베지에 곡선 2차 베지에 곡선 3차 베지에 곡선 4차 베지에 곡선 베지에 곡선이란 선분 위를 일정 속도로 움직이는 점과 그러한 점과 점을 잇는 또 다른 선분, 그리고 그 위를 일정 속도로 이동하는 또 다른 점 등을 조합해 최종적으로 특징 점이 그리는 궤적을 이용해 곡선을 그려내는 방법을 뜻한다. 🎢 에르밋/허밋 곡선(Hermite Curve) 3차 에르밋 곡선은 3차 베지에 곡선에서 변환 가능한 곡선으로, 4개의 점을 사용하는 대신 두 개의 벡터 U, V를 사용한다. 베지에 곡선의 또 다른 표현 방법으로봐도 무방하다. 🎢 캣멀롬 스플라인(Catmull-Rom Spline) 캣멀롬 스플라인은 포인트와 포인트 사이의 통과하는 포인트를 의미하는 특성을 갖는다. ..

🎮Unreal4/Basic 2023.02.22
728x90