목록Unreal스터디 (36)
그냥 게임개발자

저번에 Hello, World를 UE_LOG라는 매크로를 통해 화면에 출력시켰죠? 이번에는 우리는 TCHAR와 FString을 배울것입니다. TCHAR TCHAR가 뭐냐? string같은 거다. 진짜 간단하게 이야기하자면 이게 끝이다. 왜 언리얼은 그러면 string을 사용하면 되지 왜 TCHAR를 만들어서 사용하는 거지? 라고 필자는 생각했었다. 일단 역사를 거슬러서 살펴보면 1990년대 후반에 이르러서야 아시아 문자열이 표준화가 되었다 뭐 한국어, 중국어, 일본어 등등 이런거 말이다. 하지만 컴퓨터는 아시아권에서 표준화가 되기도 전에 이미 사용이 되고 있었다. 영어는 1byte로 충분히 표현이 가능했지만, 아시아권 문자는 1byte로 표현이 불가능했었다. 그 때 당시에는 나름 각 국가별로 고유한 문자..

저번에 우리는 Hello, World를 언리얼에서 작동 시켜보았다. 오늘은 언리얼 프로그래밍을 작성하는데 있어 지켜야 하는 프로그래밍 규치, 작성 방법 등을 지정한 가이드라인에 대해서 알아볼 것이다. 위와 같이 이상한 코드는 이해가 잘 가지 않을 것이다. 땀을 왜이렇게 많이 흘ㄹ 사실 절대적으로 좋은 코딩 규칙이란 것은 없다. 그냥 내 팀이나 회사에 맞는 코딩 규칙을 지키는 것이 좋다. 중요한 것은 코딩 표준을 정하고 잘 따르는 것이다. 만약 중간에 프로젝트에 참여한다면 그 코드를 리뷰해보고 그 코딩 표준에 맞게 작성하면 된다. 코딩 규칙을 지키는 이유는 같은 팀이 봐도 이해가 갈 코드가 되어야 하기 때문이다. 즉 프로젝트의 모든 코드는 한 사람이 만든 것처럼 보여져야 한다. 서론이 길었지만 일단 구글 ..

저번 글을보고 이걸 들어왔다면 그래도 각오는 다지고 온거겠네요. 좋아요! 한 번 해봅시다! Hello, World 오늘은 우리가 할 것은 기본적으로 C나 유니티나 언어를 처음 배울 때 썼던 "Hello, World"를 출력해볼거다. 너무 어려운 것들은 나중에 차근차근 설명할테니 두려워하지 말고 따라해보자. 언리얼 엔진 프로젝트를 생성하려고 하면 이런 창이 뜬다. 이 창은 프로젝트를 생성하는 창이다. 우리는 C++ 기준으로 생성할 것이기에 이와 같이 설정해준다 프로젝트 명은 맘에 드는 것으로 경로는 SSD나 M.2에 설치하는 것을 권장한다. 그냥 외장하드나 하드면 많이 느리다. 짜잔 언리얼 엔진이 켜졌네요~ 확실히 유니티랑은 다른 느낌이랄까.. 일단 간지 언리얼 엔진이 가려져있는 콘텐츠 브라우저를 이동시켜..

요새 글을 못썼다... 바쁘기도 했고 쉬는 시간을 좀 가지고 싶었고 여러가지가 사정이 많았다. 이제 차근차근 조금 쉬면서 글을 쓸 것이니 양해 부탁드려요. 일단 시작하기에 앞서, 언리얼을 저와 같이 공부(나는 복습)하기전에 확실하게 이해하고, 넘어가야지~ 라는 것은 접어두자. 왜냐하면 어떤 블로그 글에서 봤는데 너무 뜻깊은 말이 있어서 안가져올 수 없었다. '좋은 이론을 배우는 것도 좋지만, 일단 흥미를 잃어버리면 그게 무슨 의미가 있나?' 라는 것 암튼 되게 간단하고 심플하게 적어보려한다. 우리가 이번에 여기서 할 목표는 다음과 같다. 언리얼 코드 만들고 이해하기 이게 끝이다. 다만 양이 길 뿐이다. 저도 문서나 유튜브 영상이나 강의나 찾아보고 그랬지만 정말 딱 필요한 부분만 캐치하고 싶은데 그게 찾는..
슬랙 보통 메모리를 우리가 확보를 해야 배열을 만들 수 가 있는데 요소를 추가할 때마다 메모리를 하나씩 늘려서 확보하는 작업에 대한 오버헤드가 생기기 때문에 보통은 요청하는 것보다 넉넉한 메모리를 확보해서 그 다음에 데이터를 넣는 방식으로 진행이 된다. 그렇기 때문에 엘리먼트를 삭제한다고 해도 메모리가 바로 해지되지는 않는다. Slack이라는 것은 여유분이다. 사용하지 않아도 사실상 미리 할당된 엘리먼트 저장 슬롯을 남겨주는 것이 효과적이라는 뜻이다. 그런데 이것이 계속해서 남아있으면 불필요한 낭비가 될 수가 있기에 남아있는 것들 조차도 다 제거해서 깔끔하게 정리를 할 수 있다. 문서 내용 배열은 크기변경이 가능하므로, 메모리 사용량이 가변적이다.배열이 추가될 때마다 매번 재할당을 피하기 위해, 얼로케이..

힙 TArray에는 이진 힙 데이터 구조체를 지원하는 함수가 있다. 힙은 부모 노드가 그 자손 노드 전부의 이전 또는 동등한 위치에 있는 이진트리 유형이다. 배열로 구현되면, 트리의 루트노드는 엘리먼트 0이며, N 인덱스 노드의 좌우 자손 인덱스는 각각 2N+1 과 2N + 2이다. Heapify 함수를 사용하여 기존 배열을 힙으로 변환시킬 수 있다. 술부가 있을 수도 없을 수도 있는데, 술부가 없는 버전은 순서 결정에 엘리먼트 유형의 연산자 < 를 사용 TArray HeapArr; for (int32 Val = 10; Val != 0; --Val) HeapArr.Add(val); // HeapArr == [10, 9, 8, 7, 6, 5, 4, 3, 2, 1] HeapArr.Heapify(); // H..
연산자 배열은 일반적인 값 유형으로, 일반적인 생성자 복사나 할당 연산자를 통해 복사할 수 있다. 배열은 엘리먼트를 엄격히 소유하기에, 배열을 복사하면 '깊이'가 있어, 새 배열에는 자체적인 엘리먼트 사본이 생김 TArray ValArr3; ValArr3.Add(1); ValArr3.Add(2); ValArr3.Add(3); auto ValArr4 = ValArr3; // 복사 시작 // ValArr4 == [ 1, 2, 3 ]; ValArr4[0] = 5; // ValArr3 == [ 1. 2. 3 ]; // ValArr4 == [ 5, 2, 3 ]; Append 함수의 대안으로, operator += 를 통해 배열을 연결시킬 수 있다. ValArr4 += ValArr3; // ValArr4 == [ ..
제거 일단 제거는 인서트와 마찬가지로 배열에서 엘리먼트를 지우는데 있어 전체적으로 데이터 변동이 일어나기 때문에 그렇게 효율은 좋지 않다고 볼 수 있다. Remove 배열에서 엘리먼트를 지울 수 있다. operator==에 따라 제공한 것과 동일한 것으로 간주되는 엘리먼트를 모두 지운다. TArray ValArr; int32 Temp[] = { 10, 20, 30, 5, 10, 15, 20, 25, 30 }; ValArr.Append(Temp, ARRAY_COUNT(Temp)); // ValArr == [10, 20, 30, 5, 10, 15, 20, 25, 30] ValArr.Remove(20); // ValArr == [10, 30, 5, 10, 15, 25, 30] RemoveSingle 배열에서 ..