묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[입문자를 위한 UE5] Part2. 언리얼 엔진 2D 게임 개발 입문
유니티 MMORPG
유니티는 2D 게임 만들기에 좋다고는 하나 C++이 아닌 C#이기 때문에 데이터 계산하는데 느리지 않나요? 리니지처럼 수백명이 동시에 PK를 해도 문제가 없는 엔진인가요?아니면 서버만 C++로 만들면 되는 건가요?
-
미해결이득우의 언리얼 프로그래밍 Part1 - 언리얼 C++의 이해
TCHAR 부분 빌드 오류 인데 모르겠습니다.
TCHAR로 로그에 Hello Unreal 찍는 3강 내용인데 언리얼엔진도 5.1로 바꿔보았는데도 선생님이랑 코드 똑같이 치고 비주얼스튜디오에서 빌드하면 에러 나오고 언리얼 출력로그에도 당연히 출력이 안됩니다. 무엇이 문제인지 모르겠어요
-
미해결이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
오류질문
LoginId:ec562db7476f7bdf4937b6a64bee3512EpicAccountId:91a6d7e499ba484bb30b7d42f941c5baUnhandled Exception: EXCEPTION_INT_DIVIDE_BY_ZEROUnrealEditor_ArenaBattle!AABCharacterPlayer::UpdateMeshFromPlayerState() [C:\Users\gwp\Documents\Unreal Projects\UE5_Part3\UnrealProgrammingPart3\Source\ArenaBattle\Character\ABCharacterPlayer.cpp:559]UnrealEditor_Engine!APlayerController::OnPossess() [D:\build\++UE5\Sync\Engine\Source\Runtime\Engine\Private\PlayerController.cpp:835]UnrealEditor_ArenaBattle!AABPlayerController::OnPossess() [C:\Users\gwp\Documents\Unreal Projects\UE5_Part3\UnrealProgrammingPart3\Source\ArenaBattle\Player\ABPlayerController.cpp:67]UnrealEditor_Engine!AController::Possess() [D:\build\++UE5\Sync\Engine\Source\Runtime\Engine\Private\Controller.cpp:333]UnrealEditor_Engine!AGameModeBase::FinishRestartPlayer() [D:\build\++UE5\Sync\Engine\Source\Runtime\Engine\Private\GameModeBase.cpp:1343]UnrealEditor_Engine!AGameModeBase::RestartPlayerAtPlayerStart() [D:\build\++UE5\Sync\Engine\Source\Runtime\Engine\Private\GameModeBase.cpp:1287]UnrealEditor_Engine!AGameModeBase::RestartPlayer() [D:\build\++UE5\Sync\Engine\Source\Runtime\Engine\Private\GameModeBase.cpp:1238]UnrealEditor_Engine!AGameMode::HandleMatchHasStarted() [D:\build\++UE5\Sync\Engine\Source\Runtime\Engine\Private\GameMode.cpp:208]UnrealEditor_Engine!AGameMode::SetMatchState() [D:\build\++UE5\Sync\Engine\Source\Runtime\Engine\Private\GameMode.cpp:341]UnrealEditor_Engine!AGameMode::StartMatch() [D:\build\++UE5\Sync\Engine\Source\Runtime\Engine\Private\GameMode.cpp:201]UnrealEditor_ArenaBattle!AABGameMode::StartPlay() [C:\Users\gwp\Documents\Unreal Projects\UE5_Part3\UnrealProgrammingPart3\Source\ArenaBattle\Game\ABGameMode.cpp:114]UnrealEditor_Engine!UWorld::BeginPlay() [D:\build\++UE5\Sync\Engine\Source\Runtime\Engine\Private\World.cpp:4882]UnrealEditor_Engine!UGameInstance::StartPlayInEditorGameInstance() [D:\build\++UE5\Sync\Engine\Source\Runtime\Engine\Private\GameInstance.cpp:547]UnrealEditor_UnrealEd!UEditorEngine::CreateInnerProcessPIEGameInstance() [D:\build\++UE5\Sync\Engine\Source\Editor\UnrealEd\Private\PlayLevel.cpp:3210]UnrealEditor_UnrealEd!UEditorEngine::OnLoginPIEComplete_Deferred() [D:\build\++UE5\Sync\Engine\Source\Editor\UnrealEd\Private\PlayLevel.cpp:1673]UnrealEditor_UnrealEd!UEditorEngine::CreateNewPlayInEditorInstance() [D:\build\++UE5\Sync\Engine\Source\Editor\UnrealEd\Private\PlayLevel.cpp:1936]UnrealEditor_UnrealEd!UEditorEngine::StartPlayInEditorSession() [D:\build\++UE5\Sync\Engine\Source\Editor\UnrealEd\Private\PlayLevel.cpp:2941]UnrealEditor_UnrealEd!UEditorEngine::StartQueuedPlaySessionRequestImpl() [D:\build\++UE5\Sync\Engine\Source\Editor\UnrealEd\Private\PlayLevel.cpp:1250]UnrealEditor_UnrealEd!UEditorEngine::StartQueuedPlaySessionRequest() [D:\build\++UE5\Sync\Engine\Source\Editor\UnrealEd\Private\PlayLevel.cpp:1153]UnrealEditor_UnrealEd!UEditorEngine::Tick() [D:\build\++UE5\Sync\Engine\Source\Editor\UnrealEd\Private\EditorEngine.cpp:1777]UnrealEditor_UnrealEd!UUnrealEdEngine::Tick() [D:\build\++UE5\Sync\Engine\Source\Editor\UnrealEd\Private\UnrealEdEngine.cpp:517]UnrealEditor!FEngineLoop::Tick() [D:\build\++UE5\Sync\Engine\Source\Runtime\Launch\Private\LaunchEngineLoop.cpp:5369]UnrealEditor!GuardedMain() [D:\build\++UE5\Sync\Engine\Source\Runtime\Launch\Private\Launch.cpp:202]UnrealEditor!GuardedMainWrapper() [D:\build\++UE5\Sync\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:107]UnrealEditor!LaunchWindowsStartup() [D:\build\++UE5\Sync\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:244]UnrealEditor!WinMain() [D:\build\++UE5\Sync\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:282]UnrealEditor!__scrt_common_main_seh() [D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288]kernel32ntdll 이 부분에서의 코드가 정상적으로 되어있는거 같은데 이러한 오류가 계속 생겨나고 있습니다
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
OnComponentBeginOverlap 바인드
// Fill out your copyright notice in the Description page of Project Settings. #pragma once #include "CoreMinimal.h" #include "GameFramework/Character.h" #include "ABCharacterNPC.generated.h" UCLASS() class INFINITEABYSS_API AABCharacterNPC : public ACharacter { GENERATED_BODY() public: AABCharacterNPC(); protected: UPROPERTY(VisibleAnywhere, Category = NPC, Meta = (AllowPrivateAccess = "true")) TObjectPtr<class UStaticMeshComponent> NPC; UPROPERTY(VisibleAnywhere, Category = NPC, Meta = (AllowPrivateAccess = "true")) TObjectPtr<class UBoxComponent> NPCTrigger; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Collision") bool bIsOverlapping; UFUNCTION() void OnBoxTriggerBeginOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepHitResult); };헤더 파일에 이렇게 선언 한 다음// Fill out your copyright notice in the Description page of Project Settings. #include "NPC/ABCharacterNPC.h" #include "Components/BoxComponent.h" #include "Components/CapsuleComponent.h" #include "Components/PrimitiveComponent.h" #include "Physics/ABCollision.h" // Sets default values AABCharacterNPC::AABCharacterNPC() { bUseControllerRotationPitch = false; bUseControllerRotationYaw = false; bUseControllerRotationRoll = false; GetCapsuleComponent()->InitCapsuleSize(42.0f, 96.0f); GetCapsuleComponent()->SetCollisionProfileName(TEXT("NPC")); GetMesh()->SetRelativeLocationAndRotation(FVector(0.0f, 0.0f, -95.0f), FRotator(0.0f, 0.0f, 0.0f)); GetMesh()->SetAnimationMode(EAnimationMode::AnimationBlueprint); GetMesh()->SetCollisionProfileName(TEXT("NPCMesh")); static ConstructorHelpers::FObjectFinder<USkeletalMesh> NPCMeshRef(TEXT("/Script/Engine.SkeletalMesh'/Game/ExternAssets/MedievalGirl/Mesh/SK_MedievalGirl.SK_MedievalGirl'")); if (NPCMeshRef.Object) { GetMesh()->SetSkeletalMesh(NPCMeshRef.Object); } static ConstructorHelpers::FClassFinder<UAnimInstance> AnimInstanceClassRef(TEXT("Game/ExternAssets/MedievalGirl/Demo/Animations/ThirdPerson_AnimBP.ThirdPerson_AnimBP_C")); if (AnimInstanceClassRef.Class) { GetMesh()->SetAnimInstanceClass(AnimInstanceClassRef.Class); } NPCTrigger = CreateDefaultSubobject<UBoxComponent>(TEXT("NPCTrigger")); NPCTrigger->SetBoxExtent(FVector(100.0f, 100.0f, 100.0f)); NPCTrigger->SetRelativeLocation(FVector(0.0f, 0.0f, 50.0f)); NPCTrigger->SetupAttachment(GetMesh()); NPCTrigger->SetCollisionProfileName(CPROFILE_ABTRIGGER); NPCTrigger->OnComponentBeginOverlap.AddDynamic(this, &AABCharacterNPC::OnBoxTriggerBeginOverlap); UE_LOG(LogTemp, Log, TEXT("NPC Trigger event binding: %s"), NPCTrigger->OnComponentBeginOverlap.IsBound() ? TEXT("Success") : TEXT("Failed")); bIsOverlapping = false; } void AABCharacterNPC::OnBoxTriggerBeginOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepHitResult) { UE_LOG(LogTemp, Log, TEXT("%s"), *OtherActor->GetName()); bIsOverlapping = true; }Cpp 파일에 OnBoxTriggerBeginOverlap를 바인드 해서 사용할려는데 로그로 바인드는 되었다고 뜨는데 함수안에 있는 로그는 왜 안찍히는 건가요?
-
해결됨이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
게임 싱글톤 클래스
그렇다면 게임 싱글톤 클래스는 클래스들에서 자주 참조할, 자주 사용할 데이터들을 모아놓는 클래스인 것이고, 위치는 데이터 레이어에 위치 하는 것이 일반적인 건가요?
-
미해결[입문자를 위한 UE5] Part5. 언리얼 엔진 VR
해결방법...
이 문제는 언리얼의 문제도 오큘러스와 피코에 문제도 아닌 스팀vr 에 문제였네요... 설정으로 들어가셔서 보시면저 부분이 특정회사 즉 오큘러스 or pico 로 되어있을겁니다.그걸 그림과 같이 스팀vr로 리셋을 해주시면 다 해결 됩니다언리얼 모든 버전에서 다 되네요 이걸 모르셨다는게 의문이긴 한데.... 해결이 되었으니 강사님이 저에게 커피라도 쏘시죠 ㅎㅎㅎㅎㅎ
-
미해결[입문자를 위한 UE5] Part5. 언리얼 엔진 VR
조이스틱 문제점....관해서 한마디를 해 봅니다... 강사님
강의 첫시간부터 안되는데... 강의를 끝까지 따라할수가 없습니다.. 문제점의 해결 방안을 마련해주셨으면 좋겠습니다... 보니까 저 문제가 하루 이틀도 아닌거 같은데.. 이대로 방치하셔서는 안될거 같은데요 강사님 왜 pico sdk에는 5.1 버전은 없는지 궁금합니다.. 언리얼에서 되는 유일한 버전인데 말이죠
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part5: UE5 & IOCP 서버 연동
Proto buf 관련 질문
강의 영상을 보면서 다른 프로젝트에 Proto buf를 적용하고 있습니다. 하지만 이를 연동하는 과정에서 서버에서 수정한 정보가 클라이언트로 넘어가지 않아 확인해보니 ServerPacketHandler.h의 내용 중 아래 내용에서 S1.h를 제가 만든 프로젝트의 이름으로 변경해도 계속 S1으로 바뀌는 것을 발견하였습니다. 서버 쪽에서 S1과 관련된 모든 것을 제 프로젝트의 이름으로 변경하였는데 바꾸어야 할 이외의 것이 있을지 궁금합니다.
-
미해결[입문자를 위한 UE5] Part5. 언리얼 엔진 VR
PICO 4 조이스틱 응답 없는데 이거 어쩌져~~~
기본 이동 부분을 다 따라하고 테스트 해봤는데 조이스틱을 움직여도 캐릭터가 이동하지 않습니다.키보드 W를 눌렀을 때는 정상적으로 이동을 합니다.컨트롤러를 움직이면 캐릭터의 손도 같이 움직이는데조이스틱을 움직였을 때는 아무 반응이 없네요.아... 기기를 잘못 선택을 했나.... 속을 많이 썩일거 같아요 ㅠㅠ
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part5: UE5 & IOCP 서버 연동
캐릭터의 점프 문제
안녕하세요 루키스님. 강의 영상을 보고 third person이 아닌 제가 만든 캐릭터와 애니메이션으로 새 프로젝트를 만들어 보고 있습니다.캐릭터의 이동과 이동 애니메이션까지는 잘 동작하지만 캐릭터의 점프가 되지 않아 고민입니다. 이전에 강의 정상에서는 보낼 상태 정보(움직이고 있는지, 아닌지)를 if (DesiredInput == FVector2D::Zero())로 판단하여 MOVE_STATE_IDLE과 MOVE_STATE_RUN을 구분하였는데 점프는 어떻게 구분해야 할까요?또, 점프 패킷을 받은 클라이언트는 이를 어떻게 처리해야 할까요?
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
블루프린트를 처음부터 만들고 싶은데 어떻게 만들어야 하나요?
안녕하세요. 이득우 교수님교수님 사진에 있는 블루프린트가 없습니다.제 입맛대로 다른걸 추가한 상태라 붙여넣기 방법이 힘들듯합니다. 붙여넣기 방법 말고는 없나요?어떻게 만들어야하나요? Variables도 없어서 추가해서 만들고SetScoreWidget을 했는데교수님과 다르게 나오는데 이렇게 하는게 옳은건가요?
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part5: UE5 & IOCP 서버 연동
Recv 처리 과정 질문
안녕하세요 루키스님. 지금까지 패킷 수신 송신 과정의 흐름을 코드상에서 어떻게 흘러가나 이해해보려고 정리를 해보았는데, 이해가 잘 안되는 부분이 있어서 질문드립니다.일단 제가 이해한 Recv과정은 다음과 같이 이해했습니다.RecvThread에서 계속 일하면서 Packet받은거 큐에 넣는것도 알겠고큐에 있는걸 처리하기 위해 Session이 Handler한테 요청하는 것도 이해했습니다.이해가 안가는건. 그러면 Session의 HandleRecvPacket()을 호출하기 위해서는 GameInstance가 HandleRecvPacket()을 호출해줘야 하는데그러면 GameInstance가 HandleRecvPacket()는 누가 언제 어디서 호출을 하는것인가요???제가 흐름을 잘못 이해하고 있는건가요 ㅠㅠ?제가 이해한걸 그림으로 표현해보았습니다.
-
미해결[입문자를 위한 UE5] Part5. 언리얼 엔진 VR
5.3 버전에 PICO4 VR기기 적용하기
제목 그대로 입니다 플러그인 폴더에 5.3용 파일을 받아서 넣어주었구요... 그런데 Streaming Assistant 가 5.3 부터는 적용이 안되는거 같아서 PICO Connect 에서 하였는데 . Unreal 에서 VR Preview 가 활성화가 안되는데 이걸 어찌해야 할까요???빠른 답변 부탁드려요... 답변이 늦어지는것도 있고 아에 답변이 없는것도 있던데... 부탁드립니다
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part5: UE5 & IOCP 서버 연동
proto 파일에 내용 추가시 인식 오류
안녕하세요 루키스님. 제공해주신 예제 서버 파일 그대로 빌드하고 따라하면서문제없이 잘 진행되었는데, proto파일에 C_SPAWN과 같이 추가로 작업하면 인식을 못합니다. 내용을 살펴보니 Proto:: 에 C_SPAWN이 없다라고 나오는데재빌드, 껏다 켜보기, 다시 예제서버 다운받아보기, 루키스님 최신 강의에서 무료 protobuf강의 따라해보기 다해보았지만'추가'에 대한 인식을 못합니다.기존에 있던거는 잘 되구요... 다음 사진과 같은 상황입니다.추가 한 모습에러 뜨는 부분.. 물론 이 밑으로부터 빨간줄 천지입니다. 원인을 좀 찾아보려고 출력, 입력 라이브러리 다 찾아보았지만 경로 설정은 잘 되어 있습니다. python코드에서 혹시 이것인가 싶은거는 PacketGenerator.py 파일에서 import jinja2를 인식을 못하고 있습니다.혹시 이것때문일까요? 아니면 의심되는 부분이 또 있을까요?아 좀 더 실행해보니 proto파일 인식을 못하는것 뿐만 아니라 Protocol.pb.h과 같은 파일을 지워도 재등록을 안해주는 문제가 발생했습니다. 어떤 부분을 추가로 살펴봐야 할까요? ㅠㅠ 이것때문에 진행을 못하고 있네요..
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
ini 파일을 만들고 싶습니다.
안녕하세요. 이득우 교수님ini 파일을 만들어 볼려는데 Copy Reference 를 해서+NPCMeshes=/Game/ExternAssets/FemaleMilitaryOfficer/Characters/Meshes/SK_Tubaki.SK_Tubaki수정을 해서 만들었습니다. 하지만LoginId:3dc4af0c4070a86513781b8b1c7912c5EpicAccountId:586b13a4063f42dc921a1047434c2edcAssertion failed: (Index >= 0) & (Index < ArrayNum) [File:C:\Program Files\Epic Games\UE_5.3\Engine\Source\Runtime\Core\Public\Containers\Array.h] [Line: 771] Array index out of bounds: 0 from an array of size 0 오류라는 질문과 같은 크래쉬가 났습니다. 어떻게 해결해야 하나요?파일명은 ltInfinieAbyss 로 했습니다.
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
처음에는 하나만 생기지만 2번째 맵부터 너무 많이 생깁니다.
처음에는 NPC가 한명만 생기지만 2번째 맵부터는 여러명의 NPC 생기는 버그가 있습니다 CloseAllGates() 함수에 for문 안에 찍었는데 여러번 찍히는 것을 확인했습니다. 이유가 뭔지 잘 모르겠습니다
-
미해결이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
캐릭터 피격 버그 관련 질문
안녕하세요, 강사님. 금일 마지막 강의까지 무사히 완강하였는데요, 캐릭터 피격과 관련해서 버그가 있는 것 같아 여쭈어보고자 합니다. 버그 현상은 캐릭터가 사망 후에 부활했을 때, 부활한 캐릭터를 다시 공격하면 정상적으로 피격이 되지 않는 문제입니다. 드로우 디버깅을 보면 공격 자체가 정상적인 피격 판정이 이루어지지 않는 것 같습니다.언제는 한 번 사망 후 부활했을 때부터 피격이 안되는 경우가 있고, 언제는 두 번째 사망 후 부활했을 때부터 피격이 안되는 경우가 발생합니다. 혹시나 제가 코드를 따라서 입력하는 과정에서 문제가 있나하여 올려주신 수업 자료 파일을 그대로 실행해서 확인해보았는데 여전히 같은 문제가 있었습니다. 어떠한 이유로 이러한 현상이 발생하는 것일까요?? 동영상 첨부가 어려워 제가 게임을 한 번 진행하는 동안 발생했던 모습을 사진과 과정으로 첨부하겠습니다.1. 서버 플레이어가 클라이언트 플레이어 첫 번 째 킬 2. 이후 서버 플레이어가 부활한 클라이언트 플레이어 공격 시 피격 되지 않음 3. 2번 상황 이후 반대로 클라이언트 플레이어가 서버 플레이어 첫 번째 킬 4. 이후 부활한 서버 플레이어를 클라이언트 플레이어가 두 번째 킬 5. 이후 한 번 더 부활한 서버 플레이어를 클라이언트 플레이어가 공격 시 피격 되지 않음
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
SweepSingleByChannel 채널 별칭 인식안됨
//#define CCHANEL_MHACTION ECC_GameTraceChannel1; 별칭 인식안됨 언리얼 5.3 ,라이더 GetWorld()->SweepSingleByChannel(OutHitResult, Start, End, FQuat::Identity,ECC_GameTraceChannel1, FCollisionShape::MakeSphere(AttackRadius), Params);피격콜라이더 범위 구현중 함수가 예제처럼 동작이 안됩니다 예제는 체널값은 ABCollision.h에서CCHANNEL_ABACTION 별칭을 만들어 사용하지만 제 프로젝트에서 위 함수에 인자값으로 별칭을 사용해서 빌드를 하면 ')' '}' 를 사용하라는 식의 잘못된 함수 사용법의 에러 메세지가 나옵니다별칭을 사용하지않고 인자값에 채널데이터를 직접넣으면 문제는 해결되지만 저만 그런건지 궁금합니다
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
2장 첫번째 강의 관련 질문
클래스 래퍼런스 복사중에 앞에 script코드를 지우는 것이 중요하다고 하셨는데 지우지 않고 동작을 해도 잘 동작이 되는데 지우는 이유가 궁금합니다.또한 복사를한뒤에 nullptr인지 밑의 형식으로 코드를 작성하셨는데 Succeeded 함수를 사용하는것이 더 일반적인지 질문 드리고 싶습니다.
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
FPrimaryAssetId GetPrimaryAssetId() const override 함수
FPrimaryAssetId GetPrimaryAssetId() const override{ return FPrimaryAssetId("CSItemData", GetFName());}이 함수는 앞에 virtual 붙이지 않는 이유가 뭔가요??