트러블슈팅 : 애플리케이션 제어 정책에서 이 파일을 차단했습니다
Windows 차단 프로그램 확인 절차
- **앱 출처 확인:**항상 공식 웹사이트나 신뢰할 수 있는 플랫폼에서 소프트웨어를 다운로드하세요. 의심스러운 링크, 토렌트, 이메일 첨부파일의 파일은 피하세요.
- **게시자 확인:**차단된 파일을 마우스 오른쪽 버튼으로 클릭하고 “속성” → “디지털 서명”으로 이동 후 게시자를 확인하세요. 신뢰되는 게시자는 안전하지 않은 소프트웨어 실행 위험을 줄여줍니다.
- **디지털 서명 확인:**앱의 인증서가 유효하며 만료되지 않았는지 확인하세요. 잘못된 서명이나 서명이 없는 경우 Windows가 프로그램을 차단하는 일반적인 원인입니다. 참고: 스팀에 출시하려면 dll에 디지털 서명이 필요함 → 연 100만원돈 서명을 사서 추가해야 함
Asset Manager 세팅

PrimaryAssetId 구성
- AssetTag와 AssetName
내가 알기로 언리얼 primaryassetid는 assettag와 assetname 두 개로 이뤄진다고 알고 있어. tag에 TEXT()도 아니고 그냥 원시 문자열을 넘겨줘도 되는거야?
네, 원시 문자열 리터럴을 직접 넘겨도 됩니다. 이유를 단계별로 설명하겠습니다:
FPrimaryAssetId 생성자 분석
FPrimaryAssetId의 생성자는 다음과 같이 정의되어 있습니다:
FPrimaryAssetId(FPrimaryAssetType InAssetType, FName InAssetName)여기서 FPrimaryAssetType은 내부적으로 FName을 감싸는 구조체입니다.
암시적 변환 (Implicit Conversion)
FName은 다음과 같은 생성자들을 제공합니다:
FName(const WIDECHAR* Name); // 와이드 문자열FName(const ANSICHAR* Name); // ANSI 문자열따라서 "ABItemData"와 같은 문자열 리터럴은:
- 컴파일 타임에
const char*타입 - FName 생성자가 암시적으로 호출됨
- FPrimaryAssetType도 FName으로부터 암시적 변환
TEXT() 매크로는 언제 필요한가?
TEXT() 매크로는 다음 경우에 필요합니다:
// ❌ 런타임 문자열 연산이 필요한 경우FString DynamicName = FString::Printf(TEXT("Weapon_%d"), Index);// ✅ FName은 내부적으로 유니코드 처리를 하므로 리터럴은 괜찮음FName SimpleName = "ABItemData"; // 자동으로 적절히 변환됨// platform.h// If we don't have a platform-specific define for the TEXT macro, define it now.#if !defined(TEXT) && !UE_BUILD_DOCS #if PLATFORM_TCHAR_IS_UTF8CHAR #define TEXT_PASTE(x) UTF8TEXT(x) #else #define TEXT_PASTE(x) WIDETEXT(x) #endif #define TEXT(x) TEXT_PASTE(x)#endif10. 게임 데이터 관리
강의 목표
- 게임 데이터를 관리하는 싱글톤 객체 등록
- 엑셀 데이터 및 ini 파일 활용해 게임데이터 관리
- 액터 초기화를 위한 lazy loading 이해와 활용
FABCharacterStat operator+(const FABCharacterStat& Other) { const float* const ThisPtr = reinterpret_cast<const float* const>(this); const float* const OtherPtr = reinterpret_cast<const float* const>(&Other); FABCharacterStat Result; float* ResultPtr = reinterpret_cast<float*>(&Result); const int32 StatNum = sizeof(FABCharacterStat) / sizeof(float); for (int32 Idx = 0; Idx < StatNum; ++Idx) { ResultPtr[Idx] = ThisPtr[Idx] + OtherPtr[Idx]; } return Result;}구조체 덧셈 연산자 오버로딩
- 장점:
- 유지보수 비용 감소: 멤버 추가/삭제 관계없이 자동반영
- 단점:
- 취약성
- float 이외 타입
- 멤버 순서 변경
- 가상함수 포함(vtable 생기면 메모리 크기 변함)
- 컴파일러 안정성 포기
- 취약성
- 대안:
- 명시적으로 더해주기
- 배열 기반 구조로 변경
for (int i = 0; i < STAT_MAX; ++i)
Result.Values[i] = Values[i] + Other.Values[i];
- `MemCpy()`