inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

c++파일의 삭제에 관하여 질문드립니다.

미해결

이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해

안녕하세요. 교수님 파일명 변경에 관하여 질문드리고 싶습니다. Character를 만들때 이름을 MyABCharacter로 잘못지은 바람에, MyABCharacter를 ABCharacter로 수정하고 싶어 visual studio에서 삭제를 했습니다. 그러나 언리얼 에디터의 C++ classes에서는 MyABCharacter가 사라지고 있지 않아 질문드립니다. 어떻게 해야할까요? 추가적으로 이런 상황에서 파일의 이름을 변경하고 싶을때는 어떻게 해야하는지 질문드립니다. 에디터에서 auto로 제공하고 있는 기능이 있는지 궁금합니다.

  • unreal-engine
  • ue-blueprint
  • 언리얼-c++
이경택 댓글 2 좋아요 0 조회수 178

GameFeatureAction_AddInput #1 강의를 수강한 후 궁금한 점이 생겼습니다.

해결됨

[Rookiss University] UE5 Lyra 클론 코딩 (Haker&Liu)

안녕하세요 언제나 좋은 배움의 기회를 제공해주셔서 감사드립니다. 특히 지금 수강하고 있는 Lyra 클론 코딩을 통해 모범적이고 체계적인 언리얼 엔진 코드 구조를 배울 수 있어 너무 기쁩니다. GameFeatureAction_AddInput #1 를 수강한 후에 제 나름대로 엔진 Subsystem을 사용하는 이유를 아래와 같이 정리하였습니다. 혹시 틀린 부분이 있는지 궁금합니다. 첫번째로, GameFeature 플러그인 별로 생성된 GameFeatureSubsystem이 자신의 플러그인의 Action을 활성화하는데 GameFeature 플러그인끼리의 전환이 빈번한 상황에서 이전에 사용한 플러그인이 비활성화되면 해당 플러그인의 SubSystem도 비활성화되고 Action 역시 비활성화된다. 이런 경우에 FGameFeatureActivatingContext는 비활성화된 Action을 참조하게 되므로 문제가 발생한다. 두번째로, FGameFeatureActivatingContext는 플러그인마다 존재하므로 모든 플러그인에 대해 바인딩을 할 수 없으므로 EngineSubsystem의 Context를 사용하는 것이 합리적이다. 위와 같이 정리하였는데 틀린 부분이 있는지 알고 싶습니다. 다시한번 언제나 좋은 배움의 기회를 제공해주셔서 감사합니다.

  • c++
  • unreal-engine
monstro 댓글 1 좋아요 0 조회수 131

ConstructorHelpers에서 찾고자 하는 것이 오브젝트인지, 클래스인지 보는 방법이 있나요??

미해결

이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해

안녕하세요, 생성자도우미에서 경로로 애셋을 찾을 때, 오브젝트인지 클래스인지 구별하는 어떻게 확인하는지 궁금합니다. 임의로 타입정보 같아서, 위 정보를 참조 해 왔는데 Object로 가져와 지는걸 보니 아닌 것 같습니다. 감사합니다.

  • unreal-engine
  • ue-blueprint
  • 언리얼-c++
qnvudch03 댓글 2 좋아요 0 조회수 166

2강 [14:38] 레퍼런스 경로 가져오기 질문드립니다.

미해결

이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해

안녕하세요, 1강에서 ConstructorHelpers로 find class 할 때는, 에셋 경로 위치에서 /Game 전에 있는 경로는 지우고 데이터를 읽어 왔습니다. 이번에 2강에선 find object할 때 는 따로 경로를 수정하지 않으시더라구요. 둘다 인자로 받는것도 TEXT 주소값이고, 컴파일 과정에서는 에러 안나는거보면 엔진이 초기화 되다가 일어나는 문제인데 '/Game' 앞에 있는 저 경로가 ConstructorHelpers에 find object / class를 사용 함에 있어서 어떤 영향을 주고 왜 다르게 써야 하는지 궁금합니다. 감사합니다.

  • unreal-engine
  • ue-blueprint
  • 언리얼-c++
qnvudch03 댓글 2 좋아요 0 조회수 224

강의 내용 문의드립니다.

해결됨

[Rookiss University] UE5 Lyra 클론 코딩 (Haker&Liu)

수강 이제 막 시작했는데요 섹션1부터18까지의 수업과 섹션19는 강사분만 다르고 내용은 같다고 생각하면 될까요?

  • c++
  • unreal-engine
만족한 오징어 댓글 2 좋아요 0 조회수 178

45.26 해시값이라는건 구조체형식으로 TSet을 만들때 필요한건가요?

미해결

이득우의 언리얼 프로그래밍 Part1 - 언리얼 C++의 이해

TSet<FString> AllUniqueNames; for (int32 idx = 0; idx < StudentNum; ++idx) { AllUniqueNames.Emplace(MakeRandomName()); } 이 코드는 빌드해도 따로 해시값을 만들수 없다는 오류가 안떠서그런데 결론을 내보자면 구조체로만든 TSet같이 특정 데이터를 구분하기위한 해시값이 필요한경우가 있고 위의코드처럼 TSet을만들면 값을 1개만 받는거라서 FString자체가 해시값이되서 오류가 안뜨는걸까요?

  • unreal-engine
  • 언리얼-c++
현미녹차 댓글 2 좋아요 0 조회수 136

Coudn't set association for project. Check the file is writeable. 이라는 에러가 뜹니다.

해결됨

이득우의 언리얼 프로그래밍 Part1 - 언리얼 C++의 이해

(윈도우11) 12:33 까지 따라한 상태이며, 모듈까지 삽입한 후 UnrealBuildSystem.uproject 를 실행하였으나 라는 에러가 뜹니다. 제가 옮긴 Binaries->Win64 내부 파일들은 이것이며 .txt에는 로 적혀서 저장되어 있습니다. 혹시 어떤 문제때문에 에러가 뜬지 알수 있을까요?

  • unreal-engine
  • 언리얼-c++
hush park 댓글 1 좋아요 1 조회수 363

언제 public을 쓰고 언제 protected를 써야 하나요?

미해결

이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해

헤더함수에서 public과 protected를 각각 언제 써야하는지 헷갈립니다. 예를 들어 2강에서, ABFountain.h에서는 컴포넌트들을 public으로 선언했고 ABCharacterPlayer.h에서는 컴포넌트들을 protected로 선언했는데 차이가 궁금합니다. 그리고 항상 BeginPlay는 protected로, Tick은 public으로 선언되어 있는데 이 부분도 왜 그런지 궁금합니다.

  • unreal-engine
  • ue-blueprint
  • 언리얼-c++
dbwjd7wkd 댓글 2 좋아요 0 조회수 228

init()에서 LoadStudentObject() 이 함수가 런타임 정적로딩이라고 보면 되나요?

미해결

이득우의 언리얼 프로그래밍 Part1 - 언리얼 C++의 이해

void UMyGameInstance::LoadStudentObject() const 이 함수가 에셋의 로딩전략중 2번째에 해당하는 런타임 로직에서 정적로딩을 하는게맞나요? 21:54 로딩전략의 각각의 차이점이 잘 감이 오질않는데요 런타임로직에서 정적로딩을 한다는것은 에셋 크기가 클수록 부하가 엄청 커지겟지만 작은에셋들을 바로 로딩할때 간편하게 쓰기위함이고 생성자 코드에서 미리 로딩을한다면 프로젝트가 켜지는 속도는 느리겠지만 에셋을 사용할땐 빠르겠고 관리자를 사용해 비동기로딩이라는것은 게임이 진행되는 와중에 당장은 에셋을 쓰진않지만 언젠간 쓸 에셋들을 계속해서 꾸준히 싱글턴클래스에서 로딩을 한다는건가요?

  • unreal-engine
  • 언리얼-c++
현미녹차 댓글 2 좋아요 0 조회수 182

스마트포인터에 관하여 질문이 있습니다.

미해결

이득우의 언리얼 프로그래밍 Part1 - 언리얼 C++의 이해

안녕하세요 교수님. 스마트포인터로 파일읽기를 한 후, close()를 통해 파일을 닫는데 스마트 포인터를 통해서는 자동으로 파일을 닫는 행위는 할 수 없는건지가 궁금해서 질문남깁니다. (포인터 할당 종료만 가능한건지) 감사합니다.

  • unreal-engine
  • 언리얼-c++
이경택 댓글 2 좋아요 0 조회수 147

15:22에서 TopStudent 가 보이지 않는 문제가 있습니다.

해결됨

이득우의 언리얼 프로그래밍 Part1 - 언리얼 C++의 이해

출력로그까지 정상적으로 뜨는데, contents 폴더에서 TopStudent가 보이지 않습니다. TopStudent 가 나타나지 않는 이유가 궁금합니다. 일단 코드를 강의코드와 비교하며 개인적으로 재검토를 하였는데, 제가 다시 놓친 무언가가 있는 것인지, 아니며ㅑㄴ 현재 버전에서는 보이지 않게 된 것인지 궁금합니다. DebugGame Editor로 실행하였으며, 출력로그 및 코드 내용은 다음과 같습니다. (출력로그) LogTemp: 저장할 파일 폴더 : ../../../../../../Users/qkrwo/Documents/Unreal Projects/UnrealSerialization/Saved LogTemp: 저장할 파일 전체 경로 : ../../../../../../Users/qkrwo/Documents/Unreal Projects/UnrealSerialization/Saved/RawData.bin LogTemp: 변경할 파일 전체 경로 : C:/Users/qkrwo/Documents/Unreal Projects/UnrealSerialization/Saved/RawData.bin LogTemp: [RawData] 이름 이득우 순번 16 LogTemp: [ObjectData] 이름 이득우 순번 59 LogTemp: [JsonData] 이름 이득우 순번 59 LogTemp: 패키지가 성공적으로 저장되었습니다. (Student.h) // Fill out your copyright notice in the Description page of Project Settings. #pragma once #include "CoreMinimal.h" #include "UObject/NoExportTypes.h" #include "Student.generated.h" /** * */ UCLASS() class UNREALSERIALIZATION_API UStudent : public UObject { GENERATED_BODY() public: UStudent(); int32 GetOrder() const { return Order; } void SetOrder(int32 InOrder) { Order = InOrder; } const FString& GetName() const { return Name; } void SetName(const FString& InName) { Name = InName; } virtual void Serialize(FArchive& Ar) override; private: UPROPERTY() int32 Order; UPROPERTY() FString Name; }; (Student.cpp) // Fill out your copyright notice in the Description page of Project Settings. #include "Student.h" UStudent::UStudent() { Order = -1; Name = TEXT("홍길동"); } void UStudent::Serialize(FArchive& Ar) { Super::Serialize(Ar); Ar << Name; Ar << Order; } (MyGameInstance.h) // Fill out your copyright notice in the Description page of Project Settings. #pragma once #include "CoreMinimal.h" #include "Engine/GameInstance.h" #include "MyGameInstance.generated.h" struct FStudentData { FStudentData() {} FStudentData(int32 InOrder, const FString& InName) : Order(InOrder), Name(InName) {} friend FArchive& operator<<(FArchive& Ar, FStudentData& InStudentData) { Ar << InStudentData.Order; Ar << InStudentData.Name ; return Ar; } int32 Order = -1; FString Name = TEXT("홍길동"); }; /** * */ UCLASS() class UNREALSERIALIZATION_API UMyGameInstance : public UGameInstance { GENERATED_BODY() public: UMyGameInstance(); virtual void Init() override; void SaveStudentPackage() const; private: static const FString PackageName; static const FString AssetName; UPROPERTY() TObjectPtr<class UStudent> StudentSrc; }; (MyGameInstance.cpp) // Fill out your copyright notice in the Description page of Project Settings. #include "MyGameInstance.h" #include "Student.h" #include "JsonObjectConverter.h" #include "UObject/SavePackage.h" const FString UMyGameInstance::PackageName = TEXT("/Game/Student"); const FString UMyGameInstance::AssetName = TEXT("TopStudent"); void PrintStudentInfo(const UStudent* InStudent, const FString& InTag) { UE_LOG(LogTemp, Log, TEXT("[%s] 이름 %s 순번 %d"), InTag, InStudent->GetName(), InStudent->GetOrder()); } UMyGameInstance::UMyGameInstance() { } void UMyGameInstance::Init() { Super::Init(); FStudentData RawDataSrc(16, TEXT("이득우")); const FString SavedDir = FPaths::Combine(FPlatformMisc::ProjectDir(), TEXT("Saved")); UE_LOG(LogTemp, Log, TEXT("저장할 파일 폴더 : %s"), *SavedDir); { const FString RawDataFileName(TEXT("RawData.bin")); FString RawDataAbsolutePath = FPaths::Combine(*SavedDir, *RawDataFileName); UE_LOG(LogTemp, Log, TEXT("저장할 파일 전체 경로 : %s"), *RawDataAbsolutePath); FPaths::MakeStandardFilename(RawDataAbsolutePath); UE_LOG(LogTemp, Log, TEXT("변경할 파일 전체 경로 : %s"), *RawDataAbsolutePath); FArchive* RawFileWriterAr = IFileManager::Get().CreateFileWriter(*RawDataAbsolutePath); if (nullptr != RawFileWriterAr) { *RawFileWriterAr << RawDataSrc; RawFileWriterAr->Close(); delete RawFileWriterAr; RawFileWriterAr = nullptr; } FStudentData RawDataDest; FArchive* RawFileReaderAr = IFileManager::Get().CreateFileReader(*RawDataAbsolutePath); if (nullptr != RawFileReaderAr) { *RawFileReaderAr << RawDataDest; RawFileReaderAr->Close(); delete RawFileReaderAr; RawFileReaderAr = nullptr; UE_LOG(LogTemp, Log, TEXT("[RawData] 이름 %s 순번 %d"), * RawDataDest.Name , RawDataDest.Order); } } StudentSrc = NewObject<UStudent>(); StudentSrc->SetName(TEXT("이득우")); StudentSrc->SetOrder(59); { const FString ObjectDataFileName(TEXT("ObjectData.bin")); FString ObjectDataAbsolutePath = FPaths::Combine(*SavedDir, *ObjectDataFileName); FPaths::MakeStandardFilename(ObjectDataAbsolutePath); TArray<uint8> BufferArray; FMemoryWriter MemoryWriterAr(BufferArray); StudentSrc->Serialize(MemoryWriterAr); if (TUniquePtr<FArchive> FileWriterAr = TUniquePtr<FArchive>(IFileManager::Get().CreateFileWriter(*ObjectDataAbsolutePath))) { *FileWriterAr << BufferArray; FileWriterAr->Close(); } TArray<uint8> BufferArrayFromFile; if (TUniquePtr<FArchive> FileReaderAr = TUniquePtr<FArchive>(IFileManager::Get().CreateFileReader(*ObjectDataAbsolutePath))) { *FileReaderAr << BufferArrayFromFile; FileReaderAr->Close(); } FMemoryReader MemoryReaderAr(BufferArrayFromFile); UStudent* StudentDest = NewObject<UStudent>(); StudentDest->Serialize(MemoryReaderAr); PrintStudentInfo(StudentDest, TEXT("ObjectData")); } { const FString JsonDataFileName(TEXT("StudentJsonData.txt")); FString JsonDataAbsolutePath = FPaths::Combine(*SavedDir, *JsonDataFileName); FPaths::MakeStandardFilename(JsonDataAbsolutePath); TSharedRef<FJsonObject> JsonObjectSrc = MakeShared<FJsonObject>(); FJsonObjectConverter::UStructToJsonObject(StudentSrc->GetClass(), StudentSrc, JsonObjectSrc); FString JsonOutString; TSharedRef<TJsonWriter<TCHAR>> JsonWriterAr = TJsonWriterFactory<TCHAR>::Create(&JsonOutString); if (FJsonSerializer::Serialize(JsonObjectSrc, JsonWriterAr)) { FFileHelper::SaveStringToFile(JsonOutString, *JsonDataAbsolutePath); } FString JsonInString; FFileHelper::LoadFileToString(JsonInString, *JsonDataAbsolutePath); TSharedRef<TJsonReader<TCHAR>> JsonReaderAr = TJsonReaderFactory<TCHAR>::Create(JsonInString); TSharedPtr<FJsonObject> JsonObjectDest; if (FJsonSerializer::Deserialize(JsonReaderAr, JsonObjectDest)) { UStudent* JsonStudentDest = NewObject<UStudent>(); if (FJsonObjectConverter::JsonObjectToUStruct(JsonObjectDest.ToSharedRef(), JsonStudentDest->GetClass(), JsonStudentDest)) { PrintStudentInfo(JsonStudentDest, TEXT("JsonData")); } } } SaveStudentPackage(); } void UMyGameInstance::SaveStudentPackage() const { UPackage* StudentPackage = CreatePackage(*PackageName); EObjectFlags ObjectFlag = RF_Public | RF_Standalone; UStudent* TopStudent = NewObject<UStudent>(StudentPackage, UStudent::StaticClass(), *AssetName, ObjectFlag); TopStudent->SetName(TEXT("이득우")); TopStudent->SetOrder(36); const int32 NumofSubs = 10; for (int32 ix = 1; ix <= NumofSubs; ++ix) { FString SubObjectName = FString::Printf(TEXT("Student%d"), ix); UStudent* SubStudent = NewObject<UStudent>(TopStudent, UStudent::StaticClass(), *SubObjectName, ObjectFlag); SubStudent->SetName(FString::Printf(TEXT("학생%d"), ix)); SubStudent->SetOrder(ix); } const FString PackageFileName = FPackageName::LongPackageNameToFilename(PackageName, FPackageName::GetAssetPackageExtension()); //UE_LOG(LogTemp, Log, TEXT("PakageFileName : %s"), *PackageFileName); FSavePackageArgs SaveArgs; SaveArgs.TopLevelFlags = ObjectFlag; if (UPackage::SavePackage(StudentPackage, nullptr, *PackageFileName, SaveArgs)) { UE_LOG(LogTemp, Log, TEXT("패키지가 성공적으로 저장되었습니다.")); } } UnrealSerialization.Build.cs 에서 PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "EnhancedInput", "Json", "JsonUtilities" }); 를 정상적으로 삽입하였습니다.

  • unreal-engine
  • 언리얼-c++
hush park 댓글 2 좋아요 1 조회수 260

직렬화 관련하여 궁금한 점이 있습니다.

해결됨

이득우의 언리얼 프로그래밍 Part1 - 언리얼 C++의 이해

22:43 부분에서, 제가 실수로 void UStudent::Serialize(FArchive& Ar) { Super::Serialize(Ar); Ar << Name; } 처럼 Ar<<Order; 를 적지 않은 상태에서 31:19 부분까지 진행을 하였고, 출력 결과가 놀랍게도 "[ObjectData] 이름 이득우 순번 59" 가 출력이 되었습니다. 분명 StudentSrc->Serialize(MemoryWriterAr); 에서 Ar << Order; 가 누락되어서 직렬화를 진행하지 못했고, BufferArray 에는 59 라는 Order가 저장되지 않았을 것일텐데, 따라서 결과적으로 print함수를 통해 순번이 59가 아닌 생성자에서 설정한 -1로 떠야 한다고 생각하지만 이상하게도 59라는 숫자가 출력됩니다. 이 말은 Ar<<Order; 를 누락했더라도 내부적으로 알아서 직렬화를 진행했다고 볼수밖에 없는 것일까요...? 만약 그렇다면 어떤 코드부분에서 StudentSrc의 Order를 MemoryWriterAr가 소유한 BufferArray 에 저장하게 되는 것인지 궁금합니다. 다음은 저의 코드입니다. (제가 실수하지 않았다면, 사실상 Student.cpp ->void UStudent::Serialize(FArchive& Ar) 함수에서 Ar << Order; 가 누락된 것을 제외하고 전부 동일합니다.) //MyGameInstance.h // Fill out your copyright notice in the Description page of Project Settings. #pragma once #include "CoreMinimal.h" #include "Engine/GameInstance.h" #include "MyGameInstance.generated.h" struct FStudentData { FStudentData() {} FStudentData(int32 InOrder, const FString& InName) : Order(InOrder), Name(InName) {} friend FArchive& operator<<(FArchive& Ar, FStudentData& InStudentData) { Ar << InStudentData.Order; Ar << InStudentData.Name ; return Ar; } int32 Order = -1; FString Name = TEXT("홍길동"); }; /** * */ UCLASS() class UNREALSERIALIZATION_API UMyGameInstance : public UGameInstance { GENERATED_BODY() public: UMyGameInstance(); virtual void Init() override; private: UPROPERTY() TObjectPtr<class UStudent> StudentSrc; }; //MyGameInstance.cpp // Fill out your copyright notice in the Description page of Project Settings. #include "MyGameInstance.h" #include "Student.h" void PrintStudentInfo(const UStudent* InStudent, const FString& InTag) { UE_LOG(LogTemp, Log, TEXT("[%s] 이름 %s 순번 %d"), InTag, InStudent->GetName(), InStudent->GetOrder()); } UMyGameInstance::UMyGameInstance() { } void UMyGameInstance::Init() { Super::Init(); FStudentData RawDataSrc(16, TEXT("이득우")); const FString SavedDir = FPaths::Combine(FPlatformMisc::ProjectDir(), TEXT("Saved")); UE_LOG(LogTemp, Log, TEXT("저장할 파일 폴더 : %s"), *SavedDir); { const FString RawDataFileName(TEXT("RawData.bin")); FString RawDataAbsolutePath = FPaths::Combine(*SavedDir, *RawDataFileName); UE_LOG(LogTemp, Log, TEXT("저장할 파일 전체 경로 : %s"), *RawDataAbsolutePath); FPaths::MakeStandardFilename(RawDataAbsolutePath); UE_LOG(LogTemp, Log, TEXT("변경된 파일 전체 경로 : %s"), *RawDataAbsolutePath); FArchive* RawFileWriterAr = IFileManager::Get().CreateFileWriter(*RawDataAbsolutePath); if (nullptr != RawFileWriterAr) { *RawFileWriterAr << RawDataSrc; /*RawDataSrc << RawFileWriterAr; / RawFileWriterAr->Close(); delete RawFileWriterAr; RawFileWriterAr = nullptr; } FStudentData RawDataDest; FArchive* RawFileReaderAr = IFileManager::Get().CreateFileReader(*RawDataAbsolutePath); if (nullptr != RawFileReaderAr) { *RawFileReaderAr << RawDataDest; RawFileReaderAr->Close(); delete RawFileReaderAr; RawFileReaderAr = nullptr; UE_LOG(LogTemp, Log, TEXT("[RawData] 이름 %s 순번 %d"), * RawDataDest.Name , RawDataDest.Order); } } StudentSrc = NewObject<UStudent>(); StudentSrc->SetName(TEXT("이득우")); StudentSrc->SetOrder(59); { const FString ObjectDataFileName(TEXT("ObjectData.bin")); FString ObjectDataAbsolutePath = FPaths::Combine(*SavedDir, *ObjectDataFileName); FPaths::MakeStandardFilename(ObjectDataAbsolutePath); TArray<uint8> BufferArray; FMemoryWriter MemoryWriterAr(BufferArray); StudentSrc->Serialize(MemoryWriterAr); if (TUniquePtr<FArchive> FileWriterAr = TUniquePtr<FArchive>(IFileManager::Get().CreateFileWriter(*ObjectDataAbsolutePath))) { *FileWriterAr << BufferArray; FileWriterAr->Close(); } TArray<uint8> BufferArrayFromFile; if (TUniquePtr<FArchive> FileReaderAr = TUniquePtr<FArchive>(IFileManager::Get().CreateFileReader(*ObjectDataAbsolutePath))) { *FileReaderAr << BufferArrayFromFile; FileReaderAr->Close(); } FMemoryReader MemoryReaderAr(BufferArrayFromFile); UStudent* StudentDest = NewObject<UStudent>(); StudentDest->Serialize(MemoryReaderAr); PrintStudentInfo(StudentDest, TEXT("ObjectData")); } } //Student.h // Fill out your copyright notice in the Description page of Project Settings. #pragma once #include "CoreMinimal.h" #include "UObject/NoExportTypes.h" #include "Student.generated.h" /** * */ UCLASS() class UNREALSERIALIZATION_API UStudent : public UObject { GENERATED_BODY() public: UStudent(); int32 GetOrder() const { return Order; } void SetOrder(int32 InOrder) { Order = InOrder; } const FString& GetName() const { return Name; } void SetName(const FString& InName) { Name = InName; } virtual void Serialize(FArchive& Ar) override; private: UPROPERTY() int32 Order; UPROPERTY() FString Name; }; //Student.cpp // Fill out your copyright notice in the Description page of Project Settings. #include "Student.h" UStudent::UStudent() { Order = -1; Name = TEXT("홍길동"); } void UStudent::Serialize(FArchive& Ar) { Super::Serialize(Ar); Ar << Name; }

  • unreal-engine
  • 언리얼-c++
hush park 댓글 2 좋아요 0 조회수 183

Int32Array += {2, 4, 6, 8, 10}; 문법이 궁금합니다.

미해결

이득우의 언리얼 프로그래밍 Part1 - 언리얼 C++의 이해

이걸 풀어서쓰면 int32Array = int32Array + {2,4,6,8,10}; 이거인데 문법오류가 나더라구요 +=는 어떻게 가능한건가요? TArray는 배열끼리의 +연산자가 오버로딩되어있나요?

  • unreal-engine
  • 언리얼-c++
현미녹차 댓글 2 좋아요 0 조회수 129

한글 코드 저장에 관하여 질문드립니다.

미해결

이득우의 언리얼 프로그래밍 Part1 - 언리얼 C++의 이해

한글관련 코드를 작성하실때마다 UTF8로 인코딩 형식을 바꿔서 저장해주고 계신데, 매번 바꾸는게 번거로워 혹시 기본 저장세팅을 UTF8로 하면 문제가 생기나요? 기본 인코딩을 UTF8로 하면 다른 단점이 있는지 기본 인코딩을 UTF8로 바꾸는하는 것이 불가능한지? 에 관하여 질문드리고 싶습니다. 강의 잘 보고 있습니다. 감사합니다.

  • unreal-engine
  • 언리얼-c++
이경택 댓글 2 좋아요 0 조회수 171

빌드오류가 계속 나옵니다

미해결

이득우의 언리얼 프로그래밍 Part4 - 게임플레이 어빌리티 시스템

vs 도구를 추가로 설치하거나 generate를 계속해주거나 일반 프로젝트를 생성하고 source랑 contents를 넣은 뒤 generate를 해줘도 동일합니다 강의자료로 해도 깃헙에서 받아도 전부 그렇습니다

  • unreal-engine
  • ue-blueprint
  • unreal-engine5
  • 언리얼-c++
  • gas
김윤식 댓글 2 좋아요 0 조회수 430

21:07 부분에서 NonPropStudent 인수타입 및 기타 질문입니다.

미해결

이득우의 언리얼 프로그래밍 Part1 - 언리얼 C++의 이해

1) 21:07 부분의 CheckObjectIsNull( NonPropStudent, TEXT("NonPropStdudent")); 부분에서, NonPropStudent 에 const UObject* 로의 적절한 변환 함수가 없습니다. 라는 에러가 뜹니다. 혹시 업데이트하면서 바뀐 것일까요? (const UObject*) 로 강제형변환을 하면 문제가 없어지긴 하는데, 과연 이것이 일반적인 방법이 된 것인지 궁금합니다. 또한 2) PropStudent 에서 심각도 코드 설명 프로젝트 파일 줄 비표시 오류(Suppression) 상태 세부 정보 오류 UHT001 Unable to find 'class' with name 'Student' 라는 에러가 뜨면서 디버깅이 실패합니다. 이것도 업데이트가 되면서 바뀐건지 모르겠습니다만, 혹시 이젠 MyGameInstance.h 에도 Student.h 를 삽입해야만 하도록 변경된것일까요...?

  • unreal-engine
  • 언리얼-c++
댓글 3 좋아요 0 조회수 210

자꾸 자식생성자에서 부모 프로퍼티의 Name에 접근하면 오류가납니다.

미해결

이득우의 언리얼 프로그래밍 Part1 - 언리얼 C++의 이해

특정 자식생성자에서 부모프로퍼티 Name에 접근하면 error C2001 : newline in constant error C2143 : syntax error : missing ';' before '}' 이라는 에러가 발생하는데요 Name = TEXT(""); 이걸 주석처리하면 문제없긴합니다만 특정 자식에서만 간할적으로 저러니까 매번 프로젝트를 다시생성하거나 그냥 부모생성자에서 초기화하는걸로 수업을 따라가고있습니다 .. 왜 이런 오류가 날까요?

  • unreal-engine
  • 언리얼-c++
현미녹차 댓글 2 좋아요 0 조회수 153

OnChanged.AddUObject이 함수가 BroadCast로 연결되는건가요?

미해결

이득우의 언리얼 프로그래밍 Part1 - 언리얼 C++의 이해

CourseInfo->OnChanged.AddUObject(MyStudent1, &UMyStudent::GetNotification); 인스턴스의 이 코드를 통해서 학생클래스에 있는 멤버함수와 Courseinfo 클래스에 있는 BroadCast랑 묶이는건가요?? Courseinfo 클래스에서 선언된 OnChanged 변수는 델리게이트에 접근하기위함일 뿐인 거같고 결국 AddUObject랑 특정객체의 멤버함수랑 연결만 해놓으면 델리게이트 멤버함수의 어디든 무조건 델리게이트의 BroadCast로만 이어지는건가요? 만약 그렇다면 CourseInfo->OnChanged.BroadCast(MyStudent1, &UMyStudent::GetNotification); 이렇게 쓰면 좀 덜헷갈렸을 거 같네요 ..ㅎ

  • unreal-engine
  • 언리얼-c++
현미녹차 댓글 2 좋아요 0 조회수 185

1:58 플레이스 엑터에서 큐브하나를 끌어다 놓을때 transform에 mobility 설정이 static이면 이후 벽을 움직이는 부분이 작동하지 않습니다.

해결됨

[언리얼 공인 강사 직강] 하루만에 언리얼 엔진5 입문하기

1:58 플레이스 엑터에서 큐브하나를 끌어다 놓을때 transform에 mobility 설정이 static이면 이후 벽을 움직이는 부분이 작동하지 않습니다. movable로 설정해야지 되네요. 저는 기본값이 스태틱으로 되어있어서 분명 똑같이 했는데 왜 안되는지 헤메다가 gpt한테 물어봐서 찾았습니다.

  • unreal-engine
Dodontak 댓글 1 좋아요 1 조회수 271

PlayerController가 생성되지 않는 것 같아요.

미해결

[입문자를 위한 UE5] Part2. 언리얼 엔진 2D 게임 개발 입문

오류가 있는 것 같아 수업자료 다운 받아서 모두 똑같이 연결 했는데도 캐릭터가 움직이지 않고 공격입력만 받아져서 controller의 event begin play에 print text를 찍어봐도 아무것도 출력되지 않네요. 혹시 뭐가 잘못된 건지 짐작이 가시나요? world setting도 이미지 입니다.

  • unreal-engine
  • ue-blueprint
김강연 댓글 2 좋아요 0 조회수 272

인기 태그

인프런 TOP Writers

주간 인기글