개발일지공부아이디어
    • 4월
    • 3월
    • 2월
    • 1월
  • 24

    26. 4. 24.

  • 23

    26. 4. 23.

  • 22

    26. 4. 22.

  • 21

    26. 4. 21.

  • 20

    26. 4. 20.

  • 17

    26. 4. 17.

  • 16

    26. 4. 16.

  • 15

    26. 4. 15.

  • 14

    26. 4. 14.

  • 10

    26. 4. 10.

  • 09

    26. 4. 9.

  • 08

    26. 4. 8.

로딩 중...

2026. 4. 24.

트러블슈팅 : 애플리케이션 제어 정책에서 이 파일을 차단했습니다

Windows 차단 프로그램 확인 절차

  1. **앱 출처 확인:**항상 공식 웹사이트나 신뢰할 수 있는 플랫폼에서 소프트웨어를 다운로드하세요. 의심스러운 링크, 토렌트, 이메일 첨부파일의 파일은 피하세요.
  2. **게시자 확인:**차단된 파일을 마우스 오른쪽 버튼으로 클릭하고 “속성” → “디지털 서명”으로 이동 후 게시자를 확인하세요. 신뢰되는 게시자는 안전하지 않은 소프트웨어 실행 위험을 줄여줍니다.
  3. **디지털 서명 확인:**앱의 인증서가 유효하며 만료되지 않았는지 확인하세요. 잘못된 서명이나 서명이 없는 경우 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"와 같은 문자열 리터럴은:

  1. 컴파일 타임에 const char* 타입
  2. FName 생성자가 암시적으로 호출됨
  3. 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)#endif

10. 게임 데이터 관리

강의 목표

  • 게임 데이터를 관리하는 싱글톤 객체 등록
  • 엑셀 데이터 및 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()`
왼쪽 화살표다음 글이 없습니다.