본문 바로가기

분류 전체보기137

Effective C++ 항목 4: 객체를 사용하기 전에 반드시 그 객체를 초기화하자 아마 다들 알겠지만 초기화되지 않는 값을 읽으면 정의되지 않은 동작이 그대로 나온다.공부하고 있는 Unreal의 경우 접근 불가능한 *에 대해 접근하기만 해도 프로그램이 다운된다.대부분은 적당히 무작위 비트의 값을 읽고 객체의 내부가 이상한 값을 갖게 한다. C++에서 객체의 초기화가 중구난방은 아니긴하다. 언제 초기화가 보장되며 언제 그렇지 않은지에 대해서 명확한 규칙이 존재하긴 하다. 하지만 너무 복잡하다. 복잡한 것보다 그럼 간단한게 좋은데 간단한 방법은 당연히모든 객체를 사용하기 전에 초기화하는 것이다. int x = 0; //int 초기화const char* text = "C-Style String"; //포인터 직접 초기화double d;cin >> d; //입력 스트림에서 읽어서 초기화생.. 2024. 10. 10.
Unreal AIController 제작 이번에 BehaviorTree에 쓰일 AIContoroller(AIC)를 직접 제작해보았다. UPawnSensingComponent에서 UAIPerceptionComponent로 변경UPawnSensingComponent: 간단한 AI 감지 시스템에 필요한 경우 사용된다.UAIPerceptionComponent: PawnSensingComponent에서 제공하는 시각, 청각 감지 기능뿐만 아니라 손상 등 다양한 감지 기능을 지원한다.  이렇기에 이후에 더 확장성이 높은 UAIPerceptionComponent로 바꾸었다.AIPerceptionComponent = CreateDefaultSubobject(TEXT("AI Perception"));AIC의 생성자에 다음과 같이 추가했다. OnPossessht.. 2024. 10. 7.
Effective C++ 항목 3: const를 자주 사용하자 const 변수const의 가장 큰 장점은 의미적인 제약을 소스 코드 수준에서 붙인다는 점과 컴파일러가 이 제약을 지켜준다는 것이다.데이터 멤버는 포인터 자체를 상수로, 혹인 포인터가 가리키는 데이터를 상수로 지정 가능하다.char c[] = "JJune";char* p = c; //비상수 포인터 & 데이터const char* p = c; //비상수 포인터 & 상수 데이터char* const p = c; //상수 포인터 & 비상수 데이터const char* const p = c; //상수 포인터 & 상수 데이터위를 보면 알겠지만 const가 *보다 왼쪽에 있으면 가르키는 대상(데이터)이 상수이고const가 *보다 오른쪽에 있으면 포인터 자체가 상수가 된다. 위의 말을 추가로 더 설명하자면v.. 2024. 10. 7.
Unreal StaticClass() StaticClass()이 함수는 클래스의 UClass 객체를 반환하는 정적 메서드로 주어진 클래스에 대한 정보를 저장한다.특정 클래스의 인스턴스를 생성할 때 또는 해당 클래스와 관련된 작업을 수행할 때 유용하게 사용된다.더보기정적 메서드: 객체 인스턴스와 관련 없이 클래스 자체에 속하는 메서드이다.객체를 생성하지 않고 호출이 가능하며 보통 클래스의 공통 기능이나 유틸리티 기능을 제공하는데 사용된다.더보기UclassUClass는 UE에서 클래스를 정의하고 관리하는 시스템.모든 UObject 파생 클래스(Actor, Component)는 UClass를 통해 인스턴스를 생성하고 조작이 가능하다. 또한 클래스의 구조, 속성, 메서드, 가상 함수, 에디터 노출 등 다양한 메타 정보를 저장한다. StaticCla.. 2024. 10. 3.