본문 바로가기

전체 글

(336)
[간식의 유니티 기초] Update와 FixedUpdate, 도대체 뭐가 다른 건가요? 이 글에는 인프런 파트너스 링크가 포함되어 있습니다. 이 링크를 통해 구매하시면 제가 수익을 받을 수 있어요. 🤗들어가며유니티를 처음 배우면서 가장 혼란스러웠던 것 중 하나가 바로 Update와 FixedUpdate의 차이였습니다. "둘 다 매 프레임 실행되는 거 아니야?"라고 생각했는데, 실제로 캐릭터 이동을 구현하다가 물리 연산이 이상하게 동작하는 걸 보고 나서야 제대로 공부하게 되었습니다.이 글은 유니티를 시작한 지 얼마 안 된 분들, 특히 "Update에 다 넣으면 되는 거 아닌가?"라고 생각하시는 분들을 위한 글입니다.게임 루프란?기본 개념게임은 영화와 비슷합니다. 영화가 초당 24프레임의 이미지를 빠르게 보여주듯, 게임도 매 프레임마다 화면을 갱신합니다. 이 과정을 반복하는 것이 게임 루프(..
라이브 게임 에셋 관리 개선기 - 2.메모리 사용 절감 인트로저번 글에서, 게임이 오래 지속적으로 업데이트되면 컨텐츠가 계속해서 늘어나게 되고, 이를 따로 관리하기 위해 에셋 번들 등의 기법을 통해 에셋을 빌드와 분리해서 관리하기도 한다는 것에 대해 이야기하였다. 이렇게 빌드와 에셋이 분리되더라도 게임을 실행시키기 위해서는 빌드 파일과 온라인에서 별도로 다운받은 에셋들을 동시에 메모리에 올려야 한다. 즉, 게임이 계속 개발되며 리소스가 늘어나게 되면 메모리에 로드해야 하는 에셋들의 수도 늘어난다는 뜻이다.현재 애플 iOS의 최신 기기인 iPhone 16 Pro Max의 경우에도 RAM 용량은 8GB이며, 조금 구버전의 디바이스인 iPhone 12의 경우 RAM 용량은 4GB로, 위 프리코네의 추가 리소스를 한 번에 담을 수 없는 크기이다. 그리고 전 세계 사..
라이브 게임 에셋 관리 개선기 - 1.어드레서블 에셋 도입 인트로게임에는 일반적으로 서비스 앱보다 훨씬 많은 리소스가 사용된다. 이는 게임이 사용자에게 지속해서 재미와 몰입감을 제공하기 위해 풍부한 컨텐츠와 동적인 경험이 필요하기. 만약 우리가 게임을 다운받았는데 게임 캐릭터는 다 똑같이 생긴 졸라맨 뿐이고 공격 커맨드가 하나뿐인 액션게임이었다고 생각해보자. (엥 이거 개꿀잼 게임 슈퍼액션히어로아닌가?) 이렇게 만들어도 게임이 재밌을 수는 있으나, 대부분은 대충 만든 디지털 쓰레기 게임이라고 생각하고 게이머들이 관심을 안 줄 것이다.게임에는 보통 대규모의 이미지와 3D모델들이 필요하며, 일반적인 서비스 애플리케이션보다 리소스가 집약적으로 사용된다. 현대의 컴퓨터와 모바일 기기가 성능이 개선되었음에도, 여전히 프로그램 최적화에 대한 필요성은 존재한다. 특히 모바일..
이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해 수강 후기 해당 강의를 듣게된 이유는 언리얼 전문 프로그래머로써 기초를 다지기 위해서였고, 그 중에서도 멀티플레이 게임에 관심이 있어서 였습니다. 이와 관련된 내용들은 아래 '이전 글' 섹션에 있는 글들에서 작성해두었습니다. 해당 강의는 언리얼 게임 프레임워크를 이용하여 위 영상과 같은 게임 컨텐츠를 만드는 강의로, 언리얼 cpp를 통해 게임을 만들어보려는 모든 분들에게 한번 들어보는걸 추천하는 강의입니다. 파트1의 경우 사람에 따라서 과한 내용일 수 있다고 생각하고, 파트3의 경우 진입장벽이 높다고 생각하기 때문에 이득우님의 언리얼 강의 시리즈로 개발을 입문하시려는 분은 해당 강의를 통해 시작을 해보시는게 어떨까 하는 생각이 듭니다. 강의의 특징은 코드의 퀄리티가 높다는 점입니다. 프로젝트에서도 스크립터들을 레이..
이득우의 언리얼 프로그래밍 Part1 - 언리얼 C++의 이해 수강 후기 약 3년간 유니티 클라이언트 프로그래머로 근무하다가 새로운 기술에 도전해보기 위해 언리얼을 공부하고자 마음먹었습니다. 프로그래밍 엔지니어 출신으로써 c++언어를 이용해서 언리얼에 접근해보고자 했는데, 대부분의 튜토리얼이 블루프린트로 되어있어서 학습의욕이 안나던 중 이득우님이 언리얼 c++강의 시리즈를 출시해주셔서 수강하게 되었습니다. 언리얼은 유니티와 함께 가장 대표적인 게임 엔진으로 알려져 있는데, 유니티와 달리 개발을 시작하기 위한 진입장벽이 높은 것으로 유명합니다. 그 큰 이유중 하나가 언리얼은 엔진에서 제작할 수 있는 프로젝트의 구조가 어느정도 잡혀있는 상태에서 시작하기 때문에 작업을 위해서는 그 구조를 일단 어느정도 파악한 후 접근해야 한다는 인식이 있기 때문이였습니다. 저는 이득우님의 언리얼 ..
이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해 수강 후기 언리얼 엔진에서 제공해주는 멀티플레이 기능을 학습하기 위해 해당 강좌를 수강하였습니다. 지난 파트2에서 진행했던 프로젝트를 기반으로 멀티플레이 기능을 추가하고 다듬는 식으로 강의가 진행되었습니다. 주요 강의 내용을 정리하면 다음과 같습니다 - 액터의 리플리케이션(연관성, 우선권) - 언리얼 인사이트를 통한 패킷분석 - RPC - 움직임 리플리케이션 분석과 신규 움직임 추가 - 게임모드 & 게임스테이트 & 플레이어 스테이트 확장 파트1 완강 이후 파트2를 반정도 듣다가 파트3 내용을 먼저 듣고싶어서 완강까지 달렸는데, 특히 파트3을 진행하며 배운 내용들이 귀하다는 생각이 들었습니다. 네트워크 멀티플레이 게임에 대한 내용을 이렇게 접근하기 쉽게 정리한 자료를 찾기도 힘들기도 하고, 이 강의에서 배운 내용의 ..
[Unity] 가비지 컬렉션, 베스트 프래틱스 이 글은 unity에서의 가비지 컬렉션에 대해 알아보기 위해 정리한 글입니다. 초반부에는 유니티 공식문서를 기반으로 내용을 정리하고, 후반에는 참고한 글들과 개인적 경험을 바탕으로 글을 작성하겠습니다. 공식문서(매뉴얼) 정리 내용 Unity는 응용 프로그램에서 메모리를 처리하기 위해 세 가지 메모리 관리 레이어를 사용합니다 - 관리되는 메모리: 관리되는 힙과 가비지 컬렉터를 사용하여 자동으로 메모리를 할당하는 제어되는 메모리 레이어 - 관리되지 않는 메모리: 가비지 컬렉터를 사용하지 않는 메모리 - 네이티브 메모리: Unity에서 엔진을 구동하는 데 사용하는 c++ 메모리. 가비지 컬렉터는 애플리케이션에서 메모리를 관리하는 가장 쉬운 방법이지만, 메모리 해제/할당 타이밍을 예측할 수 없기 때문에 불안정한..
[EMC++] 소개 소개 c++11의 변화의 폭은 매우 크다 - auto선언, 범위 기반 for 루프, 람다 표현식, 오른값 참조 등등.. - 새로운 동시성 기능 - nullptr와 별칭 선언 등장 - 스마트 포인터 - 객체 이동 이 책은 c++11과 c++14의 기능들 자체가 아니라, 그 기능들의 효과적인 적용 방법을 서술하는 데 전념 c++11에서 가장 널리 쓰이는 기능은 아마 이동 의미론(move semantics) - 오른값(rvalue)에 해당하는 표현식과 왼값(lvalue)에 해당하는 표현식이 구분됨 - 오른값은 이동 연산이 가능한 객체를 가리키지만, 왼값은 일반적으로 그렇지 않음 - 일반적으로, 주소를 취할 수 있다면 왼값, 없다면 오른값 함수 호출의 맥락에서, - 인수(argument): 함수에 전달한 표현식..