소개
청강문화산업대학교에서 언리얼 엔진, 게임 수학, UEFN 게임제작을 가르치고 있습니다.
- 이득우의 언리얼 C++ 프로그래밍, 넥슨 코리아 공식 교육 교재 선정 2023
- 스마일게이트 언리얼 프로그래머 양성 프로그램 언신(Unseen) 교육 총괄 2023
- 에픽게임즈 언리얼 공인 강사 (Authorized Instructor) 2022
- 에픽게임즈 개발자 지원 언리얼 데브그랜트 수상 2017
- 언리얼 서밋 2017, 2018, 2019 발표
- 시작해요 언리얼, UEFN 2022, 2023 웨비나 진행
- 대한민국 게임백서 2022 기술부문 편찬위원
- 부산인디커넥트페스티벌(BIC) 2022, 2023 심사위원장
강의
전체7로드맵
전체1수강평
- 좋은 강의 감사합니다
원덕희
2024.07.19
0
- 몇없는게임수학강의
woobum72
2024.07.06
0
- GAS의 큰 흐름을 파악하는데 도움이 많이 되었습니다.
devKevin
2024.07.04
1
게시글
질문&답변
2024.07.20
ConstructorHelpers::FObjectFinder 사용하실때 static오 변수 선언해서 넣는 이유가 있나요?
문제는 없습니다. static 키워드를 안 넣어도 잘 동작하지만, static을 넣으면 메모리 저장 공간을 보다 효율적으로 사용할 수 있다는 약간의 장점이 있습니다. 에디터에서 디버깅해보면 초반에 CDO를 만든 후에도, 에디터에서 하나의 인스턴스를 생성할 때마다 생성자 코드를 실행하는 것을 볼 수 있습니다. 애셋을 로딩하기 위한 경로 정보는 게임의 시작부터 끝까지 변하지 않고 고정되어 있으므로, 이 때마다 매번 관련 정보를 생성하고 저장공간을 할당하기보다 첫 실행시 static 영역에 넣은 후 이후부터는 바로 처리하는 것이 보다 효율적이겠지요.
- 0
- 1
- 53
질문&답변
2024.07.20
UPROPERTY() 사용 시 Category 지시자가 적용되지 않는 문제
처음에 좀 많이 당황하는 부분인데요, 블루프린트 클래스는 결국 C++ 클래스를 상속받기 때문에, 다음의 상속된 변수 옵션을 체크해주어야 합니다. (사진) 기본적인 스켈레탈 메시 구조는 4와 5는 큰 차이가 없습니다. 보편적인 방식으로 구현한다면, 4로 해도 무방하다고 보여집니다. 다만 5버전부터 기능이 점점 강화되고 있기 때문에, 신기술을 적용하고자 한다면 5버전이 좋겠지요.
- 0
- 1
- 51
질문&답변
2024.07.17
2-15강 적군을 처치한 score UI가 업데이트 X
안녕하세요. 마지막 예제는 C++외에도 블루프린트와 함께 활용할 수 있도록 한번 구성해보았습니다. ABPlayerController를 상속받은 BP_ABPlayerController에 SetScore를 호출하는 이벤트를 다음과 같이 구성했습니다. ABPlayerController의 헤더에 다음과 같은 블루프린트 이벤트를 선언했습니다. 이는 Cpp에는 내용이 없고 블루프린트에 선언한 OnScoreChangedCpp 이벤트에 대응되는 함수입니다. UFUNCTION(BlueprintImplementableEvent, Category = Game, Meta = (DisplayName = "OnScoreChangedCpp")) void K2_OnScoreChanged(int32 NewScore); UFUNCTION 매크로에 의해 블루프린트에서는 OnScoreChangedCpp라는 이름의 이벤트로 나타나지만 Cpp 코드에서는 K2_OnScoreChanged 함수를 호출해주어야 합니다. K2_OnScoreChanged 함수 호출은 다음과 같이 GameScoreChanged 함수 호출을 통해 발생되며, GameScoreChanged 함수는 점수를 관장하는 주체인 게임 모드를 통해 발동됩니다. void AABGameMode::OnPlayerScoreChanged(int32 NewPlayerScore) { CurrentScore = NewPlayerScore; AABPlayerController* ABPlayerController = Cast (GetWorld()->GetFirstPlayerController()); if (ABPlayerController) { ABPlayerController->GameScoreChanged(CurrentScore); } if (CurrentScore >= ClearScore) { bIsCleared = true; if (ABPlayerController) { ABPlayerController->GameClear(); } } } 이렇게 해서 블루프린트 이벤트 호출이 발생하면 다음의 블루프린트 로직에 의해 문의주신 UI의 SetScore함수(이벤트)가 발동되도록 설계했습니다. (사진)
- 0
- 1
- 47
질문&답변
2024.07.17
escape sequence
개행문자는 잘 동작하는데, FloatString과 IntString 변수 타입이 FString이라면 앞의 *연산자를 빼먹으신 것 같네요.
- 0
- 1
- 52
질문&답변
2024.07.17
NetDormancy 설정 중 문제가 발생했습니다.
네 오늘 좀 살펴보려고 했는데, 벌써 해결하셨네요. 사실 상속으로 인한 의도치 않은 기본값 변경은 종종 일어나곤 합니다. 그래서 블루프린트 상속으로 배치할 때는 신경을 많이 써줘야 합니다. 케이스가 워낙 다양해서 명확하게 말씀드리기는 어렵지만, 상황을 보면 레벨이 저장될 때 해당 블루프린트 인스턴스가 기본값이 아닌 새로운 값으로 지정되 저장된 상태인 것으로 보여지네요. 이미 지우셔서 확인이 어려울 것 같은데, 속성 창 오른쪽에 기본 값으로 되돌리기 아이콘이 있는지 한번 확인해보세요. ( 해당 아이콘이 있다면 생성자 기본 값을 사용하지 않는다는 의미입니다. )
- 0
- 2
- 50