묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결언리얼로 만드는 게임사운드 - 중.고급 과정
무료 드럼 샘플 링크 공유드립니다.
메타사운드 기초3(Trigger) 강의에서 드럼샘플이 사용 되는데요.혹 필요한 분들이 계실까 하여 공유드립니다.(저와는 아무런 이해관계가 없으며, 100% royalty-free 입니다.) https://wavbvkery.com/acoustic-drum-samples/
-
미해결이득우의 언리얼 프로그래밍 Part4 - 게임플레이 어빌리티 시스템
캐릭터의 기본 설정 값을 Attribute와 연동
캐릭터에서 기본적으로 제공되는 MaxWalkSpeed나 JumpZVelocity같은 값들을 AttributeSet과 연동하여 사용할 수 있는 방법이 있을까요? 이런 값들도 GAS를 통해서 조정할 수 있다면 좋을 것 같아 질문 남깁니다.
-
미해결[입문자를 위한 UE5] Part4. 언리얼 엔진 C++
언리얼 라이브 멘토링 관련 질문
우선 이 강의 학습 관련 질문이 아니어서 죄송합니다.5월에 Lyra Speed Cloning 이라는 라이브 멘토링을 진행한 것으로 알고 있는데, 지금은 언리얼 관련 라이브 멘토링을 따로 하지 않으시는지 궁금합니다.
-
해결됨이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
2-8강 손에 무기 장착이 되질 않습니다...
안녕하세요 교수님, 2-8강에서 아이템 박스를 먹었을때 캐릭터 무기가 안 먹어지는 문제에 봉착했습니다... 캐릭터 생성자에서 weapon skeletal component는 만들어주었고 아이템 박스를 먹었을때 EquipWeapon 함수도 성공적으로 실행됩니다. Data Asset Table에 무기도 설정해주었구요. 디버깅을 위해서 EquipWeapon 함수를 실행했을시 DataAsset에서 가져온 skeletal mesh의 경로도 다시 한번 뽑아주어서 확인해보았습니다. 하지만, 캐릭터의 무기를 얻질 못하네요... 혹시나 해서 2번째 그림에 보시는 것과 같이 무기의 visibility, 재 rendering 등등을 해보았지만 문제가 해결되지 않아서 여기에 질문을 올립니다~
-
미해결[입문자를 위한 UE5] Part1. 언리얼 엔진 블루프린트
Beach, Sequence, flip flop강의에서 flip flop 의 다른 표현 방식이 이해가 안가요..
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하세요 강사님 강의가 유익하고 너무 잘 듣고있습니다.다름이 아니라 제가 계속 들어도 이해가 안가는 부분이 있어서 질문남깁니다..사진과 같이 bA의 변수 get(거짓)값을 가져와서 not Boolean 노드와 연결해 ‘참’의 출력값이 set bA의 입력값으로 들어갔잖아요, 그럼 Set bA의 출력값이 set bA의 입력값인 ‘참’이 출력값으로 나와서 branch 노드의 true 값만 출력되어야 하는거 아닌가요?? 랜덤으로 나올 수 있는 로직구조인지가 이해가 안돼서 글 남겨요…! 감사합니다..
-
미해결이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
멀티플레이어 프레임워크가 서버프로그래밍의 상위호환인가요?
포트나이트까지 언리얼 멀티플레이어 프레임워크로 제작할 수 있다면 서버개발자는 굳이 필요가 없을거같은데 언리얼의 멀티플레이어 프레임워크를 사용하면 서버 개발자를 대체할 수 있는건가요? 서버 개발자로 근무중인데 강의를 듣고 커리어 측면에서 궁금한 점이 생겨 질문드립니다
-
해결됨이득우의 언리얼 프로그래밍 Part1 - 언리얼 C++의 이해
FProperty와 FField가 무엇인가요?
안녕하세요. 리플렉션 관련 강의를 보다 궁금한게 생겨 질문드립니다.FProperty* 를 통해 리플렉션을 통해 변수의 값을 가져오는 강의의 내용을 보다가,FProperty가 뭔지 궁금해서 엔진 코드를 약간 열어보다가 UProperty와 함께 리플렉션을 위한 클래스인 것을 알게 되었습니다. 두 개는 각각 FField, UField(이것의 경우 UObject까지 상속받기는 함)을 상속받는데,FField나 UField나 주석이 똑같이Base class of reflection data objects.라고 작성되어 있는데 설명된 문서도 못 찾겠어서 뭔지 잘 모르겠습니다. UField, FField 나 UProperty, FProperty 등 U나 F 접두사가 다른 리플렉션 클래스들이 무엇이 다르고 차이점과 용도가 어떻게 다른 것인가요?
-
해결됨이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
TSoftObjectPtr 로 변경해도 로그가 동일합니다.
부득이하게 언리얼버전을 5.4 로 강의를 따라하고있습니다.그런데, 강의에서 나온것처럼 코드를 작성해도 로그를확인해보면 결과가 동일한데 어떤 문제일까요..?로그는 박스 먹기전에 찍은로그입니다
-
해결됨이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
WidgetComponent의 Widget의 GetOwning~() 함수 관련 질문..
궁금한것이 생겨서 아무 의미 없는 액터에 WidgetComponent를 붙인 다음, WidgetComponent의 GetWidget()이 가지고 있는 OwingPlayer 와 OwningPlayerPawn가 무엇인지 확인해봤더니 nullptr 이 나올 것으로 예상한 것과는 다르게실험한 액터와 상관없는, 월드에 있는 PlayerController_0 와 그 빙의된 캐릭터인 Character_0가 반환되는 것을 확인했습니다.WidgetComponent를 어떤 액터가 가지고 있던 간에 항상 같은 PlayerController_0와 Character_0가 반환되는 것 같은데요.제 실험 방식이 원래 말도 안되는 것인지, 아니면 원래 WidgetComponent가 만드는 UserWidget 은 무조건 해당 월드의 LocalPlayer와 그것에 빙의된 Pawn이 고정으로 정해진 것인지가 궁금합니다.
-
미해결언리얼로 만드는 게임사운드 - 중.고급 과정
기초1 트리거 파트 수업 자료 관련 질문
메타사운드 기초1 트리거 파트 드럼 샘플은 업로드 따로 안해주시나요?강의 보며 차근차근 따라해보고 싶은데 샘플이 없어서 너무 힘들어요.ㅜ
-
해결됨[입문자를 위한 UE5] Part3. 언리얼 엔진 3D 게임 개발 입문
언리얼5 입문하려면 컴퓨터 사양을 어느 정도로 맞춰야 할까요?
맘만 급해서 일단 강의 결제는 해둔 상태에서 이제야 스터디 해보려 하는데요.현 PC 사양은CPU : 라이젠 3600GPU : GTX2070 superRAM : 32g 정도의 PC를 사용하고 있습니다.시작에 앞서 언리얼 같은 경우엔 높은 사양이 필요하다는 말을 많이 들어서적당하게 새로운 PC 구입하려고 알아보니 인터넷에선 너무 터무니없게높은 스펙으로 400~500만원 가량의 견적을 내고 있더라구요. 그리고 게임 개발에선 다다익램이라는 말이 있던데.. 64기가 이상의 램이 필요할까요? 2D , 3D 전부 게임서버와 클라 연동해서 상용화까진 아니더라도 온라인으로 돌려보고 싶은데어느정도 사양으로 맞춰야 할지 대략적인 조언좀 부탁드릴 수 있을까요?
-
해결됨이득우의 언리얼 프로그래밍 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과 관련해 발생하는 문제가 사라지는 것 같습니다.
-
해결됨이득우의 언리얼 프로그래밍 Part1 - 언리얼 C++의 이해
언리얼 엔진 C++ 가변 배열에 대해서
저는 최근에 면접 키워드를 정리하면서 가변 배열에 대해 알게되었는데 정보가 너무 오락가락이여서 여쭈어 봅니다. C#의 가변배열을(Jegged Array) 라 불리고보통 영어로 번역하면 Variable Array 변하는 배열 이라고도 하는데. Dynamic Array가 현재 TArray 개요에서 나오는데 이것은 동적 배열을 의미해서 해당 C++에서 new와 malloc과 같은 방식의 할당 방식을 의미하는 것이라고 알고 있는데, 위와 같이 모든 어원적 의미는 다 동일한 것인가요?또C++ 가변 배열은 결국 구조체를 생성해서 해야하는 것인지?아니면 그냥 C++자체적으로 구현하는 방법이 있는 것인지. 1. Jagged Array, Variable Array, Dynamic Array는 모두 같은 가변배열인 것인지. 2. C++ 에서 말하는 가변배열이 언리얼 에서 말하는 TArray의 가변배열과 동일한 것인지.
-
미해결이득우의 언리얼 프로그래밍 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 뷰를 구현하는 최선의 방법인지, 다른 더 간소화할 수 있는 방법이 있다면 무엇인지 알려주시면 감사하겠습니다.다시 한번 좋은 강의를 만들어주셔서 감사합니다.
-
미해결C++로 만드는 언리얼엔진 게임포트폴리오 시리즈 Stage3
AO_Aim 파일 동작 안 함
최종 프로젝트로 올려주신 AO_Aim 파일을 그대로 써도 영상처럼 동작하지 않고 화면만 엄청 확대되는데 다른 이유가 있을까요?
-
해결됨이득우의 언리얼 프로그래밍 Part1 - 언리얼 C++의 이해
언리얼 엔진에서 순환 참조가 발생할 수 있나요? + TWeakObjectPtr
안녕하세요, 교수님. 문득 궁금한게 생겨 다시 강의를 보다가 질문을 올립니다.우선 순환참조는 스마트 포인터의 고질적인 문제인데요,A, B, C가 있고,A -> B <->C 의 참조 상태에서 A 변수의 참조가 끊겨도, B와 C는 서로 계속 가리키고 있어 영원히 메모리가 해제되지 않는 메모리 누수의 문제로 알고 있습니다. 따라서 weak_ptr<T>를 사용해야 하는데요. UE의 GC 시스템은 Mark & Sweep 방식을 따른다고 했습니다.전체 UObject에 대해 Unreachable로 설정 후,Rootset을 따라서 참조 그래프를 순회하며 Unreachable 플래그를 해제하고 (Mark),전체 UObject에 대해 Unreachable 플래그가 존재하면 메모리 해제를 진행한다. (Sweep) 이 방식은 Java나 c#의 GC와 비슷한 방식이며, 해당 언어의 경우순환 참조 문제가 발생하지 않는 것으로 알고 있습니다.(위에 써둔 순환 참조 문제에서, B<->C의 참조 상태여도 어차피 Root로 부터 Mark가 도달할 수 없기 때문에 지워짐) 그렇다면 언리얼 엔진의 GC에서도 위와 같은 순환 참조 문제가 발생하지 않나요?발생하지 않는다면, TWeakObjectPtr<T>의 강참조 방지는 그냥 쓸데없는 생명주기 연장 + raw pointer 참조 시 GC 당해서 댕글링을 참조하는 문제 방지 등을 위해서 사용하는 것인가요? 만약 발생한다면, 그 이유는 무엇인가요? 제가 잘못 이해한건지, 아니면 Java나 C#에서의 RootSet 기준과 Unreal 에서의 Rootset의 기준이 달라서 그런것인지 궁금합니다.
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
캐릭터 WASD키 방향 관련 설정 질문입니다.
입력키를 사진처럼 설정하면 W(앞), D(우), S(뒤), A(좌) 방향으로 제대로 움직이는데원래 설정되어 있던 WSDA순서로 설정하면 W(우), D(뒤), S(좌),A(앞) 이렇게 움직입니다. 일반적으로 DASW, Up Down Right Left 순서를 어떻게 맞추면 될까요?