27분에서 헤더 파일에서 #include 이유
미해결
이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
헤더에서 상호 참조 또는 컴파일이 오래걸리는 것을 방지하려고 class로 전방선언하여 작업하는 것으로 이해하고 따라하고있는데, 여기서는 헤더에서 클래스를 include하여 작업하는 이유는 무엇일까요?
- unreal-engine
- ue-blueprint
- 언리얼-c++
173만명의 커뮤니티!! 함께 토론해봐요.
미해결
이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
헤더에서 상호 참조 또는 컴파일이 오래걸리는 것을 방지하려고 class로 전방선언하여 작업하는 것으로 이해하고 따라하고있는데, 여기서는 헤더에서 클래스를 include하여 작업하는 이유는 무엇일까요?
미해결
[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
#include <iostream> using namespace std; class Player { public: Player() { cout << "Player()" << endl; } virtual ~Player() { cout << "~Player()" << endl; } }; class Pet { }; class Archer : public Player { public: Archer() { cout << "Archer()" << endl; _pet = new Pet(); } virtual ~Archer() { cout << "~Archer()" << endl; delete _pet; } public: Pet* _pet; }; int main() { Player* archer = new Archer(); delete archer; } 영상 내용에서 자식클래스의 소멸자에도 virtual 을 붙이셨는데 부모 클래스의 소멸자에만 붙여도 자식 클래스의 소멸자가 잘 호출이 됩니다. 그래서 GPT를 통해 둘 다 붙이는게 좋은지 부모 클래스에만 붙이는게 좋은지 질문해봤는데 부모 클래스에만 붙여도 문제가 없다고 답변을 받았습니다. 근데 루키스님께서 둘 다 붙이는 이유가 분명 있으실탠데 그 이유가 궁금합니다.
미해결
이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
#include "InputMappingContext.h" #include "EnhancedInputComponent.h" #include "EnhancedInputSubsystems.h" void ACharacterPlayer::BeginPlay() { Super::BeginPlay(); APlayerController* PlayerController = CastChecked<APlayerController>(GetController()); if (PlayerController) { if (UEnhancedInputLocalPlayerSubsystem* Subsystem = ULocalPlayer::GetSubsystem<UEnhancedInputLocalPlayerSubsystem>(PlayerController->GetLocalPlayer())) { Subsystem->AddMappingContext(DefaultMappingContext, 0); } } } // Called to bind functionality to input void ACharacterPlayer::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) { Super::SetupPlayerInputComponent(PlayerInputComponent); UEnhancedInputComponent* EnhancedInputComponent = CastChecked<UEnhancedInputComponent>(PlayerInputComponent); EnhancedInputComponent->BindAction(JumpAction, ETriggerEvent::Triggered, this, &ACharacter::Jump); EnhancedInputComponent->BindAction(JumpAction, ETriggerEvent::Completed, this, &ACharacter::StopJumping); EnhancedInputComponent->BindAction(MoveAction, ETriggerEvent::Triggered, this, &ALCharacterPlayer::Move); EnhancedInputComponent->BindAction(LookAction, ETriggerEvent::Triggered, this, &ACharacterPlayer::Look); EnhancedInputComponent->BindAction(AttackAction, ETriggerEvent::Triggered, this, &ACharacterPlayer::Attack); } void ACharacterPlayer::Move(const FInputActionValue& Value) { FVector2D MovementVector = Value.Get<FVector2D>(); const FRotator Rotation = Controller->GetControlRotation(); const FRotator YawRotation(0, Rotation.Yaw, 0); const FVector ForwardDirection = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::X); const FVector RightDirection = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::Y); AddMovementInput(ForwardDirection, MovementVector.X); AddMovementInput(RightDirection, MovementVector.Y); } void ACharacterPlayer::Look(const FInputActionValue& Value) { FVector2D LookVector = Value.Get<FVector2D>(); AddControllerYawInput(LookVector.X); AddControllerPitchInput(LookVector.Y); } 코드는 위와 같이 작성을 했습니다. 화요일까지 움직였는데 갑자기 안 움직입니다. 플러그인도 있고, IMC에도 다 설정을 했는데 갑자기 안 움직입니다... 구글에서 찾아봐도 해결이 안됩니다ㅜㅜ... ThirdPersonCharacter 를 추가해서 이 캐릭터를 사용하니 움직입니다. 그래서 ThirdPersonCharacter 의 부모 클래스를 제가 만든 클래스로 설정을 하니 다시 안 움직입니다. 코드 문제인 거 같은데 뭐가 문제인걸까요..
미해결
이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
UATHelper: Packaging (Windows): Running AutomationTool... UATHelper: Packaging (Windows): Using bundled DotNet SDK version: 6.0.302 UATHelper: Packaging (Windows): Starting AutomationTool... UATHelper: Packaging (Windows): Parsing command line: -ScriptsForProject=D:/UnrealGame/Test/Test.uproject Turnkey -command=VerifySdk -platform=Win64 -UpdateIfNeeded -EditorIO -EditorIOPort=64148 -project=D:/UnrealGame/Test/Test.uproject BuildCookRun -nop4 -utf8output -nocompileeditor -skipbuildeditor -cook -project=D:/UnrealGame/Test/Test.uproject -target=Test -unrealexe="C:\Program Files\Epic Games\UE_5.4\Engine\Binaries\Win64\UnrealEditor-Cmd.exe" -platform=Win64 -installed -stage -archive -package -build -clean -pak -iostore -compressed -prereqs -archivedirectory=D:/UnrealGame/Test/package -clientconfig=Shipping -nodebuginfo -nocompile -nocompileuat UATHelper: Packaging (Windows): Initializing script modules... UATHelper: Packaging (Windows): Total script module initialization time: 0.30 s. UATHelper: Packaging (Windows): Using C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\MSBuild.exe UATHelper: Packaging (Windows): Executing commands... UATHelper: Packaging (Windows): Installed Sdk validity: UATHelper: Packaging (Windows): Win64: (Status=Valid, MinAllowed_Sdk=10.0.18362.0, MaxAllowed_Sdk=10.9.99999.0, Current_Sdk=10.0.22621.0, Allowed_AutoSdk=10.0.19041.0, Current_AutoSdk=, Flags="InstalledSdk_ValidVersionExists") UATHelper: Packaging (Windows): Scanning for envvar changes... UATHelper: Packaging (Windows): ... done! UATHelper: Packaging (Windows): Cleaning Temp Paths... UATHelper: Packaging (Windows): BUILD SUCCESSFUL UATHelper: Packaging (Windows): Setting up ProjectParams for D:\UnrealGame\Test\Test.uproject UATHelper: Packaging (Windows): ********** BUILD COMMAND STARTED ********** UATHelper: Packaging (Windows): Running: C:\Program Files\Epic Games\UE_5.4\Engine\Binaries\ThirdParty\DotNet\6.0.302\windows\dotnet.exe "C:\Program Files\Epic Games\UE_5.4\Engine\Binaries\DotNET\UnrealBuildTool\UnrealBuildTool.dll" Test Win64 Shipping -Project="D:\UnrealGame\Test\Test.uproject" -Clean -NoHotReload "D:\UnrealGame\Test\Test.uproject" -NoUBTMakefiles -remoteini="D:\UnrealGame\Test" -skipdeploy -log="C:\Users\user\AppData\Roaming\Unreal Engine\AutomationTool\Logs\C+Program+Files+Epic+Games+UE_5.4\UBA-Test-Win64-Shipping.txt" UATHelper: Packaging (Windows): Log file: C:\Users\user\AppData\Roaming\Unreal Engine\AutomationTool\Logs\C+Program+Files+Epic+Games+UE_5.4\UBA-Test-Win64-Shipping.txt UATHelper: Packaging (Windows): No target name was specified on the command-line. UATHelper: Packaging (Windows): Took 0.30s to run dotnet.exe, ExitCode=6 UATHelper: Packaging (Windows): UnrealBuildTool failed. See log for more details. (C:\Users\user\AppData\Roaming\Unreal Engine\AutomationTool\Logs\C+Program+Files+Epic+Games+UE_5.4\UBA-Test-Win64-Shipping.txt) UATHelper: Packaging (Windows): AutomationTool executed for 0h 0m 2s UATHelper: Packaging (Windows): AutomationTool exiting with ExitCode=6 (6) UATHelper: Packaging (Windows): BUILD FAILED PackagingResults: Error: Unknown Error 패키징이 안되는데 무슨 문제일까요???
미해결
이득우의 언리얼 프로그래밍 Part4 - 게임플레이 어빌리티 시스템
안녕하세요. 하나의 콤보 애니메이션 몽타주에서 섹션으로 점프하는 방식으로 강의 내용이 진행되고 있는데요. 강의 프로젝트 재확인하는 느낌으로 개인 프로젝트를 조금씩 진행하고 있는 중 콤보 공격을 넣기 위해 강의 내용따라 애니메이션 몽타주를 만들었습니다. JumpToSection 을 사용하게 되면 애님 몽타주 내부에서 해당 지점으로 바로 점프해버리다보니 점프 직전 프레임과 이후 프레임간의 모션 차이가 클 경우 상당히 눈에 띄더라구요. 그래서 각 콤보 공격의 단계를 개별 애니메이션 몽타주로 제작하고 다음 콤보 입력시 개별 애니메이션 몽타주 재생을 해봤는데 이 경우는 애니메이션 블렌딩이 되어 자연스럽게 이어지는것 처럼 보였습니다. 여기서 질문인데, JumpToSection 이 직전/직후 프레임간의 애니메이션 블렌딩이 불가능하다면 실제 프로젝트에서는 어떤 상황에서 사용하게 되는지 궁금합니다. 감사합니다.
미해결
이득우의 언리얼 프로그래밍 Part4 - 게임플레이 어빌리티 시스템
PossessedBy 함수가 서버에서만 호출된다면, 싱글플레이용 게임에서는 어느 위치에서 Character 의 ASC 에 PlayerState 의 ASC 를 대입하는게 적절할지 궁금합니다.
미해결
이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
안녕하세요. 혼자 게임을 만들어보다가 타이머 함수에 대해 궁금한게 생겨 질문을 드립니다. SetTimer(FTimerHandle& InOutHandle, UserClass* InObj, typename FTimerDelegate::TMethodPtr< UserClass > InTimerMethod, float InRate, bool InbLoop = false, float InFirstDelay = -1.f) SetTimer 함수의 인자를 살펴보면 InFirstDelay라고 있는데 이건 무슨 변수인가요? 구글에서 찾아보니 최초 실행 시 대기 시간이라고 하던데 만약 2로 설정되어 있다면 2초 뒤에 타이머가 실행이 된다는 소리인가요?
해결됨
[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
Scene과 SceneManager 강의 수강 중 키보드 입력 오류가 있어서 문의드리게 되었습니다. DevScene의 Update()에서 키보드 입력을 받을 때 강의와 똑같이 코드를 입력했음에도 불구하고 콘솔창에서는 한쪽 방향으로만 오브젝트가 움직입니다. (만약 A를 입력하면 A로만 움직임.) 혹시 원인이 뭔지 알 수 있을까요?
해결됨
[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
안녕하세요! 10주차의 Window API 강의를 듣던 중 TimeManager.cpp에서 QueryPerformanceFrequency와 QueryPerformanceCounter메서드에 LARGE_INTEGER 타입으로 변환해서 인자를 넘겨주는 과정에서 오류가 있었는데 해결 과정을 문의하고 싶습니다. Types.h에 문제가 있을까 싶어서 찾아봤지만, 별다른 이상이 없어서 원인을 모르겠습니다.
미해결
이득우의 언리얼 프로그래밍 Part4 - 게임플레이 어빌리티 시스템
안녕하세요 교수님. 5.4.4 버전으로 강의를 듣고 있는데, 계속해서 Cost 옵션과 CoolDown이 적용되지 않아 이것저것 찾아보다가 ActivateAbility부분에 해당 코드가 있는것을 발견했습니다. if (!CommitAbility(Handle, ActorInfo, ActivationInfo)) { EndAbility(Handle, ActorInfo, ActivationInfo, false, true); return; } 해당 코드를 넣고 난 후 정상적으로 cost와 cooldown이 적용되었습니다. 해당 함수는 어떤 기능을 하는 함수인지 궁금합니다.
해결됨
[입문자를 위한 UE5] Part3. 언리얼 엔진 3D 게임 개발 입문
20:27 에서 뉴 포즈 생성에 성공하신분 계신가요?
해결됨
[입문자를 위한 UE5] Part3. 언리얼 엔진 3D 게임 개발 입문
blend 를 따라 검색해보니 blend 기본형이 나타나지 않습니다. 버전업이 되면서 사라진걸까요...?
미해결
이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
생성자가 BeginPlay보다 먼저 실행되고, 양쪽 다 초기화할때 최초에 실행되는 코드라는건 알고있지만, 왜 굳이 같은 코드를 중첩해서 작성하는지 궁금합니다. 안정성 체크같은 특정한 이유가 있을까요?
미해결
이득우의 언리얼 프로그래밍 Part4 - 게임플레이 어빌리티 시스템
교수님 안녕하세요. 복습하려고 필요한 부분들만 보고 있습니다. 궁금한게 있어서요. (질문해도되나요? ) 가스용 입력함수가 따로 있다고 들었는데, AbilityLocalInputPressed() 함수는 사용하는데 어떤 장단점이 있는지 아시나요? 아레나 플젝에서는 입력바인딩은 네이티브함수로 다 되있어서요. 태그는 매틱마다 반드시 검사할수밖에 없을까요? 태그로 상태,조건을 하는데 너무 많이 쓰면 오버헤드가 생긴대서요. 아니면, 태그 사용을 어느정도까지 사용이 안전한지 디버깅이 될까요?
미해결
[입문자를 위한 UE5] Part1. 언리얼 엔진 블루프린트
문자열 비교를 하고싶은데, C++에선 Compare가 있어서 손쉽게 될줄알았는데, 생각보다 잘되지 않았습니다. ex) (abcd == Abcd) = false; 찾은결과 1. Equal, Case Insensitive를 off로 만들면 비교를 한다고하는데 Details 패널쪽에도 체크박스가 없음. 2. 아스키 코드값으로 바꿔서 int값을 비교하려고함. SubString->GetCharacter as Number ->Sum+=ASCII코드값. 방법이 틀린건지 잘 되지 않았습니다..ㅜ 방법이 있을까요?
미해결
[입문자를 위한 UE5] Part3. 언리얼 엔진 3D 게임 개발 입문
리타게팅 중에는 문제 없고 애니메이션도 잘 연동되는데.. 문제는 익스포트 한 후입니다.. Face Attach 부분이 UE4 마네킹에는 없어서 그런건지 어떤지 어떤지 모르겠네요. 근데 리타게터에선 이상없던게 어째서 익스포트 후에 이렇게 바뀔까요? 다양한 방법으로 시도해보고 있습니다만 아직 혼자 해결하지 못해서 질문 남겨봅니다.
미해결
이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
4강 수업을 위해 Infinity Blade: Warriors를 다운받으려고 하는데 fab으로 바뀌어서 검색이 되지 않습니다. 자료다운을 통해 Github에서 언리얼에디터파일을 다운받았으나 에디터가 실행은 되나 Animation폴더 내 애셋 전체가 에러가 나면서 실행되지 않습니다. 또한 Animation폴더를 다른 언리얼에디터 프로젝트로 migration하거나 직접 content폴더내로 이동해도 계속 에러가 납니다. Infinity Blade: Warriors 파일을 다운 받도록 도와주세요~
미해결
[입문자를 위한 UE5] Part1. 언리얼 엔진 블루프린트
이렇게 알려 주신 거랑 조금 다르게 각 세팅값을 a,b get으로 넣고 해봤는데 b값은 +1이 되는데 a값이 +1이 안되더라고요 그래서 2*1=2 2*2=4 ~ 2*9=18 하고 끝나버려요 만약 b도 안 늘어나면 세팅값을 get으로 넣어버려서 안되는구나 하겠는데 아니 이게 왜 b값은 올라가고 a값은 안올라가죠?
미해결
이득우의 언리얼 프로그래밍 Part4 - 게임플레이 어빌리티 시스템
안녕하세요 교수님. 좋은 퀄리티의 강의를 제공해주셔서 정말 감사드립니다. 저는 현재 언리얼 엔진 5.4.4, Visual Studio 2022 17.12.3 버전으로 강의를 수강하고 있습니다. 다름이 아니고 "6강 : 캐릭터 어트리뷰트 설정"의 35분 즈음에 Source와 Target의 AbilitySystemComponent를 가져오고, 해당 ASC에서 AttirbuteSet을 가져오는 부분을 구현하던 도중, 초록색 줄이 나오면서 C6011 Warning이 발생하였습니다. https://learn.microsoft.com/ko-kr/cpp/code-quality/c6011?view=msvc-170 이는 null포인터 역참조에 의한 경고임을 확인했습니다. 근데, SourceASC의 경우 checked 함수를 통해서 점검하고 가져오기 때문에 null포인터가 발생할 수 없지 않나요? 아니면 check함수가 unreal에서만 사용하는 함수이기 때문에 C++은 이를 인지하지 못하여 저렇게 디레퍼런싱 경고를 띄워주는 것일까요?
미해결
이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
안녕하세요. 강의를 완강하고 다시금 따라하며 게임을 제작해보고 있는 한 학생입니다. 강의와 크게 상관은 없지만 질문해봅니다. Selector를 통해서 공격범위에 있다면 Attack을 아니라면(inverse) Move to하게 했습니다. 근데 제가 하고 싶은 건 공격범위 안에 들어가는 즉시 공격을 하고 싶은데(CheckAttackRange에서 공격사거리 측정) 지금은 무조건 Target의 위치까지 Move to 한 뒤에 Attack 을 하게 됩니다. Move to 위에있는 CheckAttakcRange(inverse)에 옵션으로 Observer Aborts을 self로 해봐도 결과는 동일합니다. 어떤 이유로 인해 발생하는지 계속 고민해봐도 모르겠어서 질문 드립니다.