목록Game Dev (261)
KoreanFoodie's Study
GoF 의 디자인 패턴과 강의를 참고하여 디자인 패턴에 대한 내용을 정리하고 있습니다. Single Responsibility Principle (단일 책임 원칙) Single Responsibility Principle, 줄여서 SRP 는 단일 책임 원칙으로, 모든 클래스가 하나의 책임을 가지며, 클래스가 그 책임을 완전히 캡슐화해야 함을 의미한다. 아래 코드를 보자. #include #include #include #include #include using namespace std; struct Journal { string title; vector entries; explicit Journal(const string& title) : title{title} { } void add(const stri..
AddMovementInput 함수로 간단하게 처리하기 ////////////////////////////////////// ////////////////////////////////////// BlasterCharacter.h ////////////////////////////////////// ////////////////////////////////////// #pragma once #include "CoreMinimal.h" #include "GameFramework/Character.h" #include "BlasterCharacter.generated.h" UCLASS() class BLASTER_API ABlasterCharacter : public ACharacter { GENERATED_..
IK_Rig 를 이용하기 애니메이션을 사용할 때, 스켈레톤이 다른 경우 리타깃을 해 주어야 한다. 언리얼 5에서는 IK_Rig 을 이용해 포즈들을 효율적으로 수정하도록 만들었다. 위의 원본 IK_Rig을 잘 보면 IK_Retargeting 에 Chain 이 설정되어 있다. 왼편의 Bone Hierarchy 를 잘 보면서, 우리가 리타깃하고자하는 IK_Rig 에 맞게 체인을 설정해주면 된다. 우리가 원하는 스켈레탈 메시 (여기서는 SK_Epic Character) 에 기반한 IK_Rig 을 생성한다. 이름은IK_Blaster 로 한다. 그 후, 기존의 IK_Mannequin 과 같은 이름의 Chain 들을 만들어 주면 된다. 방법은 아래와 같다. 그 후, IK Retargeter 를 생성해준다. Sourc..
블루프린트 노드를 이용하기 ThirdPerson Template 을 활용해 간단하게 멀티플레이어 세팅을 해 보자. StarterPack 에 있는 BP_ThirdPersonCharacter 에서 다음과 같이 블루프린트 노드를 설정해주면 된다. 참고로 Lobby 는 Default 설정의 Map 을 만든 것이고, Open 13.32.244.36 은 Local IPv4 Address 이다. 그 후, 다음과 같이 패키징 프로젝트를 만들어 준다. (아래 Binary Configuration 은 Development 로 바꾸어 준다) 이제 완료된 exe 파일을 이 컴퓨터에서 열고, 1을 눌러 로비를 시작한다. 다른 컴퓨터에서 2을 눌러 로비에 접속하면, 멀티플레이를 즐길 수 있다. 새 프로젝트를 만들 때, Thrid..
멀티플레이어 서버의 유형 peer - to peer 각각의 플레이어가 세션을 가지고, 움직임이나 게임 데이터의 변경이 있을 경우 연결된 다른 세션의 사용자에게 이를 전파한다. A 에서 플레이어가 캐릭터를 움직였다고 했을 때, 움직인 좌표를 다른 컴퓨터에게 전달하기 전까지 다른 컴퓨터에서는 A의 데이터 변경이 조회되지 않는다. Client - Server Model Client - Server Model 에서는, 각 클라이언트들이 어떤 동작을 하게 되면, 데이터의 변경을 Server 로 request 한다. Server 에서는 정합성이 있는 상태를 갖고 있으며, 이를 다른 클라이언트들에게 전파하는식으로 위치나 상태 등을 업데이트 한다. Client - Server Model 은 크게 Listen-Serve..
UPoseableMeshComponent 언리얼에서 GhostTrail 등을 구현할 때, UPoseableMeshComponent 를 사용하는 것을 볼 수 있다. UPosebleMeshComponent 는 무엇일까? 먼저 정의로 넘어가보면, /** *UPoseableMeshComponent that allows bone transforms to be driven by blueprint. */ UCLASS(ClassGroup=Rendering, hidecategories=(Object,Physics), config=Engine, editinlinenew, meta=(BlueprintSpawnableComponent)) class ENGINE_API UPoseableMeshComponent : public ..
AttachedActors vs ChildActors 만약 다음과 같이 부모 액터에 부착된 액터들을 삭제하려고 하면 어떻게 해야 할까? 만약 현재 액터에 자식으로 설정된 ActorComponent 들의 경우, 다음과 같은 코드로 조회할 수 있다. TArray tempChildActors; AActor* owner = GetOwner(); // SomeChildActor->SetOwner(this); 가 어디선가 실행되었다고 가정 owner->GetAllChildActors( tempChildActors, true ); uint32 count = tempChildActors.Num(); 하지만 위와 같은 경우나, 무기를 캐릭터의 소켓에 부착 (AttachToComponent) 하는 경우..
오브젝트 생성 및 애셋 불러오기 언리얼에서 오브젝트를 생성하고 애셋을 불러올 때는 보통 CreateDefaultSubobject 로 CDO 를 만들어 준 다음, ConstructorHelpers::FObjectFinder 로 애셋을 연결시켜 준다. 이 과정을 단축시켜주는 Helper Function 을 만들어 사용해 보자. CHelpers.h #pragma once #include "CoreMinimal.h" #include "Components/SkeletalMeshComponent.h" #include "Kismet/GameplayStatics.h" #include "Particles/ParticleSystem.h" #include "NiagaraSystem.h" #include "NiagaraFun..
화면에 출력하는 로깅시스템 콘솔에 출력했던 것과 비슷하게, 이번에는 UE_LOG 가 아닌 AddOnScreenDebugMessage 함수를 활용해 화면에 값을 출력해보자. 출처는 여기! CLog.h class UE_PROJECT_NAME_API CLog { public: static void Print(int32 InValue, int32 InKey = -1, float InDuration = 10, FColor InColor = FColor::Blue); static void Print(float InValue, int32 InKey = -1, float InDuration = 10, FColor InColor = FColor::Blue); static void Print(const FString& I..
언리얼 로그 언리얼은 UE_LOG 함수를 이용하여 로그를 출력한다. 먼저, .h 파일에 카테고리를 선언하고, 그에 맞는 정의를 .cpp 파일에서 Define 해주면 된다. MyGame.h //General Log DECLARE_LOG_CATEGORY_EXTERN(LogMyGame, Log, All); //Logging during game startup DECLARE_LOG_CATEGORY_EXTERN(LogMyGameInit, Log, All); MyGame.cpp #include "MyGame.h" //General Log DEFINE_LOG_CATEGORY(LogMyGame); //Logging during game startup DEFINE_LOG_CATEGORY(LogMyGameInit); 헤더..