Game!

전체 글 (93)

  1. 2022.04.23 [UE] 자주 사용하는 언리얼 함수/변수/매크로

    CreateDefaultSubObject("str") > 템플릿 자료형 클래스를 매개변수로 받은 string 이름으로 생성(인스턴스)한 후 반환하는 함수 (포인터 반환) - 변수 이름이 BP의 컴포넌트 하이어라키에 표시되는 이름이다. cf. 왜 Sub 일까? 생성자에서 오브젝트를 생성할 때는 A라는 언리얼 오브젝트(멤버 변수)가 초기화를 위해, B라는 언리얼 오브젝트(임시 객체)를 생성할 때.. B는 A의 서브 오브젝트 라고 한다. --> 따라서 생성자 코드에서 언리얼 오브젝트의 인스턴스를 생성하고 관리하고자 할 때 함수 이름이 CreateDefaultSubObject 이다 RootComponent 변수 > 더미이다. 상징적인 의미로 사용된다. 이후에 생성되는 컴포넌트들의 Tr 기준점이 된다. - 이후에..

  2. 2022.04.01 [C++] 문법 - 범위 지정 연산자

    C++에서 가장 우선순위가 높은 연산자는 바로 범위 지정 연산자입니다. 범위 지정 연산자(::)는 여러 범위에서 사용된 식별자(identifier)를 식별하고 구분하는데 사용하는 연산자입니다. 이러한 식별자로는 변수, 함수 또는 열거체가 올 수 있습니다. 범위 지정 연산자를 변수의 이름 앞에 붙이면 해당 변수는 전역으로 사용하라는 의미로 쓰이게 됩니다. 또한, 클래스에 이 연산자를 사용하면 네임스페이스 멤버를 식별하거나, 클래스의 정적 멤버를 호출할 수 있습니다. C++에서 범위 지정 연산자를 사용하기 위한 문법은 다음과 같습니다. 문법 1. ::식별자 2. 클래스이름::식별자 3. 네임스페이스::식별자 4. 열거체::식별자 더보기 언리얼 FString::FromInt() 방식은 2번 방식으로, From..

  3. 2021.05.11 구조체 메모리 할당 위치, 범위 고정시키기 1

    class 또는 struct 객체의 크기는 필드의 크기보다 크게 표시될 수 있다. 1 2 3 4 5 6 struct A { public int i; // 4 public double d; // 8 public byte b; // 1 } cs A 구조체의 경우, 크기를 4+8+1 = 13 으로 생각할 수 있지만, 실제 객체 사이즈를 확인해보면 24로 확인할 수 있다 * ex. Marshal.SizeOf( typeof( A ) ); 왜냐면, C# / .NET 에서 자동으로 Field Ailgnment 규칙에 따라 객체 크기를 맞춘 것이다. * C# / .NET 에서의 Field Ailgnment 규칙 : 8바이트 바운더리 -> 내 생각에, 2^n, 8^n 등 배수 규약에 맞춰지지 않은 크기여서, 특정 배수보..

  4. 2021.02.02 [ue4 error] msb3073 [ code : 6 ]

    vs 에서 컴파일 시 발생하는 에러인 것 같음 정확한 원인은 모르겠음 대체로 이 에러만 발생하지는 않고 해당 에러 포함해서 2개의 에러가 발생하는 것 같다. 내 생각에, 다른 에러 아래에 msb3073이 뜨는 거 보면.. 연결되서 발생하는 에러같은데 오류목록에서 msb3073 말고 다른 에러부터 잡으니 해당 에러가 같이 없어지면서 해결됨. 하지만 이렇지 않을 경우, 참 난감한데.. 몇 가지 방법을 찾아보고 테스트해본 것 정리 ▼▼▼ 1. 프로젝트 속성 -> 구성요소 -> 빌드 후 이벤트 > 이러한 방식으로 해결할 때는 code : 9009 인 것 같다. 나는 구성요소에서 '빌드 후 이벤트' 를 찾을 수 없었다 > 혹시 모르니 적어놓기... 출처 : blog.daum.net/hanttl1004/98 2. ..

  5. 2021.02.02 [ue4 error] lnk1104

    vs 내에서 컴파일 할 때 해당 에러가 발생하는 경우, 열려있는 언리얼 에디터를 종료하고 빌드를 해야한다.

 

 

 

 

 

 

CreateDefaultSubObject<T>("str")

> 템플릿 자료형 클래스를 매개변수로 받은 string 이름으로 생성(인스턴스)한 후 반환하는 함수 (포인터 반환)

- 변수 이름이 BP의 컴포넌트 하이어라키에 표시되는 이름이다.

cf. 왜 Sub 일까?

생성자에서 오브젝트를 생성할 때는 A라는 언리얼 오브젝트(멤버 변수)가 초기화를 위해, B라는 언리얼 오브젝트(임시 객체)를 생성할 때.. B는 A의 서브 오브젝트 라고 한다.

--> 따라서 생성자 코드에서 언리얼 오브젝트의 인스턴스를 생성하고 관리하고자 할 때 함수 이름이 CreateDefaultSubObject 이다

 

 

 

RootComponent 변수

> 더미이다. 상징적인 의미로 사용된다. 이후에 생성되는 컴포넌트들의 Tr 기준점이 된다.

- 이후에 생성되는 컴포넌트들은 Root 로 지정한 컴포넌트의 자식으로 생성됨.

(- 별도로 지정하지 않으면 제일 먼저 인스턴스한 컴포넌트가 자동으로 Root 가 되는 듯.)

 

 

 

verifyf 함수

> 개발 중에 오류가 났을 때 오류값 체크 (에디터상에서 사용)

- 실제 서비스할 때는 실행되지 않음

 

 

 

TSubclassOf<T> : 기본적으로 TSub 클래스 가 포인터이다.

> 해당 자료형 전방선언. 자료형의 타입을 변수로 다룰 수 있게 해주는 기능 (리플렉션)

- T 자료형 상속받은 클래스만 사용할 수 있게 제한

- UClassc 일 경우, 언리얼 모든 클래스 가능​

 

 

 

UMaterialInstanceConstant

> 상수 머터리얼 인스턴스. 에디터에서만 매개 변수를 변경할 수 있다.

> 언리얼 에디터의 Material Instance 가 C++ 에서는 해당 자료형으로 표현된다.

( 언리얼 에디터의 Material 이랑 Material Instance 에서 Material Instance )

 

 

UMaterialInstanceDynamic

> 런타임 중에 매개 변수를 변경할 수 있는 인스턴스

 

 

UMaterialInstanceDynamic:: Create( ) 함수

> 동적 머테리얼을 생성할 경우 사용. 

- 주로 에디터의 (UMaterialInstanceConstant) Material Instance 를 가져와서 C++ 에서 동적으로 생성하는 방식으로 사용된다.

( Material 과 관련된 클래스는 전부 UMaterialInterface 로부터 상속받아 구현되어진다. )

 

 

UMaterialInstanceDynamic:: SetVectorParameterValue( ) 함수

> 머테리얼에서 칼라는 Vector 값으로 표현되는데, 칼라 파라미터를 변경하겠다는 것

 

 

▼ 머터리얼과 머터리얼 인스턴스의 관계

더보기

BP 에서..

값을 고정으로 사용하고 싶으면 : Constant 노드 사용

값을 변경해서 사용하고 싶으면 : Parameter 노드 사용

 

Parameter 의 값을 변경할 때는 독립적이라는 의미로 Material Instance 를 생성해야한다.

▶ Material Instance 는 UMaterialInstanceConstant 자료형을 가진다

( 동일한 Material 을 사용하는 A, B 오브젝트가 있을 때.. A 의 색을 변경했는데 B 의 색까지 바뀔 필요는 없기 때문이다. 그래서 Material Instance 를 생성해서 A 의 Material Instance 의 Paremeter 값만 변경해주면 된다. )

 

그니까..

머터리얼 데이터는 똑같이 쓰는데, 그 값만 서로 다르게 쓰고싶으니까 Inst 로 분리해서 사용하는 거임

 

 

 

UKismetSystemLibrary

> 타이머 정보가 있다.

 

UKismetMathLibrary

> 랜덤 정보가 있다.

 

 

 

(Component)->SetupAttachment(parent)

> 컴포넌트를 부모의 자식으로 붙이는 함수

- Componenet 를 parent 의 자식으로 붙이겠다.

 

 

 

SetRelativeLocation(FVector)

SetRelativeRotation(FRotator)

> 해당 컴포넌트의 Transform 기본값을 설정할 수 있다. 

 

 

 

SpringArm:: bDoCollisionTest

> 카메라가 벽에 닿으면 충돌 계산을 통해 카메라와 캐릭터의 거리를 좁혀 카메라가 벽을 뚫지 않게 할 것인지? 여부

 

 

 

SpringArm:: bUsePawnControlRotation

> 폰의 카메라 회전을 제어할 것인지? 여부
- false 일 경우 회전 허용 안함. relative rotation 값으로 고정
- true 일 경우 회전을 허용

 

 

▼ 카메라에 붙는 SpringArm 의 역할 (SpringArmComponent)

더보기

Spring Arm 은 카메라가 이동하면서 유연한 느낌으로 따라붙을 수 있게 도와준다.

 

카메라가 무언가 ( 다른 오브젝트) 에 방해를 받을 때는 카메라 위치를 자동으로 옮겼다가

더 이상 방해를 받지 않게되면 원래 위치로 되돌려주는 등 부작용을 최소화 시키는데 도와준다.

 

ex1. 카메라가 이동 시 약간의 시차를 두고 이동하기

ex2. 벽 근처에서 카메라를 회전시키면 자동으로 위치를 조정해서 가까이 오기,

이런 상황이 해제되면 원래대로 돌아오기

 

 

 

UCharacterMovementComponent:: bOrientRotationToMovement

> 이동할 때, 가속되고 있는 값 방향으로 캐릭터 메쉬를 회전시킬 것인지? 여부

- true 일 경우 : 캐릭터가 가속값을 가지고 있다면, 가속되고 있는 값 방향으로 캐릭터 메쉬를 회전시킨다.

- false 일 경우 : 키 입력을 받아도 캐릭터 메쉬가 회전하지 않는다. (가속하는 방향으로 캐릭터가 회전하지 않는다)

> OrientRotation 뜻 : 방향 회전 

 

 

 

ConstructorHelpers 클래스

> 생성자에 도움될 클래스들을 모아두는 곳

 

ConstructorHelpers:: FObjectFinder<T>

> Asset의 내용물을 가져올 때 사용 (= Asset 자체를 가져올 때 사용)

- 생성자에서만 사용 가능.

 

ConstructorHelpers:: FClassFinder<T> 

> Asset의 타입 정보를 가져올 때 사용 (= Asset 타입을 가져올 때 사용)

- 하나의 언리얼 프로젝트는 UClass와 CDO로 나뉘어지는데, UClass 관련 타입을 찾는다.

(- 생성자에서만 사용 가능한듯?)

 

 

 

StaticLoadObject 함수

> 기능은 ConstructorHelpers::FObjectFinder 와 동일. 생성자가 아닌 곳에서 동적 로딩을 해주는 함수이다.

- 반환형이 UObject (최상위 Object 자료형) 이므로 내가 사용할 자료형을 캐스팅해서 사용하면 된다.

 

 

 

UInputComponent:: BindAxis
> 입력 방향키 설정. GameMode 에서 설정한 Key 이름이랑 함수를 매칭시킨다.

 

 

 

APawn:: GetControlRotation

> 컨트롤러의 Rotation 을 반환한다.

> 절대축 기준 회전값을 반환하며, 0 ~ 360 사이 각도 리턴 (절대축 기준으로 플레이어가 얼마나 회전했는지)

- ControlRotation : 플레이어 조작 시 회전을 기준으로 약속

 

GetControlRotation().Quaternion().Euler()
> 컨트롤러의 Rotation 을 반환한다. 절대축 기준 회전값을 반환하며, -180 ~ 180 사이 각도 리턴

 

 

 

GetActorRotation( )

> 액터의 RootComponent 회전값을 반환

 

 

 

FVector:: GetUnsafeNormal2D
> 벡터의 노말을 구하는 함수. 안전하지 않아서 unsafe 인듯.

 

 

 

APawn:: AddMovementInput
> 폰을 이동시키는 함수

 

APawn:: AddControllerYawInput
> 마우스를 이동시키는 함수 (Yaw 는 좌우 이동)

 

 

 

(APawn::)

bUseControllerRotationRoll = false

bUseControllerRotationPitch = false

bUseControllerRotationYaw = false

> 캐릭터가 카메라의 회전을 따라서 회전하지 않도록 한다.

> true 일 경우 : 카메라의 회전값에 따라서 캐릭터도 같이 회전한다

 

 

 

DEFINE_LOG_CATEGORY_STATIC

> 에디터 로그 출력창에 표시할 때, 해당 매크로를 통해 로그 카테고리를 설정할 수 있다.

 

 

 

APawn:: TryGetPawnOwner

> 나(오브젝트 또는 컴포넌트)를 포함하고 있는 주인 폰을 반환한다.

 

 

 

Engine/World.h

> UWorld 를 가지고 있는 헤더파일. 월드는 여러 개 존재할 수 있는데 보통 1개인듯

> 직역 : UWorld 는 컴포넌트를 가진 액터를 렌더링하는 맵이나 샌드박스를 나타내는 최상위 객체

 

GetWorld( )-> GetTimeSeconds( )

> 게임을 시작한 후 현재까지 경과된 시간

 

GetWorld( )-> GetRealTimeSeconds( )

> 현실 세계의 경과 시간

 

 

 

IsBound

> 델리게이트에 함수가 하나라도 연결되어 있는지 체크

 

 

 

UPointLightComponent

> Light 를 보일지 말지 여부

- 생성자일 경우 : bVisible 변수로 셋팅

- 생성자가 아닐 경우 : SetVisibility( ) 함수로 셋팅

 

> 빛의 강도 설정 : Intensity

- 1e + 4f = 10^4 = 10000

- 1e - 6f = 10^-6 = 0.000001

( 언리얼이나 C++ 에서 많이 쓰는 표기 방법 )

 

 

 

FLinearColor

> 부동소수점 컬러 범주 ( 0.0f ~ 1.0f )

 

FColor

> RGB 컬러 범주 ( 0 ~ 255 )

 

 

 

TArray

> 가변형 배열. C++ STL 의 Vector 와 유사하다

 

 

 

UGameplayStatics

> BP 와 C++ 모두에서 접근할 수 있는 정적 클래스. 유용한 게임플레이 유틸리티 함수가 있다.

- GetAllActorsOfClass : 지정한 클래스를 가진 모든 액터를 찾는다. 월드에서.. 

 

 

 

UPrimitiveComponent:: SetSimulatePhysics( )

> 물리 시뮬레이션 (자유낙하) 을 적용할 것인지? 셋팅

- 자유낙하 : 만유인력을 받아 인정한 가속도로 떨어지는 운동 (ex. 공 떨어뜨리기)

 

 

 

USceneComponent:: GetComponentToWorld( )

> 해당 컴포넌트를 가진 액터의.. 월드 기반 Transform 정보를 가져온다

 

 

 

UGameplayStatics:: SpawnEmitterAtLocation( world, particle, transform )

> 특정 좌표에 파티클을 생성한다. 

 

 

 

AttachToComponent

> 호출하는 대상이 parent componenet 의 특정 소켓에 붙는다

- FAttachmentTransformRules(EAttachmentRule:: , bool) : 부착 규칙

 

 

 

UWorld:: SpawnActor

> 특정 월드에 해당 액터를 스폰한다.

 

FActorSpawnParameters

> SpawnActor 함수에 전달되는 매개변수 구조체 ( 유니티에서 선택적 구조체로 넘기는 param[] 와 같은 개념 )

- 유니티 param[] 은 명시적 변환을 통해 원하는 클래스나 자료형을 넘길 수 있지만

- FActorSpawnParameters 는 보낼 수 있는 구조체 정보들이 정해져있음

 

 

 

AActor:: GetOwner

> 이 액터를 소유한 주인 액터를 반환.

 

 

 

(SpringArm::) SocketOffset 

> 스프링 암 끝의 카메라의 위치를 조정

ex)

SpringArm->SocketOffset = FVector(0, 30, 10);      // 오른쪽 방향 앞 쪽

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'Engine > Unreal' 카테고리의 다른 글

[UE] USceneComponent 와 PrimitiveComponent  (0) 2022.05.09
[UE] 델리게이트와 이벤트  (0) 2022.05.09
[UE] Unreal C++ 스크립트 규칙  (0) 2022.05.07
[UE] 언리얼 오브젝트와 UClass  (0) 2022.05.01
[UE] 리플렉션  (0) 2022.04.30

 

 

C++에서 가장 우선순위가 높은 연산자는 바로 범위 지정 연산자입니다.

범위 지정 연산자(::)는 여러 범위에서 사용된 식별자(identifier)를 식별하고 구분하는데 사용하는 연산자입니다.

이러한 식별자로는 변수, 함수 또는 열거체가 올 수 있습니다.

 

범위 지정 연산자를 변수의 이름 앞에 붙이면 해당 변수는 전역으로 사용하라는 의미로 쓰이게 됩니다.

또한, 클래스에 이 연산자를 사용하면 네임스페이스 멤버를 식별하거나, 클래스의 정적 멤버를 호출할 수 있습니다.

 

C++에서 범위 지정 연산자를 사용하기 위한 문법은 다음과 같습니다.

 

문법

1. ::식별자

2. 클래스이름::식별자

3. 네임스페이스::식별자

4. 열거체::식별자

 

 

더보기

언리얼 FString::FromInt() 방식은 2번 방식으로, FromInt 함수를 들어가보면 static 함수로 되어있다.

 

정적 멤버(= static 멤버)  : 정적(static) 함수 또는 정적(static) 변수

 

static :

1. 프로그램 시작 시 할당, 프로그램 종료 시 해제 (클래스 내부에 선언되도 예외 없음)

2. 프로그램 시작 시 메모리에 할당되기 때문에 클래스의 크기에 영향을 주지 않음.

3. 객체를 여러 개 생성하더라도 하나만 존재

 

즉, 객체를 생성하지 않아도 사용이 가능하다.

 

* static 함수 : (프로그램 시작 시) 코드 영역 메모리에 할당됨

* static 변수 : (프로그램 시작 시) 데이터 영역 메모리에 할당됨

 

 

 

 

 

 

출처 :

https://blog.naver.com/dd1587/221105192187

http://www.tcpschool.com/cpp/cpp_operator_cpp

https://m.blog.naver.com/dd1587/221112343202

'Language > C++' 카테고리의 다른 글

[C++] 코드 위치나 정보를 받아오는 매크로 들  (0) 2022.05.08
[C++] 함수 포인터  (0) 2022.05.06
C++ for_each 함수  (0) 2018.03.21
wsprintf 정리  (0) 2018.02.28
[C++] 중첩 클래스 사용 이유  (0) 2018.01.10

 

class 또는 struct 객체의 크기는 필드의 크기보다 크게 표시될 수 있다.

 

1
2
3
4
5
6
struct A
{
    public int i;           // 4
    public double d;        // 8
    public byte b;          // 1
}
cs

 

A 구조체의 경우, 크기를 4+8+1 = 13 으로 생각할 수 있지만,

실제 객체 사이즈를 확인해보면 24로 확인할 수 있다

 

* ex. Marshal.SizeOf( typeof( A ) )

 

왜냐면, C# / .NET 에서 자동으로 Field Ailgnment 규칙에 따라 객체 크기를 맞춘 것이다.

 

* C# / .NET 에서의 Field Ailgnment 규칙 : 8바이트 바운더리

-> 내 생각에, 2^n, 8^n 등 배수 규약에 맞춰지지 않은 크기여서, 특정 배수보다 크면 다음 배수 크기로 맞추는 규칙인듯.

 

 

그런데, 간혹 파일 스트림 등 바이트를 정확하게 읽어야하는 경우가 있을 수 있다. 

또는 메모리 필드 순서가 정확해야할 때가 있다. 

 

* 바이트를 정확하게 읽어야하는 경우 : 위의 예제대로 13바이트를 정확하게 가지고 있어야하는 경우

* 메모리 필드 순서가 정확해야할 때 : 메모리상에 i, d, b 위치가 정확해야할 때

-> 내 생각에, 객체 필드 변수를 메모리 파편화 등 막으려고 순서를 자동으로 변경하는듯

 

 

이럴 경우, 해당 방식들로 객체 크기를 고정시킬 수 있다

1
2
3
4
5
6
7
[StructLayOut(LayoutKind.Sequential, Pack = 1)]
struct A
{
    public int i;            // 4
    public double d;        // 8
    public byte b;            // 1
}
cs

 

---> Sequential :

실제 메모리에서는 변수 순서가 자동으로 변경되서 저장되지만,

객체의 변수를 가져와서 사용할 때는 반드시 변수 순서대로 데이터가 옮겨진다.

 

 

1
2
3
4
5
6
7
[StructLayOut(LayoutKind.Explicit, Pack = 1)]
struct A
{
    public int i;            // 4
    public double d;        // 8
    public byte b;            // 1
}
cs

 

---> Explicit :

실제 메모리 와 객체의 변수를 사용할 때 모두 변수를 순서대로 저장하고 읽는다는 것.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
[StructLayOut(LayoutKind.Explicit, Pack = 1)]
struct A
{
    [FieldOffect(0)]    
    public int i;           // 4
 
    [FieldOffect(4)]    
    public double d;        // 8
 
    [FieldOffect(12)]    
    public byte b;          // 1
}
 
cs

 

Explicit 레이아웃을 사용할 경우, FieldOffset 키워드를 사용하여 특정 바이트 위치하게 할 수 있다.

해당 예제에서는 필드 변수 i 는 0번째에, d 는 4번째 바이트 위치하게 된다.

 

 

 

* ex. 응용의 경우 :

더보기
1
2
3
4
5
6
7
8
9
10
[StructLayOut(LayoutKind.Explicit, Pack = 1)]
struct A
{
    [FieldOffect(0)]    
    public int i;
 
    [FieldOffect(0)]    
    public float f;
}
 
cs

 

두 변수 모두 0번째 바이트에 위치 시킨다.

즉, i 에 값을 넣고, f 를 읽으면 i 값을 float 형으로 읽을 수 있다.

 

출처

http://csharpstudy.com/DevNote/Article/10

 

틀린 내용이 있으면 덧글 공유 부탁드립니다~

'Language > C#' 카테고리의 다른 글

C# 데이터 구조와 Object 타입  (0) 2024.09.21
c# Color 와 Color32 색상 범위 차이  (0) 2020.10.20
[C#] const, readonly 차이  (0) 2020.10.08
List<T>.RemoveAll(Predicate<T>) 함수 개념  (0) 2017.12.14

 

 

vs 에서 컴파일 시 발생하는 에러인 것 같음

 

정확한 원인은 모르겠음

대체로 이 에러만 발생하지는 않고 해당 에러 포함해서 2개의 에러가 발생하는 것 같다.

 

내 생각에, 다른 에러 아래에 msb3073이 뜨는 거 보면.. 연결되서 발생하는 에러같은데

오류목록에서 msb3073 말고 다른 에러부터 잡으니 해당 에러가 같이 없어지면서 해결됨.



하지만 이렇지 않을 경우, 참 난감한데.. 몇 가지 방법을 찾아보고 테스트해본 것 정리

 

 

 

1. 프로젝트 속성 -> 구성요소 -> 빌드 후 이벤트

> 이러한 방식으로 해결할 때는 code : 9009 인 것 같다. 나는 구성요소에서 '빌드 후 이벤트' 를 찾을 수 없었다

> 혹시 모르니 적어놓기...

출처 : blog.daum.net/hanttl1004/98

 

2. UPROPERTY 속성에 오타가 없는지 확인

> 가장 먼저 체크해야하는 부분 인듯

> 나는 잘못 작성한 것이 없는 것 같아서 새로운 프로젝트를 만들자마자 빌드했는데 (내가 작성한 코드 없음) 동일하게 발생

 

출처 : stackoverflow.com/questions/60696060/msb3073-ue4-exited-with-code-6-how-do-i-fix-this

 

3. 에디터를 끄고 빌드

> 테스트 안해봄. 해당 에러가 다시 발생하면 추후에 업뎃할 예정

 

4. visual studio 재설치 ( vs installer 에서 제거 후 설치 )

> vs만 삭제하고 재설치 해봤는데 해결 안됨. 검색으로는 vs2019 의 16.5 버전 이후부터 이 에러가 발생한다는데 나는 2017 로 다운받았는데도 동일하게 발생

 

5. ue4 런처, ue4 , vs 제거 후 (중요) vs 먼저 설치 ---> ue4 설치

> vs 설치 후 ue4 설치 전에, vs 빈프로젝트에서 main만 만들고 빌드해보고 성공하면 ue4 설치했음

> 해결됨

> 내 생각엔 vs 잘못 설치한 것 같음

> vs 설치 시, installer 에서 'c++을 사용한 게임 개발 ( unreal, cocos 지원)' 이거만 선택 후 설치했음

> ue4 설치 시, (솔직히 나는 런처만 삭제하고 ue4 (26.0) 는 복구했음) 옵션에서 android 체크 제거했는데 상관은 없을듯 

 

 

 

 

vs 내에서 컴파일 할 때 해당 에러가 발생하는 경우,

열려있는 언리얼 에디터를 종료하고 빌드를 해야한다.