All (92)
-
2022.05.07 [UE] Unreal C++ 스크립트 규칙
언리얼에서는 자료형을 int32 등으로 사용하게 된다. int 는 4바이트 int32 는 4바이트 int 뒤에 붙는 32 표기는 비트 정보이다 int32 는 8*4 = 32 비트 ▶ 언리얼은 PC용 게임으로만 제작되는 것이 아니기 때문에 멀티플랫폼을 지원한다. 그래서 자료형 크기를 변환할 수 있게 사용 플랫폼마다 int 크기가 다를 수 있다. (phthon) C++ 스트립트에서 데이터 경로로 블루프린트의 클래스타입 쓸 때는.. 경로 마지막에 _C 를 붙여줘야 한다. ( 블루프린트로 레퍼런스를 가지고 올 경우 _C ) ▶ 오브젝트가 아니라고 명시 EX. 레퍼런스로 가져온 경로 : AnimBlueprint'/Game/ABP_CPlayer.ABP_CPlayer' CHelpers::GetClass(&animIn..
-
2022.05.06 [C++] 함수 포인터
함수 포인터 함수의 주소값을 저장하는 포인터 (함수의 시작 주소를 가리킨다) 함수 : 프로그램(exe 파일)이 실행될 때, 우리가 소스파일에 정의한 모든 함수가 메인 메모리(프로그램이 실행되면서 할당받은 메모리)에 올라간다. 이때. 우리가 작성한 함수이름은 함수의 시작 주소를 가리키는 포인터가 되는데, 이 포인터가 가리키는 주소가 변경되면 안되니까.. 포인터 상수로 함수의 시작 주소를 가리키게 된다. 이것을 함수 포인터 라고 부른다. 포인터 상수 : const ptr 포인터를 상수로 처리했다 는 의미이다. ---> "포인터를 상수로" 라고 생각하면 쉽다. cf. 상수 포인터 : ptr 상수를 가리키는 포인터 라는 의미이다. ---> "상수를 가리키는 포인터" 라고 생각하면 쉽다. ① 함수 포인터 선언 문..
-
2022.05.02 컴퓨터와 프로그램 메모리
프로그램(exe) 메모리 프로그램을 실행하면 운영체제가 프로그램을 위한 메모리 공간을 할당한다. 우리가 하는 일은 모두 이 연속된 메모리 안에서 일어나게 된다. 프로그램의 메모리 공간은 네 개의 영역으로 나눠서 관리된다 ( 위의 이미지 ) 1. 코드 영역 : 프로그램에 작성된 코드가 저장된다. 2. 데이터 영역 : 프로그램의 글로벌 데이터들이 저장된다. 3. 힙 영역 ( 위에서부터 아래로 데이터를 쌓아간다. ) : 단, 너무 많은 동적할당을 할 경우.. 힙 데이터가 스택 영역을 침범하게 된다. 이것을 힙 오버플로우라고 한다. 4. 스택 영역 ( 아래에서 부터 위로 데이터를 쌓아간다. ) : 함수 데이터들이 차곡차곡 쌓이는 공간이다. 코드에서 각각의 함수를 호출할 때마다 지역 변수나 매개 변수, *반환 주..
-
2022.05.01 [UE] 언리얼 오브젝트와 UClass
언리얼 오브젝트 언리얼 엔진의 관리를 받는 특수한 객체 언리얼 오브젝트가 아닌, 입력에 따라 결과 값만 받고싶은 C++ 클래스도 언리얼 프로젝트에서 전혀 문제없이 쓸 수 있다. 언리얼 엔진에서는 이러한 오브젝트를 구분하기 위해 클래스에 접두어를 사용한다. - 언리얼 오브젝트 (언리얼 엔진의 관리를 받는 객체) : U로 시작. ex) UObject, UMeshComponent... - 일반 C++ 오브젝트 ( C++ 네이티브 객체) : F로 시작. ex) FName, FVector... 언리얼 오브젝트를 생성하기 위한 최상단 기본 클래스는 UObject 이다. 언리얼 오브젝트는 언리얼 엔진이 자체적으로 만들어 제공하는 프레임웍이기 때문에 언리얼 헤더 툴 ( UHT ) 이라는 프로그램의 도움을 받아야 한다...
-
2022.04.30 [UE] 리플렉션
리플렉션 프로그램이 실행시간(런타임)에 자기 자신을 조사하는 기능 ▶ 자기자신의 정보를 들여다본다. ① 런타임 우리가 코드를 짜고 빌드를 하게되면 컴파일을 하게 되는데 컴파일의 순서는 아래와 같다. 번역된 어셈블리는 우리가 미리 작성한 스크립트(소스파일) 기준으로 생성이 된다. 런타임 때( = 어셈블리가 동작할 때 )는 메서드가 호출되거나 필드의 값을 변경하는 것들이 모두 프로그래머가 빌드하기 전에 스크립트로 미리 작성해놓은 대로 실행된다. 즉, 런타임 때 동작하는 것들은 스크립트에 정의해놓은 일련의 작업일 뿐이다. --> ex. ( C++ 스타일 ) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 switch( selectType ) { cas..
-
2022.04.23 [UE] 자주 사용하는 언리얼 함수/변수/매크로
CreateDefaultSubObject("str") > 템플릿 자료형 클래스를 매개변수로 받은 string 이름으로 생성(인스턴스)한 후 반환하는 함수 (포인터 반환) - 변수 이름이 BP의 컴포넌트 하이어라키에 표시되는 이름이다. cf. 왜 Sub 일까? 생성자에서 오브젝트를 생성할 때는 A라는 언리얼 오브젝트(멤버 변수)가 초기화를 위해, B라는 언리얼 오브젝트(임시 객체)를 생성할 때.. B는 A의 서브 오브젝트 라고 한다. --> 따라서 생성자 코드에서 언리얼 오브젝트의 인스턴스를 생성하고 관리하고자 할 때 함수 이름이 CreateDefaultSubObject 이다 RootComponent 변수 > 더미이다. 상징적인 의미로 사용된다. 이후에 생성되는 컴포넌트들의 Tr 기준점이 된다. - 이후에..
-
2022.04.01 [C++] 문법 - 범위 지정 연산자
C++에서 가장 우선순위가 높은 연산자는 바로 범위 지정 연산자입니다. 범위 지정 연산자(::)는 여러 범위에서 사용된 식별자(identifier)를 식별하고 구분하는데 사용하는 연산자입니다. 이러한 식별자로는 변수, 함수 또는 열거체가 올 수 있습니다. 범위 지정 연산자를 변수의 이름 앞에 붙이면 해당 변수는 전역으로 사용하라는 의미로 쓰이게 됩니다. 또한, 클래스에 이 연산자를 사용하면 네임스페이스 멤버를 식별하거나, 클래스의 정적 멤버를 호출할 수 있습니다. C++에서 범위 지정 연산자를 사용하기 위한 문법은 다음과 같습니다. 문법 1. ::식별자 2. 클래스이름::식별자 3. 네임스페이스::식별자 4. 열거체::식별자 더보기 언리얼 FString::FromInt() 방식은 2번 방식으로, From..
-
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 등 배수 규약에 맞춰지지 않은 크기여서, 특정 배수보..
-
2021.02.02 [ue4 error] msb3073 [ code : 6 ]
vs 에서 컴파일 시 발생하는 에러인 것 같음 정확한 원인은 모르겠음 대체로 이 에러만 발생하지는 않고 해당 에러 포함해서 2개의 에러가 발생하는 것 같다. 내 생각에, 다른 에러 아래에 msb3073이 뜨는 거 보면.. 연결되서 발생하는 에러같은데 오류목록에서 msb3073 말고 다른 에러부터 잡으니 해당 에러가 같이 없어지면서 해결됨. 하지만 이렇지 않을 경우, 참 난감한데.. 몇 가지 방법을 찾아보고 테스트해본 것 정리 ▼▼▼ 1. 프로젝트 속성 -> 구성요소 -> 빌드 후 이벤트 > 이러한 방식으로 해결할 때는 code : 9009 인 것 같다. 나는 구성요소에서 '빌드 후 이벤트' 를 찾을 수 없었다 > 혹시 모르니 적어놓기... 출처 : blog.daum.net/hanttl1004/98 2. ..
-
2021.02.02 [ue4 error] lnk1104
vs 내에서 컴파일 할 때 해당 에러가 발생하는 경우, 열려있는 언리얼 에디터를 종료하고 빌드를 해야한다.