목록Game Dev (263)
KoreanFoodie's Study
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/n56Nm/btrPakIkVDt/Lm6wDw4jaCF4i8Rc8klEg0/img.jpg)
먼저 Message Pump 란, 한 메시지를 처리하는 도중 메시지 큐로부터 다른 메시지를 꺼내 이를 처리하는 코드를 의미한다. 윈도우 어플리케이션의 경우, UI 및 사용자 입력 처리하는 과정에서 메시지 펌프를 적극 활용하고 있다. 기초적인 Message Loop 코드는 다음과 같다. MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } 그런데 GetMessage 의 경우 데드타임(메시지큐에 메시지가 없어 GetMessage 가 놀고 있는 시간)을 제대로 활용할 수 없어, PeekMessage 를 많이 활용한다. PeekMessage 는 메시지 큐에 메시지가 있든 없든 리턴을 하기 때문..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/EuPKd/btrOQE9JQvb/RFunSizP2oUFR7IFDDSrWk/img.jpg)
Actor 와 ActorComponent 유니티에서는 게임 오브젝트 아래에 게임 오브젝트를 넣는 식으로 Hierarchy 를 만들어낼 수 있다. 하지만 언리얼은 그런 식으로 동작하지 않는다. 유니티에서는 항공기가 있다고 했을 때, 프리팹에 각종 게임 오브젝트를 하위에 넣어 조합하는 방식으로 해당 오브젝트를 제작할 수 있다. 그런데 언리얼에서 Actor 는 Bucket 같은 개념으로, 다양한 액터 컴포넌트를 담고 있다. 즉, 언리얼은 Bucket 안에 다른 Bucket 을 넣는 방식으로 오브젝트를 생성하지 않는다. 액터 컴포넌트는 재사용가능한 기능을 정의하는 컴포넌트에 대한 베이스 클래스로 충돌, 메시, 월드 이동, 소리 재생, 빛과 명암 등의 다양한 기능을 지원한다. 언리얼에서는 트랜스폼을 가진 액터 컴..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/be6bbp/btrOCy1c0o1/Xw2fLg2Zo1bGN8V4nppd21/img.jpg)
언리얼 코딩 표준 명명규칙 : 파스칼케이스, 접두사(U - UObject 상속 /A - AActor 상속 /S - SWidget 상속 / C - 에픽의 개념이 유사 / b - 부울 변수 / F - 그 외 대부분) 포터블 C++ 코드 : bool(크기 추정 금지, BOOL 은 컴파일 안됨), TCHAR, uint8, int8, uint(16, 32, 64 버전) , float, double, PTRINT(포인터를 가질 수 있는 정수, 크기 추정 금지) 표준 라이브러리 사용 : 표준 컨테이너와 스트링은 interop 코드를 제외하고 사용하지 말아야 함 코멘트 : 코드는 구현을 설명하고, 코멘트는 그 의도를 설명한다. 최신 C++ 언어 문법 : static_assert 사용, override 및 final 사..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/BYJdq/btrOAiFVqO2/SgBhVvSiGuK1lPiGMypBJ0/img.jpg)
언리얼 가비지 컬렉터(GC) 심화 정리 언리얼 엔진은 Reference Graph 를 만들어 오브젝트들의 사용 여부를 구분한다. 이 그래프 루트에는 "Root Set" 이라고 지정된 오브젝트 셋이 있으며, "Root Set" 에 포함된 객체들은 GC 대상에서 제외된다(Mark & Sweep 방식으로 추적). 세 가지 규칙 : UPROPERTY 선언 : 클래스 내부 멤버 변수가 클래스의 객체의 수명과 운명을 함께할 경우 선언 멤버가 가리키는 포인터 : 엔진이 인식하거나 관리하지 않는 메모리 영역을 가리키도록 만들면 안됨 TArray 를 활용 : UObject 또는 자식들에 대한 포인터를 안전하게 담을 수 있는 유일한 컨테이너 기타 인터페이스 예시 : // Object 를 살아있게 만드는 3가지 방법; //..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/tnWN0/btrOCJO3gTu/delTfyrM93qJOiOxeiScC0/img.png)
MVC 패턴 개요 MVC 패턴은 앱을 Model, View, Controller 로 나누어 데이터와 로직을 분리하는 디자인 패턴이다. Model은 데이터를 가진 객체를, View는 사용자가 볼 결과물을 생성하는 컨테이너를, Controller는 사용자가 Model 과 View 를 호출하는 로직이다. 이때, Model 과 View 는 Controller 의 존재를 몰라야 결합도를 줄일 수 있다. Model 에 변경 사항이 생기면 View 는 Controller 를 통해 이벤트가 실행되어 화면이 업데이트 된다. MVC 패턴은 비즈니스 로직과 UI 로직을 분리하여 유지 보수를 독립적으로 수행할 수 있고, 확장성과 유연성이 뛰어나다는 장점이 있다. 하지만 하나의 컨트롤러에 다수의 View 와 Model 이 복잡..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bTrgY7/btrNMGAwEEb/96SrYcMgCiX3D9EX3uvYZK/img.jpg)
언리얼 엔진의 개념과 동작 원리 복습 이득우님의 블로그를 보며, 배운 내용을 간단히 정리해보려 한다! 언리얼을 처음 시작한다면, 이득우님이 쓰신 책인 "이득우의 언리얼 C++ 개임 개발의 정석" 을 꼭 읽어보는 것을 추천한다! 이 블로그에도 강좌 내용을 정리해 놓았지만, 실제로 읽어보는 것을 적극 추천한다. 8. 액터의 제작 액터는 월드에 배치될 수 있는, 월드 트랜스폼이 있는 언리얼 오브젝트라고 할 수 있다. 게임 컨텐츠의 설계는 액터에서부터 시작한다고 할 수 있다. 액터를 세팅할 때는 아래와 같이 애셋을 불러와 적합한 메시에 적용하면 된다. 자세한 구현은 이 글을 참고하자. static ConstructorHelpers::FObjectFinder SK_BlackKnight(TEXT("SkeletalM..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/F2eJE/btrNOTydRHB/fm4hHRudyihKsKYS5K37Ak/img.jpg)
언리얼 엔진의 개념과 동작 원리 복습 이득우님의 블로그를 보며, 배운 내용을 간단히 정리해보려 한다! 언리얼을 처음 시작한다면, 이득우님이 쓰신 책인 "이득우의 언리얼 C++ 개임 개발의 정석" 을 꼭 읽어보는 것을 추천한다! 이 블로그에도 강좌 내용을 정리해 놓았지만, 실제로 읽어보는 것을 적극 추천한다. 1. 언리얼 엔진도 결국 모듈의 집합이다. 게임을 만들면서, 개발자는 새로운 기능을 계속 추가하게 되는데, 이것을 사용자 게임 모듈이라고 한다. 구조는 다음과 같다. 2. 언리얼 엔진은 크로스 플랫폼(Windows 와 MacOS) 을 지원한다. Config, Content, Plugins, Source, .uproject 만 있으면 "Generate Visual Studio project files"..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dXRbns/btrKZ012L7K/CjVHxLtxQqr8KtKTU4q9bK/img.jpg)
MoveTo 와 애니메이션 비헤이비어 트리 로직을 짜면서 MoveTo 를 테스트했는데, 해당 지점으로 이동할 때 걷는 애니메이션이 재생되는 것이 아니라 캐릭터 메시 자체가 미끄러지듯이 슬라이딩하는 현상이 생겼다. 애니메이션을 어떻게 하면 재생할 수 있지? 라고 생각하며 AnimBP 를 잘 연결해줬는데도 동작이 제대로 안되는 상황이 있었다. 언리얼 포럼에서는 다양한 해결책을 제시한다. 1. 애니메이션 블루프린트 연결 확인하기 2. CharacterMovement -> NashMovement 에서 Use Acceleration for Paths 체크하기 근데 나는 이 두가지 전부 아니였다. 나의 경우, 아래와 같이 Speed 값에 따라 애니메이션을 변경하는 블렌드 스페이스를 만들었는데, 알고보니 Speed ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/XPi03/btrKJ7nVLY6/pUlTuK6O6D9CQomVUjQS60/img.jpg)
[언리얼] 어떤 개념 : 어떻게 하기 맨 처음 언리얼을 설치하고 프로젝트를 열려고 하면, 다음과 같이 연결이 되어 있지 않다. 이 문제는 속성에서 연결 프로그램을 다음과 같이 해 주면 된다 : "C:\Program Files (x86)\Epic Games\Launcher\Engine\Binaries\Win64\UnrealVersionSelector.exe" 만약 위의 방법이 안 되면, 위의 UnrealVersionSelector.exe 를, 다음 경로에 복붙한다 : "C:\Program Files\Epic Games\UE_4.27\Engine\Binaries\Win64" 그래도 안 될 경우 : 해당 UnrealVersionSelector.exe 파일을 관리자 권한으로 한 번 실행시켜, 레지스트리에 등록 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/b08bi5/btrH3aUr6TG/M2Okjt9BLTIApMpMikRiRk/img.webp)
Udemy 관련 개념 정리 및 Dev Log 를 기록하고 있습니다! Monobehaviour 유니티에는 Monobehaviour 라는 클래스가 있다. 씬에서 GameObject 로 사용하는 클래스는 Monobehaviour 를 상속하게 되는데, Monobehaviour 에는 다양한 내장 메소드들이 있다. Awake, Start 처럼 초기화에 쓰이는 녀석도 있고, OnEnable 이나 OnDisable 처럼 해당 게임 오브젝트를 껐다 킬때 ( SetActive( ) 함수 호출 혹은 .enabled 값 변경 ) 호출되는 함수들도 있다. 중요한 것은, 어떤 함수가 어떤 순서로 호출되는지를 알아야 한다는 것이다! 이 링크에 정리된 사진을 가져온 것이다. 특히 주의해야 할 사항으로는, Spawner 클래스에서 생..