[UE] 델리게이트와 이벤트
Unreal C++ 함수 콜백 종류 델리게이트 다이나믹 델리게이트 이벤트 델리게이트는 외부(C++)에서 연결해서 사용 가능 다이나믹 델리게이트는 BP와 연결하기 위해 사용 가능 이벤트는 자신의 클래스에 속해서만 사용 가능 델리게이트 C++ 에서만 사용할 수 있는 콜백 함수 2개의 타입이 있다 ( 싱글 / 멀티 ) 바인딩할 경우, 인자랑 타입이 똑같아야한다. 더보기 델리게이트 생성 싱글 DECLARE_DELEGATE DECLARE_DELEGATE_OneParam DECLARE_DELEGATE_TwoParams DECLARE_DELEGATE_Params DECLARE_DELEGATE_RetVal DECLARE_DELEGATE_RetVal_OneParam ... 멀티 위의 표준과 동일하다. 단, 멀티 표기를 ..
2022.05.09
[C++] 코드 위치나 정보를 받아오는 매크로 들
디버깅이 어려운 환경에서는 보통 로그를 찍게 되는데 이때 로그에서 코드의 정보를 출력해주는 매크로를 사용해서 추가 정보를 출력할 수 있다. 표준 C++ 에서 제공 __FUNCTION__ 매크로 현재 함수의 이름을 받아온다 C++ 에서는 함수마다 내부적으로 __func__ 라는 로컬 변수가 정의돼있다. 이 변수는 현재 함수의 이름을 저장하고 있다. __LINE__ 매크로 현재 스크립트의 줄번호를 받아온다 __FILE__ 매크로 현재 소스코드의 파일을 받아온다. EX. CGlobal.h... CPlayer.cpp ... 단, 파일 이름만 출력하지 않고 파일의 전체 경로를 출력하게 된다. ▶ C:\CppProject1\TestGame\Source\MyGame\CPlayer.cpp
2022.05.08
[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.07
[C++] interface
interface 특정 기능을 구현할 것을 약속한 추상 형식 ( 다형성 의도를 명확하게 표현하기 위해 약속된 문법.. 이라고 생각할 수 있다 ) 특정 기능을 약속한 함수만 갖는다. 즉, 멤버 변수나 구체적으로 구현된 함수를 갖지 않는다. 모든 멤버 함수는 public 으로만 사용된다. 인터페이스로 사용한다 라고 가독성을 높이기 위해 인터페이스의 이름은 I 로 시작하도록 약속되어있다. interface 는 그 자체로 객체를 생성할 수 없고, 해당 인터페이스를 상속받아 무조건 재정의해서 사용하도록 의도한다. 기존에는 별도로 C++ 에서 문법을 제공하지 않았기 때문에 구조체 또는 클래스로 인터페이스를 만들어서 사용했다. #define interface class interface IAnimal { public..
2022.05.06
[C++] 함수 포인터
함수 포인터 함수의 주소값을 저장하는 포인터 (함수의 시작 주소를 가리킨다) 함수 : 프로그램(exe 파일)이 실행될 때, 우리가 소스파일에 정의한 모든 함수가 메인 메모리(프로그램이 실행되면서 할당받은 메모리)에 올라간다. 이때. 우리가 작성한 함수이름은 함수의 시작 주소를 가리키는 포인터가 되는데, 이 포인터가 가리키는 주소가 변경되면 안되니까.. 포인터 상수로 함수의 시작 주소를 가리키게 된다. 이것을 함수 포인터 라고 부른다. 포인터 상수 : const ptr 포인터를 상수로 처리했다 는 의미이다. ---> "포인터를 상수로" 라고 생각하면 쉽다. cf. 상수 포인터 : ptr 상수를 가리키는 포인터 라는 의미이다. ---> "상수를 가리키는 포인터" 라고 생각하면 쉽다. ① 함수 포인터 선언 문..
2022.05.06
no image
컴퓨터와 프로그램 메모리
프로그램(exe) 메모리 프로그램을 실행하면 운영체제가 프로그램을 위한 메모리 공간을 할당한다. 우리가 하는 일은 모두 이 연속된 메모리 안에서 일어나게 된다. 프로그램의 메모리 공간은 네 개의 영역으로 나눠서 관리된다 ( 위의 이미지 ) 1. 코드 영역 : 프로그램에 작성된 코드가 저장된다. 2. 데이터 영역 : 프로그램의 글로벌 데이터들이 저장된다. 3. 힙 영역 ( 위에서부터 아래로 데이터를 쌓아간다. ) : 단, 너무 많은 동적할당을 할 경우.. 힙 데이터가 스택 영역을 침범하게 된다. 이것을 힙 오버플로우라고 한다. 4. 스택 영역 ( 아래에서 부터 위로 데이터를 쌓아간다. ) : 함수 데이터들이 차곡차곡 쌓이는 공간이다. 코드에서 각각의 함수를 호출할 때마다 지역 변수나 매개 변수, *반환 주..
2022.05.02
no image
컴퓨터에서의 2의 보수
1 2 3 4 5 6 7 int iNumber = 10; cout
2022.05.01
[UE] 언리얼 오브젝트와 UClass
언리얼 오브젝트 언리얼 엔진의 관리를 받는 특수한 객체 언리얼 오브젝트가 아닌, 입력에 따라 결과 값만 받고싶은 C++ 클래스도 언리얼 프로젝트에서 전혀 문제없이 쓸 수 있다. 언리얼 엔진에서는 이러한 오브젝트를 구분하기 위해 클래스에 접두어를 사용한다. - 언리얼 오브젝트 (언리얼 엔진의 관리를 받는 객체) : U로 시작. ex) UObject, UMeshComponent... - 일반 C++ 오브젝트 ( C++ 네이티브 객체) : F로 시작. ex) FName, FVector... 언리얼 오브젝트를 생성하기 위한 최상단 기본 클래스는 UObject 이다. 언리얼 오브젝트는 언리얼 엔진이 자체적으로 만들어 제공하는 프레임웍이기 때문에 언리얼 헤더 툴 ( UHT ) 이라는 프로그램의 도움을 받아야 한다...
2022.05.01
no image
[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.30
[UE] 자주 사용하는 언리얼 함수/변수/매크로
CreateDefaultSubObject("str") > 템플릿 자료형 클래스를 매개변수로 받은 string 이름으로 생성(인스턴스)한 후 반환하는 함수 (포인터 반환) - 변수 이름이 BP의 컴포넌트 하이어라키에 표시되는 이름이다. cf. 왜 Sub 일까? 생성자에서 오브젝트를 생성할 때는 A라는 언리얼 오브젝트(멤버 변수)가 초기화를 위해, B라는 언리얼 오브젝트(임시 객체)를 생성할 때.. B는 A의 서브 오브젝트 라고 한다. --> 따라서 생성자 코드에서 언리얼 오브젝트의 인스턴스를 생성하고 관리하고자 할 때 함수 이름이 CreateDefaultSubObject 이다 RootComponent 변수 > 더미이다. 상징적인 의미로 사용된다. 이후에 생성되는 컴포넌트들의 Tr 기준점이 된다. - 이후에..
2022.04.23
no image
[C++] 문법 - 범위 지정 연산자
C++에서 가장 우선순위가 높은 연산자는 바로 범위 지정 연산자입니다. 범위 지정 연산자(::)는 여러 범위에서 사용된 식별자(identifier)를 식별하고 구분하는데 사용하는 연산자입니다. 이러한 식별자로는 변수, 함수 또는 열거체가 올 수 있습니다. 범위 지정 연산자를 변수의 이름 앞에 붙이면 해당 변수는 전역으로 사용하라는 의미로 쓰이게 됩니다. 또한, 클래스에 이 연산자를 사용하면 네임스페이스 멤버를 식별하거나, 클래스의 정적 멤버를 호출할 수 있습니다. C++에서 범위 지정 연산자를 사용하기 위한 문법은 다음과 같습니다. 문법 1. ::식별자 2. 클래스이름::식별자 3. 네임스페이스::식별자 4. 열거체::식별자 더보기 언리얼 FString::FromInt() 방식은 2번 방식으로, From..
2022.04.01
구조체 메모리 할당 위치, 범위 고정시키기
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.05.11
[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 내에서 컴파일 할 때 해당 에러가 발생하는 경우, 열려있는 언리얼 에디터를 종료하고 빌드를 해야한다.
2021.02.02
[visual studio error] '마이그레이션 필요' 프로젝트를 로드하고 다시 시작하세요
unity로 작업 중에 모든 스트립트가 열리지 않는 상황이 발생했다. 전부 동일하게error code : 0x0000139F라고 뜨면서 모든 스크립트가 오픈되지 않는 현상 http://koolwin1.tistory.com/267 해당 링크 내용을 보고 해결됐다.. 정리는 추후에!
2021.01.07