묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
블루프린트(에디터)에서 지정한 ComboActionData가 null이 되는이유
안녕하세요AI시스템 구현도중 ComboActionData를 불러올수 없는 문제가 생겨서 질문 드립니다.우선 이것저것 바꿔서 실습 해보는 중이라 강의 코드랑 다른부분이 있을순 있습니다만 베이스는 강의코드입니다...void ATLStageGimmick::OnOpponentSpawn() { const FTransform SpawnTransform(GetActorLocation() + FVector::UpVector * 88.0f); ATLCharacterNonPlayer* OpponentCharacter = GetWorld()->SpawnActorDeferred<ATLCharacterNonPlayer>(OpponentClass, SpawnTransform); if (OpponentCharacter) { OpponentCharacter->OnDestroyed.AddDynamic(this, &ATLStageGimmick::OnOpponentDestroyed); OpponentCharacter->SetLevel(CurrentStageNum); OpponentCharacter->FinishSpawning(SpawnTransform); } }우선 기믹 코드쪽에서 이렇게 스폰을 해주는데요,(예제랑 같습니다) CharacterNonPlayer를 상속받아 BP_EliteBoss라는 이름으로 블루프린트를 만든뒤 기믹 엑터에 이렇게 설정을 해줬습니다. 그리고 BP_EliteBoss안에 필요한 몽타주와 ComboActionData를 설정해줬는데요 그래서 게임을 실행해보면 정상적으로 스폰도 되고 이동도 합니다. 그런데 정작 공격을 진행하면 ComboActionData가 없다는것 아니겠습니까..? 저는 분명 블루프린트에서 ComboActionData를 넣었는데 말이죠.. 혹시 SpawnActorDeferred하게되면 에디터에서 지정한 에셋들은 사용할 수 없는건가요??? 해결방법을 찾다 안돼서 질문 드립니다...
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
GetAuthGameMode를 통해 IABGameInterface를 캐스팅하려는 문제
현재 ABStageGimmick.cpp에서 빌드 에러가 납니다.void AABStageGimmick::OnOpponentDestroyed(AActor* DestroyedActor) { IABGameInterface* ABGameMode = Cast<IABGameInterface>(GetWorld()->GetAuthGameMode()); // 에러 SetState(EStageState::REWARD);; } 에러 내용은 아래와 같습니다.1>C:\Program Files\Epic Games\UE_5.3\Engine\Source\Runtime\CoreUObject\Public\Templates\Casts.h(85): error C2027: use of undefined type 'AGameModeBase'1>C:\Program Files\Epic Games\UE_5.3\Engine\Source\Runtime\Engine\Classes\Engine\GameInstance.h(29): note: see declaration of 'AGameModeBase'1>C:\UnrealProject\UE5_GameFrameWork\ArenaBattle\Source\ArenaBattle\Gimmick\ABStageGimmick.cpp(288): note: see reference to function template instantiation 'To Cast<IABGameInterface,AGameModeBase>(From )' being compiled1> with1> [1> To=IABGameInterface,1> From=AGameModeBase1> ] 현재 리서치해본 결과 ABGameMode가 어떤 클래스인지 파악 못해서 GameModeBase.h파일을 추가해줘야 한다고 합니다.아니면 UObject로 형변환 한 뒤에 캐스팅해오라고 되어있습니다. void AABStageGimmick::OnOpponentDestroyed(AActor* DestroyedActor) { IABGameInterface* ABGameMode = Cast<IABGameInterface>((UObject *)(GetWorld()->GetAuthGameMode())); if (ABGameMode) { ABGameMode->OnPlayerScoreChanged(CurrentStageNum); if (ABGameMode->IsGameCleared()) { return; } } SetState(EStageState::REWARD);; } 그래서 이렇게 수정하니 해결이 되었는데 혹시 왜 저는 강사님처럼 코드를 작성하면 되지 않는지 아직 이해가 가지 않습니다.알려주시면 감사하겠습니다!
-
미해결이득우의 언리얼 프로그래밍 Part1 - 언리얼 C++의 이해
7강 언리얼 C++ 설계 인터페이스 18:40초 언리얼 인터페이스의 DoLess함수는 UFUNCTION사용 여부
7강 언리얼 C++ 설계 인터페이스 18:40초 언리얼 인터페이스의 DoLess함수는 UFUNCTION매크로를 사용하지 않아도 되나요?
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
FSoftObjectPtr과 TSoftObjectPtr차이점
9강 44분쯤 약참조를 위해 FSoftObjectPtr를 쓰시는데 이전에는 TSoftObjectPtr를 쓰셧던거같아, 구글에 검색해보니 TSoftObjectPtr는 FSoftObjectPtr를 UObject로 랩핑한 ptr이라고 하는데요, 그런데 굳이 이걸 명시적으로 나누어진이유가 있을것이고 교수님께서 사용하신 의도가 있는거같아서 궁금해서 여쭈어봅니다 해당부분에서는 FSoftObjectPtr 대신 TSoftObjectPtr를 사용해도 같은 결과를 내긴했습니다. 교수님께서는 그냥 예시를 위해 사용하신건지 아니면 특별한 이유가 있는건지 궁금합니다.
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
9강 20분쯤에 딜리게이트래퍼 질문있습니다.
StateChangeAction.Add(EStageState::READY, FStageChangedDelegateWrapper(FOnStageChangedDelegate::CreateUObject(this, &AABStageGimmick::SetReady)));이부분을 구조체를 선언해서 사용하는 이유가 궁금합니다. StateChangeAction.Add(EStageState::READY, FOnStageChangedDelegate::CreateUObject(this, &AABStageGimmick::SetReady)); 이런식으로 Value를 딜리게이트 자체를 넘겨줄수있는데,굳이 저렇게 구조체를 만드는 이유가 뭔가해서요, 예측하건데 파라미터도 동시에 넣어줄수있도록 하기위함인가요 아니면 따른 이유가 있는건가요 ?
-
미해결이득우의 언리얼 프로그래밍 Part1 - 언리얼 C++의 이해
어떠한 가상함수를 오버라이딩 할 때, 기존의 함수에 UFUNCTION() 매크로를 지정해줬다면 하위클래스에선 지정할 필요가 없나요?
현재 리플렉션 시스템 강의를 듣고 있습니다.작성하신 코드를 보니 하위클래스에선 오버라이딩된 가상함수에는 UFUNCTION 매크로를 작성하지 않으시던데, 부모 클래스에서 매크로를 작성해놓았다면 자식 클래스에선 하지 않아도 되나요? 만약 부모 클래스에서도 UFUNCTION()을 작성하고 자식 클래스에서도 UFUNCTION() 매크로를 작성하게 되면, 오류가 발생할 수도 있나요? 아니면 굳이 두 번 작성할 필요가 없기 때문인가요?
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
점프 공격 시 캡슐 위치 질문입니다.
루트 모션 관련해서 알아보다가 실습 마지막 콤보 모션이 생각나서 확인해보니, 점프했다가 찍는데 캡슐 콜리젼 위치는 변하지 않는 것을 확인했습니다. 애니메이션 시퀀스에서 루트모션을 활성화 시키고 해봐도 더 이상해지는 듯하여 질문드렸습니다...캡슐 콜리전이 애니메이션을 따라가게 하려면, 시퀀스 에셋에서 루트모션 활성화하는 것과 애니메이션 블루프린트에서 루트 모션 모드를 활성화하는 것 말고 다른게 있을까요???
-
미해결[입문자를 위한 UE5] Part1. 언리얼 엔진 블루프린트
섹션2 흐름제어 연습문제: Min,Max,Clamp 부분 질문
여기서 처음에 연습문제로Hp를 100으로 두고 MaxHp를 150으로 두었을때1번 키 입력시 데미지 10을 입게하고2번 키 입력시 체력 20을 회복하게 하는 기능을 만드는 연습문제였는데 제가 좀 더 추가해서현재 체력을 확인하는 기능이나0이하로 떨어졌을시 데미지도 더이상 입을수없고 회복도 불가능하게 하거나최대체력이면 최대체력이라서 회복이 불가능하다라는 문구가 나온다거나하는식의 몇가지 응용아닌 응용해서 좀 더 살을 붙여서 풀고있었는데 의문이 드는 버그? 같은게 있어서이게 어째서 일어나는가 싶어서 질문을 드립니다 [현재 HP 확인 노드]키보드 3을 누를 시 HP를 카운트하여 알려준다. [데미지 받는 노드]키보드 1을 누를 시 HP가 0보다 작을 경우 당신은 죽었습니다 라는 문구가 나온다.키보드 1을 누를 시 HP에서 데미지를 마이너스한 HP를 카운트하여 알려준다. [체력회복하는 노드1]키보드 2를 누를시 HP가 0보다 작을 경우 이미 사망하여 회복할 수 없습니다 라는 문구가 나온다.키보드 2를 누를시 HP가 0보다 크고 HP가 MaxHP보다 크거나 같을경우 이미 최대 체력입니다 라는 문구가 나온다.키보드 2를 누를시 HP가 0보다 크고 HP가 MaxHP보다 작은데 HP에 Heal(20)이 되는 수치만큼 더한 HP가 MaxHP보다 작을 경우 회복된 이후의 HP를 카운트하여 알려준다. [체력회복하는 노드2]키보드 2를 누를시 HP가 0보다 크고 HP가 MaxHP보다 작은데 HP에 Heal(20)이 되는 수치만큼 더한 HP가 MaxHP보다 클 경우 HP를 MaxHP로 세팅하고 최대 체력으로 회복하였습니다라는 문구와 함께 최대HP를 카운트하여 알려준다. 여기서체력확인이랑 데미지는 문제없었는데체력을 회복할 때다른곳에서는 문제가 전혀없었는데체력이 120일때 회복을 하면 현재체력 120+ 체력회복 20으로 체력이 140이 되어야하는데140을 건너뛰고 150으로 가더라구요...데미지 입을때는 140 130 120 110 100 90 80 쭉쭉 건너뛰지않고 잘 내려가고회복할때도 40일때 회복하면 60, 60일때 회복하면 80, 100 120 잘 가다가120일때만 30이 회복되는게 왜그런가 궁금합니다!
-
미해결이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
안녕하세요, 혹시 GameAbilitySystem 강의는 시기가 언제쯤 업로드 되는지 여쭤봅니다
제목과 같습니다.
-
미해결이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
Insight를 사용하려고 하는데 오버플로우가 납니다..
- Live중인 것을 더블클릭하면 - 이 창이 뜨고 가만히 멈춥니다.(클릭도 안되고 닫기도 안됩니다) 그러다가 크래쉬가 납니다. 에러 내용입니다.. (스택오버플로우 입니다..)UnrealInsights_Slate!_chkstk()UnrealInsights_Slate!SScrollBar::Construct()UnrealInsights_Slate!STableViewBase::ConstructChildren()UnrealInsights_TraceInsights!SListView<TSharedPtr<SPacketContentView::FAggregationModeItem,1> >::Construct()UnrealInsights_TraceInsights!SComboBox<TSharedPtr<SPacketContentView::FAggregationModeItem,1> >::Construct()UnrealInsights_TraceInsights!TSlateDecl<SComboBox<TSharedPtr<SPacketContentView::FAggregationModeItem,1> >,RequiredArgs::T0RequiredArgs>::operator<<=()UnrealInsights_TraceInsights!SPacketContentView::CreateAggregationModeComboBox()UnrealInsights_TraceInsights!SPacketContentView::Construct()UnrealInsights_TraceInsights!TSlateDecl<SPacketContentView,RequiredArgs::T1RequiredArgs<TSharedRef<SNetworkingProfilerWindow,1> && __ptr64> >::operator<<=()UnrealInsights_TraceInsights!SNetworkingProfilerWindow::SpawnTab_PacketContentView()UnrealInsights_TraceInsights!TBaseRawMethodDelegateInstance<0,SNetworkingProfilerWindow,TSharedRef<SDockTab,1> cdecl(FSpawnTabArgs const & ptr64),FDefaultDelegateUserPolicy>::Execute()UnrealInsights_Slate!FTabManager::SpawnTab()UnrealInsights_Slate!FTabManager::RestoreArea_Helper()UnrealInsights_Slate!FTabManager::RestoreSplitterContent()UnrealInsights_Slate!FTabManager::RestoreArea_Helper()UnrealInsights_Slate!FTabManager::RestoreSplitterContent()UnrealInsights_Slate!FTabManager::RestoreArea_Helper()UnrealInsights_Slate!FTabManager::RestoreSplitterContent()UnrealInsights_Slate!FTabManager::RestoreArea_Helper()UnrealInsights_Slate!FTabManager::RestoreArea()UnrealInsights_Slate!FTabManager::RestoreFrom()UnrealInsights_TraceInsights!Insights::SMajorTabWindow::Construct()UnrealInsights_TraceInsights!SNetworkingProfilerWindow::Construct()UnrealInsights_TraceInsights!TSlateDecl<SNetworkingProfilerWindow,RequiredArgs::T2RequiredArgs<TSharedRef<SDockTab,1> const & ptr64,TSharedPtr<SWindow,1> const & ptr64> >::operator<<=()UnrealInsights_TraceInsights!FNetworkingProfilerManager::SpawnTab()UnrealInsights_TraceInsights!TBaseRawMethodDelegateInstance<0,FNetworkingProfilerManager,TSharedRef<SDockTab,1> cdecl(FSpawnTabArgs const & ptr64),FDefaultDelegateUserPolicy>::Execute()UnrealInsights_Slate!FTabManager::SpawnTab()UnrealInsights_Slate!FTabManager::RestoreArea_Helper()UnrealInsights_Slate!FTabManager::RestoreSplitterContent()UnrealInsights_Slate!FTabManager::RestoreArea_Helper()UnrealInsights_Slate!FTabManager::RestoreArea()UnrealInsights_Slate!FTabManager::RestoreFrom()UnrealInsights_TraceInsights!Insights::SMajorTabWindow::Construct()UnrealInsights_TraceInsights!SNetworkingProfilerWindow::Construct()UnrealInsights_TraceInsights!TSlateDecl<SNetworkingProfilerWindow,RequiredArgs::T2RequiredArgs<TSharedRef<SDockTab,1> const & ptr64,TSharedPtr<SWindow,1> const & ptr64> >::operator<<=()UnrealInsights_TraceInsights!FNetworkingProfilerManager::SpawnTab()UnrealInsights_TraceInsights!TBaseRawMethodDelegateInstance<0,FNetworkingProfilerManager,TSharedRef<SDockTab,1> cdecl(FSpawnTabArgs const & ptr64),FDefaultDelegateUserPolicy>::Execute()UnrealInsights_Slate!FTabManager::SpawnTab()UnrealInsights_Slate!FTabManager::RestoreArea_Helper()UnrealInsights_Slate!FTabManager::RestoreSplitterContent()UnrealInsights_Slate!FTabManager::RestoreArea_Helper()UnrealInsights_Slate!FTabManager::RestoreArea()UnrealInsights_Slate!FTabManager::RestoreFrom() 실행한 배치파일 인데요.. -NetTrace=1 이부분을 지우면 실행시켜도 에러는 뜨지 않지만 , Networking Insights 창이 안뜹니다... 또, 이것 때문인지는 모르겠지만, Connect버튼을 누르면 Error 메서지가 하나 뜹니다..LogTrace: Error: ReadError While reading remote command. Read returned 0:' 또 신기한 것은 처음에 실행을 했을 때는 Networking Insights가 잘 실행이 됐었습니다.. 2번째부터 실행하려니까 스택오버플로우가 나면서 창이 닫힙니다 .. ㅠㅠ
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
16:29 uint8*을 FABCharacterStat*로 다시 형변환 하는이유
항상 친절한 답변 감사합니다. 왜 DataTable의 Value는 uint8*를 쓰게 됐을까가 궁금합니다. TArray<uint8*> ValueArray; DataTable->GetRowMap().GenerateValueArray(ValueArray);GenerateValueArray함수로 데이터 테이블의 모든 벨류를 복사 할때 uint8*형식으로 복사를 진행한후 다시 FABCharacterStat*으로 형변환 하는데요 템플릿으로 FABCharacterStat을 받으면 형변환하지 않고 편하게 사용할 수 있을거 같은데 말이죠.. GPT의 답변인데 이게 맞을까요?DataTable의 각 셀에 저장되는 값은 FString이 아니라 uint8* (unsigned 8-bit integer pointer)로 저장될 때가 있습니다. 이는 다양한 데이터 형식을 다루기 위한 유연성을 제공합니다. uint8*는 메모리의 원시 데이터를 가리키는 포인터로, 이를 사용하여 다양한 데이터 형식을 저장할 수 있습니다. 예를 들어, DataTable에서는 문자열, 숫자, 구조체 등 다양한 데이터를 저장할 수 있습니다. uint8*는 이러한 데이터 형식을 표현하는 데 사용됩니다. 그리고 데이터를 사용할 때는 필요에 따라 해당 데이터 형식으로 변환하여 사용할 수 있습니다.따라서 DataTable이 uint8*를 사용하는 이유는 데이터의 다양성과 유연성을 제공하기 위함이며, 이를 통해 사용자가 필요에 따라 다양한 데이터 형식을 DataTable에 저장하고 활용할 수 있습니다.
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
04:55 구조체 operator+ 부분 확인 질문
코드를 보면 포인터를 이동시켜 각각 더해주는것으로 확인이 되는데요. 이렇게 되려면 구조체가 직렬화 되어야 할거같은데 GENERATED_BODY() 매크로를 선언했기때문에 구조체가 직렬화 돼어서 가능한것이 맞을까요??
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
컴파일 오류 질문드립니다.
1강 18분 경부터 동영상 따라 컴파일하는데 아래와 같은 오류가 나타나며 진행되지 않습니다.. h, cpp 파일 다 초기화하거나 심지어 삭제해도 똑같은 오류가 발생합니다. First Action json written to 'C:\Users\park\AppData\Local\Temp\UnrealBuildTool\319625c3\UnrealBuildTool\77818478.json' Second Action json written to 'C:\Users\park\AppData\Local\Temp\UnrealBuildTool\319625c3\UnrealBuildTool\1429F030.json' Total execution time: 7.67 seconds Action graph is invalid; unable to continue. See log for additional details.
-
미해결이득우의 언리얼 프로그래밍 Part1 - 언리얼 C++의 이해
UEnum 포인터 값을 어떻게 찾는건지 궁금합니다.
언리얼 리플렉션 시스템에 의해 UEnum 포인터 값을 찾을 수 있기 때문에 UEnum값의 메타 데이터 정보를 가져오기 위해 강의 예제에서는 FindObject<UEnum>(nullptr, TEXT("/Script/프로젝트 이름.ECardType"));이렇게 절대경로를 입력하여 Object를 찾는 것으로 이해했습니다.하지만 저는 Card 클래스를 플러그인 모듈로 따로 빼서 한번 진행해봤는데 저 경로로는 UEnum값을 찾을 수가 없던데 이런 경우에는 어떻게 해야 하는지 궁금합니다.
-
해결됨이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
언리얼 데디케이트 서버와 리슨서버 호환성에 대한 질문입니다!
안녕하세요 교수님part 1, part 2를 모두 수강하고 너무 도움이 많이 되어 part 3까지 듣고 있는 클라이언트 지망생입니다~강의를 들으니, 처음 게임을 개발 할 때, 서버를 염두해 두지 않고 개발을 하면 이후에 코드를 수정하는데 많은 시간이 걸리는 것을 이해를 했습니다.그렇다면 리슨서버로 개발을 진행하고, 이후에 데디케이트 서버로 변경을 하려고 하면 이 또한 많은 코드 수정이 필요한가요?정확히 궁금한 것은, 언리얼에 리슨서버와 데디케이트 서버의 호환성이 높은지 아니면 완전히 다른 코드를 사용해서 구현해야 하는 것인지 입니다~~
-
해결됨이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
locomotion의 정의가 여러개인건가요??
안녕하세요. 좀 더 깊이 알아보다가 오랜만에 궁금하게 생겨서 질문을 올렸습니다.애니메이션 관련해서 메뉴얼이랑 해외 영상들을 좀 자세히 보다보니 로코모션이이라고 해서 루트 모션/ 포즈 와핑/ 모션 와핑 같은 기술적인게 나오고 플러그인으로 로코모션 라이브러리랑 애니메이션 와핑을 추가해서 사용하는 걸 봤습니다...언리얼 엔진의 로코모션 | 언리얼 엔진 5.3 문서 (unrealengine.com) 강의에서 나온 로코모션이 생각나서 다시 확인해보니 여기서는 대략 요약하면 State Machine중 하나를 로코모션이라고 하고 캐시에 저장하고 다른곳에서 사용한다 인것 같은데요. 캐시에 애니메이션을 저장해서 따로 사용하는 구현 방식도 로코모션이라고 하는 건가요??
-
미해결[입문자를 위한 UE5] Part3. 언리얼 엔진 3D 게임 개발 입문
어느 정도 이동하면 애니메이션은 멈추고 이동만 합니다.
안녕하세요 선생님, 애니메이션 블루프린트 수강 중에 있는데, 제가 무슨 설정을 잘못 건드린 건지 세팅을 안한 건지는 몰라도 처음에는 캐릭터가 방향키 대로 애니메이션 렌더링이 잘 되며 이동을 하는데, 계속해서 3~5초 정도 이동하면 갑자기 아래처럼 애니메이션이 고정된 상태로 이동만 합니다..ㅠㅠ 이동을 멈추고 다시 이동 하면 다시 또 렌더링 잘 되는 상태에서 이동을 하는데, 이 또한 3~5초 정도 이동하면 위와 똑같이 애니메이션이 멈춘 상태로 이동만 합니다.. 마우스 이동하는 방향대로 화면 전환이 되고, 그 방향대로 캐릭터가 바라보는 방향도 잘 이동하는데.. 왜 이동을 계속하면 애니메이션 렌더링이 멈춰버릴까요? ㅠㅠ 찾아보려고 해도 안나와서 문의 드립니당(MoveStart 나 MoveStop 에 해당하는 애니메이션들이 잘 반영되는 것으로 보아 애니메이션블루프린트 설정은 잘 한 거 같기는 한데,, 뭐가 문제인지 모르겠네요.. )
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
헤더를 사용하지 않고 BeginPlay 동작 안하는 문제.
// Fill out your copyright notice in the Description page of Project Settings. #include "Game/ABGameMode.h" #include "ABGameMode.h" //#include "Player/ABPlayerController.h" AABGameMode::AABGameMode() { UE_LOG(LogTemp, Warning, TEXT("inflearn1")); static ConstructorHelpers::FClassFinder<APawn> ThirdPersonClassRef(TEXT("/Game/ThirdPerson/Blueprints/BP_ThirdPersonCharacter.BP_ThirdPersonCharacter_C")); if (ThirdPersonClassRef.Class) { DefaultPawnClass = ThirdPersonClassRef.Class; } static ConstructorHelpers::FClassFinder<APlayerController> PlayerControllerClassRef(TEXT("/Script/ArenaBattle.ABPlayerController")); if (PlayerControllerClassRef.Class != nullptr) { UE_LOG(LogTemp, Warning, TEXT("PlayerControllerClassRef.Class found: %s"), *PlayerControllerClassRef.Class->GetName()); PlayerControllerClass = PlayerControllerClassRef.Class; } else { UE_LOG(LogTemp, Error, TEXT("PlayerControllerClassRef.Class not found.")); } //PlayerControllerClass = AABPlayerController::StaticClass(); } 위 코드를 입력했을 때 실행 결과는 아래와 같습니다.제가 경로를 잘못 넣었다기에는 수업자료를 그대로 복붙도 해보았으며 /Script/CoreUObject.Class'/Script/ArenaBattle.ABPlayerController'위 경로 또한 5초전에 레퍼런스를 복사해 온 경로입니다
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
프로젝트 재실행시 어떤 작업을 해주어야하나요?
프로젝트를 재실행하게 되면 월드세팅에서 GameMode를 바꾸어 설정해주었던 작업들이 모두 풀려버립니다콘텐츠 드로어(브라우저)에 클래스가 나타나지 않는 오류Ctril+Alt+F11을 입력하면 해결될까 싶어 시도했을때는 크래시가 발생하면서 진행할 수 없어집니다.
-
미해결이득우의 언리얼 프로그래밍 Part1 - 언리얼 C++의 이해
플러그인 모듈에 대해서 질문 드립니다.
복습하면서 궁금한 점이 있는데요강의 예제에서는 Person을 GameUtility라는 플러그인 모듈에서 만들어서 주 게임 모듈인 UnrealBuildSystem에서 사용하기 위해 UnrealBuildSystem.Build.cs 파일에 GameUtility모듈을 추가하고 Student.h에서 Person을 상속 받아서 사용하던데모듈에 있는 클래스를 사용하기 위해서는 꼭 저렇게 상속받아서만 사용할 수 있는건가요?예를 들어 지난 강의와 응용해서 저는 GameInstance 클래스를 주 게임 모듈에 만들고 Student를 플러그인 모듈로 만들어서 사용하고 싶은데 이 경우 GameInstance 헤더 파일에 Student 헤더 파일을 추가하고 GameInstance 클래스에서 Student 클래스를 상속받아야만 하는건가요?