전체 글

GameProgramer 취업준비 중인 백수 onestone3647@gmail.com
블랙보드와 비헤이비어 트리 애셋을 AIController가 사용하기 위해선 Build.cs 파일에 AIModule 모듈을 추가해야합니다. // Copyright Epic Games, Inc. All Rights Reserved. using UnrealBuildTool; public class ProjectAI : ModuleRules { public ProjectAI(ReadOnlyTargetRules Target) : base(Target) { PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs; PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore",..
Unreal Engine4 C++에서 내비게이션을 사용하기 위해서는 프로젝트의 Build.cs 파일에 NavigationSystem 모듈을 추가하고 사용할 구현부에 NavigationSystem.g 헤더파일을 추가로 선언해야합니다. // Copyright Epic Games, Inc. All Rights Reserved. using UnrealBuildTool; public class ProjectAI : ModuleRules { public ProjectAI(ReadOnlyTargetRules Target) : base(Target) { PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs; PublicDependencyModuleNames.AddRange(new str..
컴포넌트를 생성할때 CreateDefaultSubobject를 사용했었습니다. 그러나 CreateDefaultSubobject는 생성자에서만 사용할 수 있습니다. 검의 양끝에 BoxComponent를 부착하고 이 두 BoxComponent 사이에 일정한 간격으로 특정 개수의 BoxComponent를 부착하는 기능을 구현하려고 할 때 평소에 사용하던 CreateDefaultSubobject는 사용할 수 없었습니다. 이를 구현하기 위해서는 게임을 시작할 때 또는 게임을 플레이 중일때 BoxComponent를 생성하여 부착해야 했습니다. 블루프린트에는 BoxCollision을 추가하는 노드가 블루프린트 전용으로 존재하였습니다. 하지만 C++로 구현할 계획이기에 해결하는데 오랜시간이 걸렸습니다. BeginPla..
이벤트 - 델리게이트(콜백) 함수. 플레이어가 죽었다고 알릴 경우 이를 인지한 주변의 적들의 행동을 멈추게 할 때 사용합니다. 이 경우 이벤트 디스패처를 호출한 쪽이 플레이어, 받는 쪽이 주변의 적들입니다. 받는 쪽이 불특정 다수이며 그냥 호출만으로 반응시키고 싶을 때는 받는 쪽에서 이를 이벤트로 구현하는 방식입니다. 적들은 계속 플레이어의 상태를 체크할 필요가 없어지며, 플레이어도 적들이 플레이어의 죽음을 체크하는지 확인할 필요가 없습니다. 인터페이스 인터페이스를 상속받은 액터는 형번환을 하지 않고 인터페이스 콜방식으로 액터에 호출만 해주면 반응합니다. 이 때 인터페이스를 상속받은 액터에서 해당 인터페이스 함수를 오버라이딩하여 구현하였다면 해당 함수를 호출했을 때 반응하고, 구현을 하지 않았다면 반응하..
언리얼 엔진에서 해더 파일(.h 파일)에 클래스 변수를 선언할 때 2가지 방법이 있습니다. UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Camera", meta = (AllowPrivateAccess = "true")) class USpringArmComponent* SpringArm; class 키워드를 사용한 선언과 UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Camera", meta = (AllowPrivateAccess = "true")) USpringArmComponent* SpringArm; class 키워드를 사용하지 않은 선언입니다. SpringArmComponent를 사용..
www.unrealengine.com/ko/blog/ranged-based-for-loops?sessionInvalidated=true 언리얼 엔진 4 의 범위 기반 For 루프 언리얼 엔진 4 코드 베이스에서 C++11 에 추가된 몇 가지 멋진 기능을 활용하기로 했습니다. 새 언어를 채택할 때는 주의를 기울여야 하는 것이, 다양한 컴파일러가 지원되는 다양한 범위의 플랫 www.unrealengine.com TArray Actors; for (int32 ActorIndex=0; ActorIndexSetActorLocation(NewLocation); } 범위 기반 For 루프 적용 전 TArray Actors; for (AActor* Actor : Actors) { Actor->SetActorLocati..
언리얼의 엑터나 컴포넌트는 Destroy를 호출하여 제거를 하게 되면 씬 상에서는 제거된 것으로 보이지만 메모리에서는 Pending Kill 상태가 되어 존재하며 다음 GC(Garbage Collection) 실행시 메모리에서 해제됩니다. 이는 에디터의 프로젝트 기본 설정상으로 1분단위로 Pending Kill 상태인 오브젝트를 제거하며 사용자가 설정을 변경할 수 있습니다. C++ 코드 상에서 유효성을 검사할 때 nullptr과 IsValid() 함수를 사용하게 되는데 Pending Kill 상태까지 검사하기 위해서는 IsValid() 함수를 사용해야 합니다.
인터페이스(Interface) 클래스는 (잠재적으로) 무관한 클래스 세트가 공통의 함수 세트를 구현할 수 있도록 하는 데 쓰입니다. 그대로라면 유사성이 없었을 크고 복잡한 클래스들에 어떤 게임 함수 기능을 공유시키고자 하는 경우 매우 좋습니다. 예를 들어 트리거 볼륨에 들어서면 함정이 발동되거나, 적에게 경보가 울리거나, 플레이어에게 점수를 주는 시스템을 가진 게임이 있다 칩시다. 함정, 적, 점수에서 ReactToTrigger (트리거에 반응) 함수를 구현하면 될 것입니다. 하지만 함정은 AActor 에서 파생될 수도, 적은 특수 APawn 또는 ACharacter 서브클래스일 수도, 점수는 UDataAsset 일 수도 있습니다. 이 모든 클래스에 공유 함수 기능이 필요하지만, UObject 말고는 공..
한돌이
Lykan Studio