유니티 / UE4 비교 참고
참고 사이트에는 블루프린트 이용법도 있으니 필요하면 찾아가보자
액터 서브클래스 유형
Pawn 폰 - 제어가능한 게임 오브젝트, 전형적으로 플레이어의 아바타를 나타내는 액터 유형입니다. 폰은 Controller 컨트롤러 소유를 통해 플레이어나 AI 등에 의해 움직입니다.
Character 캐릭터 - 이족보행 아바타용으로 디자인된 보다 전문화된 버전의 폰으로, 그러한 게임 오브젝트 유형의 복잡도를 다수 처리합니다.
Controller 컨트롤러 - 폰을 Possess 빙의하여 제어합니다. 폰과 컨트롤러를 분리함으로써, 플레이어를 가정하고 그와 똑같은 인터페이스를 사용하여 폰을 임의로 조작하는 AI 컨트롤러 작성이 가능합니다.
Player Controller 플레이어 컨트롤러 - 플레이어의 게임패드, 터치, 마우스/키보드에서 입력을 받고, 그 입력을 사용하여 빙의중인 폰 또는 캐릭터를 구동시키기 위한 좀 더 전문화된 컨트롤러입니다.
-------------------------------------------------------------------------------------------------
Visual Studio 프로젝트 파일 을 수동으로 새로고침
UE4 새 버전을 다운로드한 후, 또는 디스크의 소스 파일을 수동으로 변경한 후). 메인 메뉴의 "Refresh Visual Studio Project" 또는 프로젝트 디렉터리에 있는 .uproject 파일에 우클릭 한 다음 "Generate Visual Studio project files" 를 선택
-------------------------------------------------------------------------------------------------
UObject 파생 유형을 만든다면
UMyObject* NewObj = NewObject<UMyObject>();
-------------------------------------------------------------------------------------------------
한 유형에서 다른 유형으로 형변환(Cast)
UPrimitiveComponent* Primitive = MyActor->GetComponentByClass(UPrimitiveComponent::StaticClass());
USphereComponent* SphereCollider = Cast<USphereComponent>(Primitive);
게임오브젝트 / 액터 소멸(Destroy)
MyActor->Destroy();
게임오브젝트 / 액터 소멸 (1초 딜레이)
MyActor->SetLifeSpan(1);
게임오브젝트 / 액터 비활성화
MyActor->SetActorHiddenInGame(true); // Hides visible components
MyActor->SetActorEnableCollision(false); // Disables collision components
MyActor->SetActorTickEnabled(false); // Stops the Actor from ticking
컴포넌트에서 게임오브젝트 / 액터 접근
AActor* ParentActor = MyComponent->GetOwner();
게임오브젝트 / 액터에서 컴포넌트 접근
UMyComponent* MyComp = MyActor->FindComponentByClass<UMyComponent>();
게임오브젝트 / 액터 찾기
// 이름 찾기 (UObject 에도 작동)
AActor* MyActor = FindObject<AActor>(nullptr, TEXT("MyNamedActor"));
// 유형으로 액터 찾기 (UWorld 오브젝트 필요)
for (TActorIterator<AMyActor> It(GetWorld()); It; ++It)
{
AMyActor* MyActor = *It;
// ...
}
// 유형으로 UObject 찾기
for (TObjectIterator<UMyObject> It; It; ++it)
{
UMyObject* MyObject = *It;
// ...
}
// 태그로 액터 찾기 (ActorComponent 에도 작동, 대신 TObjectIterator 사용)
for (TActorIterator<AActor> It(GetWorld()); It; ++It)
{
AActor* Actor = *It;
if (Actor->ActorHasTag(FName(TEXT("Mytag"))))
{
// ...
}
}
게임오브젝트 / 액터에 태그 추가
MyActor.Tags.AddUnique(TEXT("MyTag"));// 액터는 태그를 여럿 가질 수 있습니다
모노비헤이비어 / 액터컴포넌트 에 태그 추가
// 컴포넌트에는 자체 태그 배열이 있습니다. 유니티는 컴퍼넌트가 달린 오브젝트에 반영
MyComponent.ComponentTags.AddUnique(TEXT("MyTag"));
게임오브젝트 / 액터 및 모노비헤이비어 / 액터컴포넌트의 태그 비교
// 붙어있는 게임오브젝트의 태그 검사
if (MyComponent.CompareTag("MyTag"))
{
// ...
}
// 액터에 이 태그가 있는지 검사
if (MyActor->ActorHasTag(FName(TEXT("MyTag"))))
{
// ...
}
// 액터 컴포넌트에 이 태그가 있는지 검사
if (MyComponent->ComponentHasTag(FName(TEXT("MyTag"))))
{
// ...
}
-------------------------------------------------------------------------------------------------
블루프린트 단축키
VectorPrameters -> v + 마우스 좌크릭
-------------------------------------------------------------------------------------------------
Console Command
` 키를 누르면 활성화 됨: show me the money 를 생각하면 됨
FreezeRendering : 랜더링의 기준을 현 상태에서 정지.
Occulusion 이나 Frustum culling 이 제대로 적용 되는지 확인
r.* : rendering 관련된 명령어
stat GPU : 그래픽에서 이루어지는 작업 목록
ctrl + shift + ,(쉼표) : GPU 프로파일링
단일 프래임에서 수행한 모든 작업을 알려줌
stat FPS : FPS 를 출력한다.
stat UnitGraph : 1 프레임을 그리는데 드는 비용을 그래프와 시간으로 나타냄

Frame: 프래임 당 시간
Game: 프래임당 게임 로직에서 차지하는 시간
Draw: 그리는데 드는 시간(CPU 에서 차지하는 렌더링 부분)
GPU: 그래픽 카드에서 드는시간
에디터는 자체의 오버헤드를 가지기에 프로파일링을 에디터에서 하는건 정확하지 않음
다시 없에는 방법
stat UnitGraph 를 반복하면 글자는 남는다
stat Unit 을 하면 모두 사라짐
-------------------------------------------------------------------------------------------------
Blueprint 단축키
Material 에서
1 + 마우스 좌클릭 -> Constant 노드
2 + 마우스 좌클릭 -> Constant2Vector
3 + 마우스 좌클릭 -> Constant3Vector
4 + 마우스 좌클릭 -> Constant4Vector
e + 마우스 좌클릭 -> 제곱 노드
r + 마우스 좌클릭 -> reflection vector 노드
t + 마우스 좌클릭 -> Texture Sample 노드
u + 마우스 좌클릭 -> texture coordinate 노드
i + 마우스 좌클릭 -> if 노드
o + 마우스 좌클릭 -> OneMinus(1-x) 노드
p + 마우스 좌클릭 -> panner 노드
a + 마우스 좌클릭 -> add 노드
s + 마우스 좌클릭 -> ScalarParameter 노드
d + 마우스 좌클릭 -> Divide 노드
f + 마우스 좌클릭 -> MaterialFunctionCall (Unspecified Function) 노드
l + 마우스 좌클릭 -> Lerp 노드
c -> comment
v + 마우스 좌클릭 -> VectorParameter 노드
b + 마우스 좌클릭 -> BumpOffset 노드
n + 마우스 좌클릭 -> normalize 노드
m + 마우스 좌클릭 -> Multiply 노드
Custom Blueprint 에서
s + 마우스 좌클릭 -> Sequence 노드
d + 마우스 좌클릭 -> Delay 노드
f + 마우스 좌클릭 -> For Each Loop 노드
g + 마우스 좌클릭 -> Gate 노드
c -> comment
b + 마우스 좌클릭 -> Branch 노드
n + 마우스 좌클릭 -> Do N 노드
M + 마우스 좌클릭 -> MultiGate 노드
-------------------------------------------------------------------------------------------------
TextBox 편집
enter 입력시 포커스 유지
widget > Designer 탭 > TextBox 잡고 Detail 의 Behavior 의 고급 >
Clear Keyboard Focus on Commit 을 false 로 변경
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
프로젝트 빌드 이슈
1. 프로젝트에 커스텀 Plugin 이 추가 되었을 경우
- epic 에서 책임지고 관리 하는 플러그인이 아니기 때문에 스스로 플러그인의 의존성에
문제가 발생하지 않도록 조치해야한다.
- 에디터에서만 작동, 빌드본에는 포함되지 않아 작동 않음

위 그림 같은 플러그인을 적용해야 하는 상황
TangoAuthenticatorLib 폴더에는 말 그대로 TangoAuthenticatorLib.dll 파일 하나가 있다.
TangoPlugin 폴더에는 Resources, Source 폴더와 TangoPlugin.uplugin 파일 등이 있다.
우선 TangoAuthenticatorLib 폴더를 TangoPlugin\Source\ 하위로 이동 시킨다.
이제 TangoPlugin\Source\ 하위에
TangoPlugin 와 TangoAuthenticatorLib 폴더가 존재하게 됨
TangoPlugin 폴더 내부에 있는 TangoPlugin.Build.cs 의 내용 수정
PublicDependencyModuleNames.AddRange(new string[] { "Core", "Http", "Json", "JsonUtilities", "Sockets" });
를 아래와 같이 수정( TangoAuthenticatorLib 를 추가해줌 )
PublicDependencyModuleNames.AddRange(new string[] { "Core", "Http", "Json", "JsonUtilities", "Sockets","TangoAuthenticatorLib" });
TangoAuthenticatorLib 폴더 하위에는 TangoAuthenticatorLib.Build.cs 파일 생성
내용은 아래와 같이
using System.IO;
using UnrealBuildTool;
public class TangoAuthenticatorLib: ModuleRules
{
public TangoAuthenticatorLib(ReadOnlyTargetRules Target) : base(Target)
{
Type = ModuleType.External;
string LibraryPath = ModuleDirectory + "/";
string DllName = "TangoAuthenticatorLib.dll";
RuntimeDependencies.Add(LibraryPath + DllName);
}
}
※ 4.18 버전의 경우
RuntimeDependencies.Add(new RuntimeDependency(LibraryPath + DllName));
이렇게 바꿔서 해줘야 함
-------------------------------------------------------------------------------------------------
주요 클래스
Prefix
U - UObject 상속 ( UTexture )
A - AActor 상속 ( AGameMode )
F - 그외의 모든 클래스와 struct 들 ( FName, FVector )
T - 탬플릿 ( TArray, TMap )
I - 인터페이스 클래스 ( ITransaction )
E - Enum 타입 ( ESelectionMode )
b - Boolean 변수 ( bEnabled )
pascal case : 함수이름, 파라미터 등등 모두 단어의 첫자는 대문자
지역변수와 루푸까지도