묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결이득우의 언리얼 프로그래밍 Part1 - 언리얼 C++의 이해
3강에서 30분 내용이 전혀 이해가 안되는 수준이면 무엇이 부족한걸까요?
제목 그대로 입니다. TCHARFString같은 수준인줄 알았는데 갑자기 간접지정연산자로 접근을 해야 할당이 되질 않나 이게 무슨 관계인지 모르겠고,Fstring이 이미 Tchar배열형이랑 같은 수준인데 GetcharArray의 GetData라니 이게 무슨관계인지 모르겠습니다.C++에 대한 이해가 부족한걸까요? 멍때리고 보다가 뭘본건지 모르겠어서 질문올립니다... 제가 무엇을 더해야 이해를 할 수 있을까요? ㅠ
-
미해결이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
Part3 1강 레포지토리에서 플레이누르면 BluePrint쪽에서 에러가 발생하는거같습니다.
안녕하세요Part3 1강에 적혀있는 레포지토리에서1강 기본 프로젝트 샘플 커밋에서 빌드와 엔진까진 작동이되는데플레이 버튼을 누르면 아래의 에러가 발생하고있습니다 ㅠㅜ..Could not find the skeleton for Anim Blueprint 'ABP_ABCharacter' Would you like to choose a new one?
-
해결됨이득우의 언리얼 프로그래밍 Part4 - 게임플레이 어빌리티 시스템
AttributeSet 함수 정리
AttributeSet의 각 함수에 대해 의미와 동작 방식, 사용처가 조금 헷갈려서 제가 실험을 좀 해본 후에 정리한 것인데요.여기서 틀린 정보가 있을지 혹시 알 수 있을까요... 그리고 UAbilitySystemComponent:GetGameplayAttributeValueChangeDelegate(FGameplayAttributeAttribute)이 델리게이트 같은 경우는 PostGameplayEffectExecute() 다음에 이벤트 발생 되는 건가요??
-
해결됨이득우의 언리얼 프로그래밍 Part4 - 게임플레이 어빌리티 시스템
어빌리티 태스크에서 GetWorld() 얻어올 때 어빌리티에서 가져오는 것
바로 GetWorld() 하는 것과 Ability->GetWorld() 하는 것이 어떤 차이가 있나요?World라는 것이 자신이 생성되어 소속되어있는 레벨의 월드 데이터로만 알고있는데, 월드데이터가 오브젝트마다 다를 수가 있는 건가요?
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
무기가 손에 장착이 안됩니다
상자에서 무기를 획득했을 때 무기가 hand_rSocket에 장착되는 것이 아닌 캐릭터의 아래에 고정됩니다.어디가 잘 못 된 건가요?
-
해결됨이득우의 언리얼 프로그래밍 Part4 - 게임플레이 어빌리티 시스템
GAS 보조게임 모듈은 GameFeature로 만든건가요?
플러그인에 게임피처가 적용 안되어 있는 걸로 보면 직접 파트1에서 한 것처럼 수동으로 폴더와 파일을 만들어서 제작한 것 같은데요. GAS 빌드.cs 에 PrivateDependencyModuleNames에 "GameFeatures"는 왜 있는 건가요??
-
미해결이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
OnRep_ReplicatedHasBegunPlay 함수
bReplicatedHasBegunPlay 속성이 변경 됐을때 실행된다 하셨는데요.. 그러면 이미 게임이 시작된 상태에서 클라이언트가 접속시 클라이언트는 복제된 이미시작된 게임스테이트의 상태를보고bReplicatedHasBegunPlay속성을 변경 시켜주는건가요..? bReplicatedHasBegunPlay속성을 변경 시키는 타이밍이 언제 인가요??
-
미해결[입문자를 위한 UE5] Part5. 언리얼 엔진 VR
왼손 Animation 넣을 떄
안녕하세요! 좋은 강의 보며 재밌게 공부중입니다. 다름이 아니라 왼손에도 애니메이션을 넣고 싶어서 혼자 ABP_Hand_Left도 만들어서 왼손에 연결해보려 했는데, BP_Hand의 HandMesh가 하나인 탓에 이미 강의대로 오른손 기준 애니메이션이 Mesh와 연결돼있어서 왼손 애니메이션을 mesh에 연결 못했습니다. 혹시 왼손도 애니메이션도 따로 제작해서 넣고 싶으면 BP_Hand에서 왼손, 오른손 mesh 따로 있도록 새로이 구조를 짜야 하는건가요? 그리고 궁금해서 Sample/Character/Mannequins_XR/Meshes/ 의 ABP_MannequinsXR 애니메이션의 AnimGraph도 봤는데 mirror 어쩌구저저구를 사용해서 오른손,왼손 다 사용가능하게끔 코드처리가 돼있던데 이것은 어떤 원리인지도 궁금합니다.
-
해결됨이득우의 언리얼 프로그래밍 Part4 - 게임플레이 어빌리티 시스템
VS에서 저장 안한 코드가 에디터에서 컴파일 할 때마다 사라지는 문제
에디터를 켠 상태로 vs코드를 수정하다가 저장을 안하고 그대로 에디터에서 새 클래스를 생성한다던지 하는 방식으로 에디터에서 컴파일을 실행하면, 저장안한 코드는 전부 사라지는 것 때문에 강의를 여러번 되돌려보고 디버깅 따로 해보느라 여러번 낭패를 봤는데요. 이거는 그냥 코드 수정할 때마다 저장 제때하는 것밖에 방법이 없는 건가요???뭔가 방지하는 방법은 없나요
-
미해결이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
10번 강의 질문 있습니다
안녕하십니까. 질문 남기기 앞서 강의 정말 잘 보고 있다고 말씀 드리고 싶습니다. 제가 궁금한 부분은 10번 강의에서 공격에 맞았을 때 검증(Validation) 하는 부분입니다. bool AABCharacterPlayer::ServerRPCNotifyHit_Validate(const FHitResult& HitResult, float HitCheckTime) { return (HitCheckTime - LastAttackStartTime) > AcceptMinCheckTime; } 공격 시작 타이밍과 몽타주에 배치한 트리거 함수 간의 간격을 검증하기 위한 것으로 이해했습니다. 검증 코드에서 LastAttackStartTime이란 변수가 쓰였고, LastAttackStartTime이란 변수가 아래 코드의 ServerRPCAttack에서 인자로 받은 AttackStartTime 변수로 세팅되는 것을 확인했습니다. void AABCharacterPlayer::ServerRPCAttack_Implementation(float AttackStartTime) { AB_LOG(LogABNetwork, Log, TEXT("%s"), TEXT("Begin")); bCanAttack = false; OnRep_CanAttack(); AttackTimeDifference = GetWorld()->GetTimeSeconds() - AttackStartTime; AB_LOG(LogABNetwork, Log, TEXT("LagTime : %f"), AttackTimeDifference); AttackTimeDifference = FMath::Clamp(AttackTimeDifference, 0.0f, AttackTime - 0.01f); FTimerHandle Handle; GetWorld()->GetTimerManager().SetTimer(Handle, FTimerDelegate::CreateLambda([&] { bCanAttack = true; OnRep_CanAttack(); } ), AttackTime - AttackTimeDifference, false, -1.0f); LastAttackStartTime = AttackStartTime; PlayAttackAnimation(); //MulticastRPCAttack(); for (APlayerController* PlayerController : TActorRange<APlayerController>(GetWorld())) { if (PlayerController && GetController() != PlayerController) { if(!PlayerController->IsLocalController()) { AABCharacterPlayer* OtherPlayer = Cast<AABCharacterPlayer>(PlayerController->GetPawn()); if (OtherPlayer) { OtherPlayer->ClientRPCPlayAnimation(this); } } } } } LastAttackStartTime은 서버의 변수이고 그렇기 때문에 여러 클라이언트가 동시에 공격을 한다면 LastAttackStartTime이 덮어 씌워질 수 있다고 생각하는데 그렇게 되면 검증하는 부분에서 문제가 생길 수도 있다고 생각합니다. 질문 : 여러 클라이언트가 동시에 공격 시 LastAttackStartTime이 덮어 씌워지는 것이 맞는가?
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
데드 애니메이션에서 오류가 발생합니다.
6강에서 강의대로 코드를 작성했는데 NPC를 죽이는 순간 에디터가 멈추고 오류가 발생합니다.위와 같은 오류가 나오는데코드를 그대로 따라 썼는데도 어디가 잘 못 된 건지 못 찾겠습니다.
-
해결됨이득우의 언리얼 프로그래밍 Part4 - 게임플레이 어빌리티 시스템
NotifyActorBeginOverlap 방식 충돌체크
예전에 Trigger의 오버랩 델리게이트에 직접 함수를 바인딩하여 충돌체크를 했던 방식과 사뭇 다른데요. NotifyActorBeginOverlap 은 액터가 가지고있는 모든 충돌 가능 컴포넌트를 모두 자동으로 감시하나요??
-
미해결[입문자를 위한 UE5] Part5. 언리얼 엔진 VR
위젯 인터렉션과 핸드 매쉬 방향 조절
안녕하세요.한 가지 질문이 있어 이렇게 글을 남깁니다.현재 핸드 매쉬와 위젯 인터랙션 방향이 모션컨트롤러 기준 위쪽을 향하고 있는데 이걸 정면을 향하도록 하는 방법이 있을까요?
-
해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part5: UE5 & IOCP 서버 연동
06.+마무리 언리얼 솔루션 빌드가 안됩니다.
안녕하세요.06.+마무리.zip을 다운받아 풀고S1.sln 파일을 실행시키면 VS에서 프로젝트 내 파일들을 읽어오질 못합니다. 그래서 S1.uproject에서 Generate Cisual Studio Project File을 해주고 솔루션을 실행시키면 프로젝트 내 파일들이 잘 나옵니다.근데 빌드를 하면 다음과 같은 에러가 납니다. 1>[18/23] Compile [x64] S1Player.cpp cancelled 1>[19/23] Compile [x64] S1GameInstance.gen.cpp cancelled 1>[20/23] Compile [x64] S1Player.gen.cpp cancelled 1>[21/23] Compile [x64] ClientPacketHandler.cpp cancelled 1>[22/23] Compile [x64] S1.init.gen.cpp cancelled 1>[23/23] Compile [x64] BufferReader.cpp cancelled 1>C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Microsoft\VC\v170\Microsoft.MakeFile.Targets(44,5): error MSB3073: The command ""D:\Epic Games\UE_5.2\Engine\Build\BatchFiles\Build.bat" S1Editor Win64 Development -Project="C:\Users\yesun\Downloads\06.+마무리\MMO\S1\S1.uproject" -WaitMutex -FromMsBuild" exited with code 6. 1>Done building project "S1.vcxproj" -- FAILED. ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== ========== Build started at 5:33 PM and took 01.657 seconds ========== 마지막 5.3버전 예제도 마찬가지로 압축푼 프로젝트파일을실행하면 VS 에서 파일이 제대로 안나옵니다.하지만 06.+마무리.zip 과는 다르게 S1.uproject에서 Generate Cisual Studio Project File을 해주고 다시 VS 오픈해서 빌드하면에러없이 언리얼 에디터가 잘 실행됩니다. 제가 뭘 잘못 실행한건지 뭔가 세팅을 제대로 안한건지 왜 이런 현상이 일어나는지 알수 있을까요?
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
한번만 눌러도 2번쨰 몽타주까지 실행이 됩니다.
몽타주는 다 분할 되어있고한번만 눌러도 2번째 공격까지 발동됩니다.디버그를 찍어봤는데 ProcessComboCommand 함수가 2번 들어오는데 이유를 알고싶습니다.
-
해결됨이득우의 언리얼 프로그래밍 Part4 - 게임플레이 어빌리티 시스템
ApplyGameplayEffectSpectToTarget()을 사용하기 전 조건
이 함수를 이용하려면 TargetDataHandle을 넣도록 되어 있는데요.그래서 Trace 어빌리티 테스크를 통해 전달받은 데이터를 사용한 것 같습니다.그런데 다른 방식으로 타겟을 정하거나 수동으로 ApplyGameplayEffectSpectToTarget()를 사용하려면FGameplayAbilityTargetDataHandle을 억지로 만들어 채워야 하나요??
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
OnConstruction 함수가 실행이 안됩니다
액터가 초기화될때만 한번 실행되고 State값을 바꿔도 실행이 되지 않습니다. 에디터를 껐다 켜도 계속 안되는데 왜이러는건지 모르겠습니다
-
해결됨이득우의 언리얼 프로그래밍 Part4 - 게임플레이 어빌리티 시스템
플레이어에만 위젯을 넣었는데 NPC에서 HpBar가 어떻게 나오나요??
강의 따라가다가 제 화면에서는 플레이어에만 HpBar가 나오는데 강의에선 NPC에도 나와서 질문 드렸습니다. +npc에도 같은 위젯코드를 넣어봤더니 에디터를 처음 켤 때 로딩중에 위젯컴포넌트에서 InitWidget()이 실행되면서 위젯의 SetAbilitySystemComponent()를 호출하게 되는데요. 저는 SetAbilitySystemComponent()에 ensure을 놔뒀더니 이 타이밍이 빙의 전이라 어트리뷰트가 등록이 안되있는 상태라서 에러가 발생하는 것같습니다.강의 처럼 if 로직으로 바꾸면 되긴하는데 로딩중에 위젯컴포넌트의 InitWidget()가 호출되는 이유가 무엇인가요? 월드에 npc가 배치되있긴하지만 BeginPlay()를 호출하지는 않는데 왜 InitWidget()이 호출되는지 잘 모르겠습니다.제가 part2에서 들었던거는 액터의 BeginPlay() 이후에 호출된다고만 들었는데 다른 이유가 있나요?? 이것 때문인 것 같습니다.
-
해결됨언리얼로 만드는 게임사운드 - 중.고급 과정
Quartz를 이용한 인터렉션한 BGM 연출하기
trigger volume 박스를 4개 만들어서 영역에 가면 소리가 레이어 되는 것 까지 잘 공부하였습니다.궁금한것은 On Actor End Overlap(TriggerVolume) 을 이용하여 영역 밖으로 나올때 음악을 정지혹은 안 나오게 하고 싶은데 어찌해야 할까요? 답변 부탁드립니다 감사합니다.
-
해결됨이득우의 언리얼 프로그래밍 Part4 - 게임플레이 어빌리티 시스템
게임플레이 이펙트의 Magnitude Calculation Type을 바꿨을 때 질문입니다.
Magnitude Calculation Type을 Attribute Base로 바꿨을 때도 아래의 코드를 지우지 않았는데, 이거는 그냥 무시되는 건가요?