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..
Unreal Engine/C++
컴포넌트를 생성할때 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 말고는 공..
#include "Engine/Engine.h" 포함한 후 다음과 같이 사용합니다. GEngine->AddOnScreenDebugMessage(Key, Time, Color, 출력할 문자); void AddOnScreenDebugMessage ( uint64 Key, float TimeToDisplay, FColor DisplayColor, const FString & DebugMessage, bool bNewerOnTop, const FVector2D & TextScale ) Key: -1일 경우 밀면서 갱신, -1이 아닐 경우 고정하여 갱신 TimeToDisplay: 보여지는 시간 DisplayColor: 텍스트 색상 DebugMessage: 출력할 텍스트 bNewerOnTop: True일 경우 위에..
제가 언리얼 엔진에서 C++로 작업을 할때 중단점을 사용하는 방법으로 2가지 방법을 사용합니다. 하나는 언리얼 엔진을 사용하고 있을 때와 언리얼 엔진을 종료하였을 때입니다. 언리얼 엔진을 사용하고 있을 때 1. 중단점을 찍습니다. 2. 프로세스에 연결합니다. 비주얼 스튜디오의 상단 메뉴의 디버그 탭에서 '프로레스에 연결'을 클릭합니다. 또는 Ctrl+Alt+P 단축키를 사용할 수 있습니다. 사용가능한 프로세스에서 UE4Editor.exe를 선택하고 연결을 클릭합니다. 3. 엔진에서 플레이를 하면 해당 함수에 중단점이 작동합니다. 4. 이후 다시 디버그를 할때 비주얼 스튜디오의 상단 메뉴의 디버그 탭에서 '프로세스에 다시 연결'을 클릭하고나 Shift+Alt+P 단축키를 사용합니다. 언리얼 엔진을 종료하였..