분류 전체보기 280

언리얼 엔진의 메모리 관리 (2) ~ 직렬화

저번 포스팅에서는 언리얼 엔진이 메모리를 관리하는 방법 중 하나인 가비지 컬렉터에 대해 알아보았습니다.이번 포스팅에서는언리얼 엔진에서 메모리, 그 중에서도 오브젝트를 관리하는 방법 중 하나인 직렬화에 대해 알아보겠습니다. 1) 직렬화(Serialization)란?직렬화는 오브젝트나 연결된 오브젝트의 묶음을 바이트 스트림으로 변환하는 과정을 의미합니다.이때 직렬화는 바이트 스트림에서 오브젝트로 변환하는 과정도 포함해서 의미합니다. 직렬화로 얻을 수 있는 장점은 다음과 같습니다. 1) 현재 프로세스의 상태를 저장하고 필요한 경우에 복원이 가능합니다.2) 현재 인스턴스의 정보를 복사하여 다른 프로그램에 전송이 가능합니다.3) 네트워크를 통해 현재 프로세스의 상태를 다른 컴퓨터에서 복원이 가능합니다.4) 데이터..

Package Manager를 통해 패키지가 설치되지 않는 문제

유니티는 Package Manager를 통해 패키지를 설치하는 것을 권장합니다.그런데 Package Manager를 사용하여 패키지를 설치하는 경우 설치가 이뤄지지 않는 문제가 발생합니다.  위와 같이 로그가 남겨지며 패키지가 제대로 설치되지 않는 문제가 발생합니다.검색을 여러 번 해보며 답을 찾아봤지만,캐시 지우기, 유니티 버전 업 등의 여러 해결책은 큰 도움이 되지 않았습니다.따라서 이 포스트에서 제가 위의 문제를 어떻게 해결했는지 알려드리겠습니다. C:\Users\사용자이름\AppData\Local\Unity\cache 설치 과정에서 따로 경로를 설정하지 않았다면 유니티에서는 패키지와 관련된 캐시를 위의 경로에 저장합니다.위의 경로에는 파일이 2개 존재하는데 각각 다음과 같습니다. (1) npm 폴..

Mixamo를 통한 간단한 애니메이션 포즈 만들기

게임을 만들다 보면 여러가지 애니메이션 포즈를 사용해야 할 필요가 있습니다.이럴 때 Adobe에서 지원하는 Mixamo를 이용하면 쉽게 애니메이션에 필요한 포즈를 만들 수 있습니다. 1) Mixamo제일 먼저 Mixamo로 이동합니다.https://www.mixamo.com/ Mixamo www.mixamo.com 그 후 상단의 Characters에서 사용할 캐릭터를 지정합니다.  캐릭터를 선택하였다면, 캐릭터에 적용할 애니메이션을 지정해야 합니다. 애니메이션까지 지정했다면 우측의 Download를 통해 다운로드를 진행합니다.  만들고 있는 게임의 설정에 맞게 프레임이나 여러 설정을 조정하여 다운로드해주시면 됩니다.다운로드된 파일을 확인해보면 위와 같이 애니메이션과 메쉬가 있는 것을 확인할 수 있습니다...

언리얼 엔진의 메모리 관리 (1) ~ 가비지 컬렉션 시스템

이전의 포스팅에서 언리얼 엔진은 C++을 사용함으로서장점은 장점대로 취하면서, 단점은 현대 객체지향 언어의 특성을 사용하여 극복한다고 말씀드렸습니다. 특히, 포인터를 사용함으로써 발생하는 문제는 메모리에 직접적인 손상을 가할 수가 있기에 매우 중요하게 다뤄야 합니다.포인터를 사용함으로써 발생하는 문제는 크게 다음의 3가지로 분류할 수 있습니다. 1) 메모리 누수 : delete가 되지 않아 heap에 메모리가 그대로 남겨짐 이로 인해 지속적인 자원 낭비 발생2) 허상 포인터 : nullptr는 아니지만, delete된 오브젝트의 주소를 가리키는 포인터3) 와일드 포인터 : 값이 초기화되지 않아 엉뚱한 주소를 가리키는 포인터 이번 포스팅에서는 언리얼 엔진이 현대적인 객체지향 언어의 특징, 그 중에서도 가비..

멀티쓰레드란?

게임의 서버를 구동하는 방식 중 하나인 멀티 쓰레드 방식에 대해 알아보겠습니다.이를 알기 위해선 우선 사전정보에 대해 알아두어야 할 필요가 있습니다. 1) 사전정보프로세스 다른 말로 프로그램이라하는 것은 서버나 클라이언트처첨 현재 실행중인 프로그램을 의미합니다.우리가 개발 언어를 통해 작성한 프로그램 역시 프로세스로서 작동하게 됩니다. 그리고 쓰레드는 실질적으로 프로세스를 실행시키는 주체를 의미합니다.따라서 프로세스는 절대 자체적으로 실행할 수 없고 반드시 쓰레드가 실행되어야만 실행할 수 있습니다. 마지막으로 CPU 코어 즉, 프로세서가 있습니다.프로세서는 쓰레드를 실행시키는 주체를 의미합니다. 정리하면, 다음과 같습니다. 우리가 알고있듯이 컴퓨터는 하나의 프로세스만 실행시키지 않습니다.메인 프로세스가 ..

컴퓨터 구조 2024.07.27

언리얼 C++ - 구조체

C++을 통해 동작하는 무언가를 만들게 되면, 대부분의 상황에서는 클래스를 사용합니다.클래스라는 거대한 틀에서 찍어낸 인스턴스라는 객체를 사용하여 프로그램을 구성하는 것이 객체지향 프로그래밍의 기본구조이기 때문입니다. 그런데, 다른 코드 예시를 살펴보면 눈에 띄는 구조가 하나 있습니다.구조체(Struct)라는 것인데, 살펴보면 클래스와는 그렇게 큰 차이가 없는 듯 합니다.하지만, 클래스처럼 구조체 역시 프로그램의 구성에 있어서 매우 유용하고 중요한 개념입니다. 이러한 구조체를 언리얼 엔진에서는 어떻게 사용하는지 한번 알아보겠습니다. 1) 구조체에 대하여구조체는 클래스와 마찬가지로 자신만의 멤버를 갖게 됩니다.하지만 클래스가 멤버와 더불어 수행하는 동작만을 갖고 있다면구조체는 오로지 멤버에만 집중하는 것이..

언리얼 C++ - 자료 구조 ~ TMap

https://monstrosite.tistory.com/44 언리얼 C++ - 자료 구조 ~ TSethttps://monstrosite.tistory.com/43 언리얼 C++ - 자료 구조 ~ TArray언리얼 엔진은 자체 제작한 자료 구조 라이브러리 줄여서 UCL(Unreal Container Libarary)를 제공합니다.이는 언리얼 엔진을 안정적으로 지원하며monstrosite.tistory.comTSet에 이은 언리얼 C++의 자료구조 마지막 포스트입니다.이번 포스트에서는 TMap에 대해 알아보도록 하겠습니다. 1) TMapTMap에는 std::map이 대응됩니다. 이번에도 std::map과 TMap과의 차이점을 한번 알아보겠습니다.우선 std::map의 특징을 간단하게 적어보겠습니다.set과..

언리얼 C++ - 자료 구조 ~ TSet

https://monstrosite.tistory.com/43 언리얼 C++ - 자료 구조 ~ TArray언리얼 엔진은 자체 제작한 자료 구조 라이브러리 줄여서 UCL(Unreal Container Libarary)를 제공합니다.이는 언리얼 엔진을 안정적으로 지원하며 다수의 오브젝트 처리에 유용하게 사용할 수 있습니다.monstrosite.tistory.com위의 포스팅에서 이어지는 이번 포스팅에서는 언리얼 C++의 자료구조 중 하나인 TSet에 대해 알아보겠습니다.TSet 역시 TArray와 마찬가지로 언리얼 엔진에서 제공되어 많이 사용되는 자료구조입니다. 1) TSetTArray는 std::vector와 큰 차이점이 존재하지 않았습니다.그러나 TSet은 std::set과는 큰 차이점이 존재하는데, 이..

언리얼 C++ - 자료 구조 ~ TArray

언리얼 엔진은 자체 제작한 자료 구조 라이브러리 줄여서 UCL(Unreal Container Libarary)를 제공합니다.이는 언리얼 엔진을 안정적으로 지원하며 다수의 오브젝트 처리에 유용하게 사용할 수 있습니다.이번 포스팅에서는 언리얼 엔진의 자료 구조에서 TArray에 대해 알아보겠습니다. 1) TArrayTArray는 동적 배열 자료구조입니다. 다시 말해 C++의 std::vector와 유사한 성격을 가집니다. 게임을 제작하는 경우에 동적 배열 자료구조를 효과적으로 활용하는 것이 좋은데, 이유는 다음과 같습니다.  데이터가 순차적으로 모여있어 메모리를 효과적으로 사용가능하고 또 캐시 효율이 높습니다.임의의 데이터에 대한 접근이 빠르고, 빠른 속도로 원소를 순회하는 것이 가능합니다.위의 특징에서 알..

Input Manager와 Input System

유니티에서는 두 개의 입력 시스템을 제공합니다.구형 입력 시스템인 Input Manager와 신형 입력 시스템인 Input System입니다. 사용자의 키 변경에 대응하기 위해 개발된 Input System은 기존의 Input Manager와는 다른 설정방법을 갖고 있습니다.저 역시도 이를 사용하는 방법을 배우는데 많은 문제를 겪어 Input Manager와 Input System을 비교해가면서 설명드리고자 합니다. 1) Input ManagerInput Manager는  Input.GetAxis() 함수로 입력값을 읽어들입니다.이때 GetAxis의 인자는 다음의 과정으로 확인할 수 있습니다.  GetAxis의 인자로 사용할 수 있는 것은 위의 Name입니다.위의 문자열을 통해 GetAxis는 축을 인지..