묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
UE 5.4부터 강의 섹션 3 - 9강 무한맵의 제작 파트의 예제 코드에서 다음의 수정이 필요해 보입니다.
참고 URL : https://forums.unrealengine.com/t/gameplay-ability-system-course-project-development-blog/1419542/14 언리얼 엔진 5.4 이전의 버전에서는 예제 코드를 빌드해도 문제없이 빌드되지만,언리얼 엔진 5.4버전 부터는 ABStageGimmick.cpp 파일에#include "Engine/OverlapResult.h" 을 작성해줘야FOverlapResult과 관련해 발생하는 문제가 사라지는 것 같습니다.
-
미해결[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
LoadTexture로 텍스처를 출력할 때 궁금한것이 있습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.강의자료에 있는 bmp이미지 파일은 정상적으로 잘 출력이 됩니다. 다만, 다른 bmp파일로 출력을 할 경우 이미지로드에 실패합니다.파일을 보니 출력되지 않는 bmp파일의 경우 비트심도가 32이고 강의자료에있는 bmp파일의 경우 24인 것을 확인하고 비트심도를 동일하게 24로 변경했는데도 출력이 되지않습니다. 정확한 원인이 궁금하여 질문드립니다. 항상 좋은 강의 감사드립니다.
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
람다 함수 캡쳐 관련 질문
안녕하세요 교수님, 람다 함수 캡쳐 관련 질문이 있어서 글을 올렸습니다. fps 프로젝트를 만들고 있는데, VICharacter 에서 reload 를 호출하면 VIWeaponbase를 상속받는 AKWeapon 에서 Reload 함수가 호출이 되는 형식입니다.VICharacter 에 bIsReloading 을 선언해 놓았는데, AKWeapon에서 캐릭터 참조를 가져와 재장전이 끝난 후 setter 로 false 설정을할 때 Timerdelegate 람다식에서 Character에 액세스를 하지 못합니다. 제 생각에는 참조의 생명 주기에 문제는 없는 것 같은데,, 왜 람다식 안에서만 캐릭터 참조를 사용 못하는지 모르겠습니다.아래는 Reload 코드와 프로젝트 깃허브 주소입니다. void AVIAKWeapon::Reload() { Super::Reload(); if (UWorld* World = GetWorld()) { APlayerController* PC = UGameplayStatics::GetPlayerController(World, 0); if (PC) { AVICharacter* Character = Cast<AVICharacter>(PC->GetCharacter()); if (Character) { if (AmmoCount < MaxAmmo) { if (!bDoOnceReload && !Character->GetbIsReloading()) { Character->SetbIsReloading(true); Character->GetFirstPersonMesh()->GetAnimInstance()->Montage_Play(AKReloadActionMontage, 1.0f); Mesh->PlayAnimation(ReloadActionAnimation, false); FTimerHandle ReloadTimeHandle; GetWorld()->GetTimerManager().SetTimer(ReloadTimeHandle, FTimerDelegate::CreateLambda([&]() { Character->SetbIsReloading(false); AmmoCount = MaxAmmo; //DF("EndTimer bisRelaoding %d", Character->GetbIsReloading()) // TimerHandle 초기화 GetWorld()->GetTimerManager().ClearTimer(ReloadTimeHandle); }), ReloadTime, false); bDoOnceReload = false; } } } } } }https://github.com/chataeg/VI/tree/Part7
-
미해결[입문자를 위한 UE5] Part3. 언리얼 엔진 3D 게임 개발 입문
Play Animation과 Play Anim Montage
강의에서 사용한 Play Anim Montage는 현재 메시 컴포넌트가 사용하는 ABP_Player(애니메이션 블루프린트) 안에 있는 몽타주에 접근해 재생시키는 것인가요? 애니메이션 관련 액션을 검색하다 Play Animation을 발견해서 사용해봤는데 ABP_Player(애니메이션 블루프린트)를 무시하고 Play Animation으로 재생한 것만 1순위로 실행하더라구요. (설명을 읽어도 안전하지 않으니 비추천한다는 것 같고) 그럼 Play Animation은 ABP_Player(애니메이션 블루프린트)의 실행을 무시하고 메시를 강제로 특정 애니메이션을 재생시키도록 작동하는 것일까요? 강의 잘 듣고 있습니다. 감사합니다. ps. 추가로 강의 관련 궁금한 점이 있습니다.유니티 MMORPG 만들기 강의와 켠김에 출시까지 강의 시리즈 중에서 실무적인 팁이나 지식을 얻기 위해서는 켠김에 출시까지를 들어보는 것이 좋을까요?
-
해결됨이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
Shipping 빌드의 save 파일은 어디에 저장되나요?
Shipping 빌드로 패키징한 exe 파일로 게임 진행 시 RetryCount를 보관하는 save 파일은 어디에 어떤 형태로 저장되는 지 궁금합니다.
-
해결됨이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
사용된 코드에 담긴 원리가 궁금합니다
안녕하세요 교수님.교수님께서 만들어주시는 양질의 강의에 언제나 많은 배움을 얻게 되어 감사드립니다.강의를 듣던 도중 궁금한 점이 생겨 이렇게 질문을 작성하게 되었습니다.ShoulderLook()에서 플레이어 컨트롤러의 로테이션 Yaw값과 Pitch값을 더하는 것은 알게 되었지만,다음의 코드들이 작동하는 원리를 자세히 이해하지 못한 것 같습니다.특히 이 코드들이 작동하는 수학적 원리가 어떻게 되는지 알고 싶습니다.추가적으로 위의 코드들이 Quater 뷰와 Shoulder 뷰를 구현하는 최선의 방법인지, 다른 더 간소화할 수 있는 방법이 있다면 무엇인지 알려주시면 감사하겠습니다.다시 한번 좋은 강의를 만들어주셔서 감사합니다.
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
캐릭터 WASD키 방향 관련 설정 질문입니다.
입력키를 사진처럼 설정하면 W(앞), D(우), S(뒤), A(좌) 방향으로 제대로 움직이는데원래 설정되어 있던 WSDA순서로 설정하면 W(우), D(뒤), S(좌),A(앞) 이렇게 움직입니다. 일반적으로 DASW, Up Down Right Left 순서를 어떻게 맞추면 될까요?
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
37:11에서 프로젝트 실행시 경로를 찾을 수 없다는 에러가 뜹니다
37:11에서 프로젝트 실행시 경로를 찾을 수 없다는 에러가 뜹니다.언리얼 5.1.1버전이고 코드는 복붙했습니다.실행시에 아래처럼 파일 경로를 찾을 수 없다는 에러가 뜨는데 어떻게 해결해야하나요??
-
미해결언리얼 엔진4 입문 (C++ 기반)
언리얼 에디터 상에서 만든 구조체를 C++ 상에서 불러올수 있나요?
제목처럼 언리얼 에디터 상에서 구조체 블루프린트?를 만들었는데요 여기에 선언된 변수에 들어있는 값을리플렉션 시스템을 활용해 C++ 상에서 불러올수 있나요??
-
미해결[입문자를 위한 UE5] Part2. 언리얼 엔진 2D 게임 개발 입문
sprite vs texture 수업자료 다운로드가 안됩니다.
sprite vs texture 수업자료 다운로드가 안됩니다.
-
미해결[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
SocketUtils 관련해서 질문 있습니다.
assert는 release 모드에서 사라지는 것으로 알고있는데그래서 그런가 Release모드에서 작동시킬 때 서버가 꺼지는 현상이 발생합니다.assert를 if 문으로 수정했더니 동작은 되는데,이게 해결법인가요. 아니면 서버가 Debug만 고려된건가요?
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
아이템 박스가 안먹어집니다
void ASSItemBoxActor::OnOverlapBegin(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepHitResult) { //오버랩 확인 UE_LOG(LogTemp, Warning, TEXT("OnOverlapBegin triggered")); if (nullptr == Item) { Destroy(); return; } ISSCharacterItemInterface* OverlappingPawn = Cast<ISSCharacterItemInterface>(OtherActor); if (OverlappingPawn) { OverlappingPawn-> TakeItem(Item); } Effect->Activate(true); Mesh->SetHiddenInGame(true); SetActorEnableCollision(false); Effect->OnSystemFinished.AddDynamic(this, &ASSItemBoxActor::OnEffectFinished); }선생님 자료 코드랑 비교도 다 해보았는데 틀린 부분은 없는데 박스를 설치하고 다가가면 벽처럼 물체로 인식하고 가도 터지거나 이펙트가 일어나지 않습니다 로그도 넣어봣는데 OnOverlapBegin 진입 자체가 안됩니다 에디터에서 무언가 설정해야 할까요?
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
데코레이터 구현 질문..
수업에서는 AttackInRange 데코레이터를 CalculateRawConditionValue() 만 구현해서 사용했는데요. aborts 발동 조건같은걸 따로 지정안해도 자동으로 되는 건가요?? BlackBoard 데코레이터의 경우에는 값이나 결과? 가 바뀌면 aborts가 발동되는 걸로 이해해서 코드를 보니 상당히 복잡하게 aborts 구현이 되어있더라구요.... 어설프게 이해한 바로는 블랙보드의 키에 델리게이트 등록해서 값 변경 이벤트를받아 ConditionalFlowAbort() 라는 함수를 호출하고 있습니다. 이 과정에서 CalculateRawConditionValue()가 또 호출되고 활성/비활성으로 나뉘어져 뭔가 복잡하게 수행하는데요. 결국 aborts를 해야하는지 말아야하는지 체크는 ConditionalFlowAbort() 를 호출함으로서 시작되는 것 같아 보이는데....이걸 안 한 AttackInRange 데코레이터는 aborts 가 어떻게 동작하는지 알고 싶습니다..
-
해결됨이득우의 언리얼 프로그래밍 Part4 - 게임플레이 어빌리티 시스템
ASC GiveAbility 질문드립니다.
안녕하세요.저는 무기 아이템 액터가 무기를 휘두르는 몽타주를 재생하는 어빌리티를 멤버 변수로 갖고 있게 하고,해당 무기를 장착했을 때 무기의 어빌리티를 매개변수로 전달받아 어빌리티를 활성화 하도록 구현하려고 하는데요.이 경우에 어빌리티를 활성화하고 등록된 어빌리티를 다시 제거해 줄 필요는 없을까요?같은 무기를 여러번 장착할 수도 있을텐데 ASC에 같은 어빌리티 여러 개가 등록되어 있는게 문제가 될 수도 있지 않나 해서 질문드립니다.
-
해결됨이득우의 언리얼 프로그래밍 Part4 - 게임플레이 어빌리티 시스템
MSB3073 빌드 에러
안녕하세요 수업자료 비주얼 스튜디오에서 빌드시 아래 에러가 발생하는데 무엇이 문제일가요?Severity Code Description Project File Line Suppression State DetailsError MSB3073 The command ""C:\Program Files\Epic Games\UE_5.1\Engine\Build\BatchFiles\Build.bat" ArenaBattleEditor Win64 Development -Project="F:\Workspace\Unreal5\Inf_LDW_GAS_Lecture2\ArenaBattleGAS.uproject" -WaitMutex -FromMsBuild" exited with code 6. ArenaBattleGAS C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Microsoft\VC\v170\Microsoft.MakeFile.Targets 44
-
해결됨이득우의 언리얼 프로그래밍 Part4 - 게임플레이 어빌리티 시스템
블록 태그 관련 질문
안녕하세요. 블록 태그 관련해서 질문 있습니다.강의에서는 각 어빌리티별로 블록할 태그들을 설정하고 있는데 이런 방식이라면 새로운 태그를 추가할 때마다 기존에 있던 어빌리티들의 블록할 태그에 해당 태그를 일일이 추가해줘야 하잖아요? enum 클래스를 사용해서 state패턴으로 구현하는 방법처럼 더 나은 방식은 없을까요?일반적으로 게임에서는 두 가지 이상의 행위를 동시에 하는 것은 막고 있기 때문에 블록 태그 같은 부정문 방식보다는 state패턴처럼 긍정문 방식이 더 좋을 것 같아 질문합니다.
-
미해결[입문자를 위한 UE5] Part1. 언리얼 엔진 블루프린트
뷰포트 play 버튼 클릭시 카메라 초기화
안녕하세요 강의를 보고 열심히 따라해보고 있습니다. 뷰포트에서 play 버튼을 누르는데, 항상 origin 위치로 초기화가 되더라구요. 강사님께서 마지막 슬라임 경주 강의 찍으실 때 보면, play 버튼 누르면 편집하던 위치에서 시작되던데, 어떻게 그렇게 할 수 있나요?
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
delegate wrapper 사용 이유
안녕하세요 좋은 강의 정말 감사드립니다.다름이 아니라 delegate wrapper 사용 이유가 궁금하여 질문 드립니다.선생님께서 delegate를 다수 배열로 관리하기 해야 하는데 이 자체를 인자로 쓸 수 없다고 하신 부분이 잘 이해가 되지가 않습니다. 어느 부분을 인자로 쓸 수 없는지에 대해 구체적으로 말씀해주실 수 있나요?FTakeItemDelegateWrapper 랩퍼 구조체가 아닌 FOnTakeItemDelegate 델리게이트를 TArray 배열에 넣을 수도 있고이런 식으로 바인드도 되고, 실행도 되는데 왜 델리게이트 랩퍼 구조체를 따로 만들어야하는지가 궁금합니다.
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
enhanced input 키 동시입력
안녕하세요 교수님, void APACharacterPlayer::Move(const FInputActionValue& Value) { FVector2D MovementVector = Value.Get<FVector2D>(); const FRotator Rotation = Controller->GetControlRotation(); const FRotator YawRotation(0, Rotation.Yaw, 0); FVector ForwardDirection = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::X); FVector RightDirection = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::Y); if (bIsRunning) { if (MovementVector.Y != 0) MovementVector.Y = 0; if (MovementVector.X == -1) MovementVector.X = 1; AddMovementInput(ForwardDirection, MovementVector.X); } else { if (MovementVector.Y != 0 || MovementVector.X == -1) bCanSprint = false; else bCanSprint = true; AddMovementInput(ForwardDirection, MovementVector.X); AddMovementInput(RightDirection, MovementVector.Y); UE_LOG(LogTemp, Log, TEXT("X = %f y = %f"),ForwardDirection.X, RightDirection.Y); } } 위 코드는 3인칭 게임플레이를 위해 강의 기반으로 작성한 코드입니다. bCanSprint 및 Running 로직은 무시하셔도 됩니다.발생한 문제는 키의 동시 입력을 받을 때 입니다. 왼쪽 방향키를 누른 채로 오른쪽 방향키를 누르면 MovementVector 값이 1.0 으로 변해서 오른쪽으로 잘 이동 하는데, 오른쪽 방향키를 누른 채로 왼쪽 방향키를 누르면 벡터 값이 변하지 않아 계속 오른쪽으로 갑니다. 똑같이 앞 방향키를 누른 채로 뒷 방향키를 누르면 뒤로 가지는데, 뒷 방향키를 누른채로는 앞으로 갈 수가 없습니다. 물론 따로따로 한 버튼씩 서로 역이 되는 방향키를 누를 때는 값이 알맞게 잘 변경됩니다. 원하는 로직은 두 가지 중에 하나입니다.동시입력이 들어왔을 경우 마지막 입력 방향으로 이동동시입력이 서로 반대 방향으로 들어왔을 경우 상쇄되어 정지 로직을 어떻게 수정해야 할까요? 동시입력(오른쪽 홀드+왼쪽이동, 뒤쪽홀드 + 앞쪽이동) 할 때만 벡터값이 제대로 변하지 않는 이유를 못 찾겠습니다..
-
미해결[입문자를 위한 UE5] Part1. 언리얼 엔진 블루프린트
이벤트 vs 함수 차이
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 이벤트 경우에 시작되는 지점은 알 수 있지만 끝나는 시기를 모른다는 의미를 잘 모르겠습니다. 일단 실행되면 끝날 때까지 이벤트 함수에 머무는 것이 아니라 비동기적으로 처리하는 건가요? 딜레이를 이벤트에서는 사용가능하지만 함수에서는 사용하지 못 하는 게 함수는 점유율을 100% 다 가져가서 다른 코드가 실행될 여지를 빼았기 때문인가요? 반대로 이벤트는 점유율이 왔다갔다 왕복하면서 실행이 되는 건가요?