본문 바로가기

IT/Game10

게임 프로그래밍 패턴 11장 ~ 13장 (22. 06. 09) 5주차 (22. 06. 09) 행동 패턴 게임 내 개체들이 해야 할 일을 알려주는 대본에 해당하는 행동behavior. Chapter11. 바이트 코드 가상 머신 명령어를 인코딩한 데이터로 행동을 표현할 수 있는 유연함을 제공. 성능과 안정성을 위해 C++ 같은 중량 언어heavyweight language를 사용. ⇒ 하드웨어 성능을 최대한 끌어낼 수 있는 저수준 표현과 버그를 막거나 적어도 가둬두기 위한 풍부한 타입 시스템을 함께 제공. 게임 출시 이후에도 업데이트를 통해서 버그를 고치거나 콘텐츠를 추가할 수 있어야 함. 전부 하드코딩되어있다면 변경사항이 있을 때마다 게임 실행 파일을 패치해야 한다. 심지어 모드mod를 지원해야 한다면? 유저가 게임에서 커스텀을 하고 싶다면? 게임을 빌드하기 위해 컴.. 2023. 6. 25.
게임 제작을 위한 시작해요 언리얼 4주차 4주차 물리 엔진을 활용한 다양한 장치 제작 텔레포트 장치 만들기 게임을 개발하다보면 사람이 하는 일이다보니 액터를 무조건 지정해야함에도 깜빡하고 액터를 지정하지 않는 일이 발생한다. 이런 실수들이 일어나게 되면 액터들이 적은 상태에선 금방 파악이 가능하지만 정말 많아지게 되면 탐지하기가 어려워진다. 실수를 미연에 방지하기 위해 방어 스크립트 코드를 심어두는 것이 좋다. 출력판에서 드래그 후 블루프린트 노드 검색 is Valid ⇒ 해당 속성이 유효한지 체크 Print String ⇒ 게임 상에 로그가 표시되도록 함 SetGamePaused ⇒ 게임을 멈추는 명령어 텔레포트(Teleport) ⇒ 텔레포트 기능 구현 (타깃 지정) Get Actor Transform ⇒ 위치, 회전, 크기. Transfor.. 2022. 10. 30.
게임 제작을 위한 시작해요 언리얼 3주차 3주차 블루프린트를 활용한 움직이는 장치 제작 레벨 불러오기 & 기본 설정 1~2주차 동안 4가지 액터로 구성된 목표지점을 만들어왔었다. 이처럼 스테이지를 만들 때마다 목표지점을 만들기 위해 4가지 액터를 만들고 세팅하는 작업을 반복하게 되면 상당히 번거롭고 관리도 어려워진다. 이런 문제점을 해결하기 위해서 언리얼 엔진은 블루프린트를 제공한다. 블루프린트를 사용하게 되면 단순 반복 기능을 효율적으로 관리할 수 있고, 비주얼 스크립팅(프로그래밍을 잘 모르더라도 노드 기반으로 프로그래밍 할 수 있도록 구성) 기능을 제공하고 있다. 블루프린트 - 소개 다양한 기능을 가지고 있는 액터들을 하나의 액터로 효과적으로 관리할 수 있다. 스스로 움직이는 액터를 스크립팅이라는 시스템으로 프로그래밍을 모르더라도 스스로 알.. 2022. 9. 5.
게임 제작을 위한 시작해요 언리얼 2주차 2주차 레벨 제작을 위한 언리얼 모델링 입문 신규 레벨 구성하기 유연한 레벨 설계를 위해 언리얼 엔진5에서 이번에 새롭게 추가된 모델링 기능을 활용해서 직접 static mesh를 제작해 새로운 점프맵을 만든다. 언리얼 엔진5에서 새롭게 달라진 점 중 하나는 직접 모델링 도구를 지원한다는 점이다. 이 모델링 도구를 활용하게 되면 재밌는 레벨을 손쉽게 제작할 수 있다. 기존에도 빠른 레벨 프로토타이핑을 위해서 geometry라고 불리는 도구를 제공했는데, 이번 모델링 도구는 굉장히 강력한 편이다. 파일 > 새 레벨 > Basic 액터 삭제 : 액터 선택후 Delete 게임을 제작할 때 기본적으로 갖춰야 할 것. 새로운 레벨을 제작하면 가장 먼저 확인해야하는 것은 게임 모드이다. 아웃라이너의 최상단의 레벨을.. 2022. 9. 4.
게임 프로그래밍 패턴 8장 ~ 10장 (22. 05. 24) Chapter8. 이중 버퍼 의도 : 여러 순차 작업의 결과를 한번에 보여준다. 동기 : 본질적으로 컴퓨터는 순차적으로 동작한다. 하지만 사용자 입장에서는 순차적으로 혹은 동시에 진행되는 여러 작업을 한 번에 모아서 봐야할 때(EX. 게임에서의 렌더링 - 유저에게 보여줄 게임 화면)가 있다. 이중 버퍼는 이런 문제를 해결한다. 화면이 그려질 때 깜빡거린다. ⇒ 더블 버퍼링을 사용하지 않아서. progressive : 한번에 한 줄씩 그린다. 모든 라인을 한번에 그린다. interace : 반 씩 그린다 (짝수 / 홀수) (대역폭을 많이 확대하지 못하던 시기에 사용하던 방법) 읽을 메모리와 sync를 맞춘다. 한 곳에만 메모리를 그리다보면 모니터의 읽는 속도와 실제 그리는 속도가 달라서 보여주는 그림이 달.. 2022. 8. 15.
게임 제작을 위한 시작해요 언리얼 1주차 게임 제작의 시작 언리얼 엔진 에디터 소개 - 기본 UI 언리얼 엔진 에디터는 여러 개의 창으로 이루어져 있다. 뷰 포트 언리얼 엔진을 처음 켰을 때 왼쪽에 가장 크게 차지하고 있는 부분. 레벨이라하는 게임 공간을 제작하는 작업 공간. 실제적인 게임 콘텐츠 제작을 담당함. 레벨 우리가 흔히 게임에서 스테이지라고 부르는 것. (게임 제작 용어로 레벨이라고 부른다) 언리얼 엔진에서 레벨은 액터라고 불리는 단위 물체들로 구성되어 있다. 뷰 포트에서 마우스를 클릭해서 레벨에 설치된 액터들을 선택할 수 있다. 선택할 때 마다 오른쪽에 있는 아웃라이너에서 액터 위의 선택 표시가 변경된다. 아웃라이너 뷰 포트 왼쪽에 위치. 레벨과 레벨에 속한 전체적인 액터들의 목록을 관리하는 곳. 디테일 아웃라이너 하단에 위치. 선.. 2022. 8. 14.
게임 프로그래밍 패턴 5장 ~ 7장 (22. 05. 17) Chapter5. 프로토타입 💡 원형이 되는prototypical 인스턴스를 사용하여 생성할 객체의 종류를 명시하고, 이렇게 만든 견본을 복사해서 새로운 객체를 생성합니다. 프로토타입 디자인 패턴 같은 핵앤슬래시 게임을 만든다고 해보자. 몬스터들은 영웅을 잡아먹기 위해 떼지어 다닌다. 몬스터는 ‘스포너spawner’를 통해 게임 레벨에 등장하며, 몬스터 종류마다 스포너가 따로 있다. 게임에 나오는 몬스터마다 Ghost, Demon, Sorcerer 같은 클래스를 만들어보자. class Monster { // 기타 등등.. }; class Ghost : public Monster {}; class Demon : public Monster {}; class Sorcerer : public Monster {}.. 2022. 6. 19.
게임 프로그래밍 패턴 3장, 4장 (22. 05. 09) Chapter3. 경량 어떠한 판타지 게임에서는 거대한 숲을 보여주는 장면이 있다. 이러한 숲을 그리기 위해서는 수천 그루가 넘는 나무마다 각각 수천 폴리곤의 형태로 표현해야 한다. 메모리가 충분하다해도, 이러한 숲을 그리기 위해서는 전체 데이터를 CPU에서 GPU로 버스를 통해 전달해야 한다. 나무마다 필요한 데이터는 아래와 같다. 줄기, 가지, 잎의 형태를 나타내는 폴리곤 메시 나무 껍질과 잎사귀 텍스처 숲에서의 위치와 방향 각각의 나무가 다르게 보이도록 크기와 음영 같은 값을 조절할 수 있는 매개변수 class Tree { private: Mesh mesh_; Texture bark_; Vector position_; double height_; double thickness_; Color bark.. 2022. 6. 12.
게임 프로그래밍 패턴 1장, 2장 (22. 04. 26) 지식, 정보, 처리능력 ⇒ 코드리딩 시 사용. 지식 (Long Term Memory) → 익히면 된다. 정보 (Short Term Memory) → 한계가 있다. 보통 한 번에 12개의 정보까지만 저장할 수 있다고 한다. 처리능력 → 지식과 정보를 활용한 처리 능력. 왜 구조가 필요한가? 얼마나 쉽게 변경할 수 있는가 = 구조가 좋다는 증거이다. Component Pattern (디커플링 패턴) 양쪽 코드 중 한쪽이 없으면 다른 한 쪽을 이해할 수 없을 때를 커플링된 상태라고 한다. 디커플링이 된다는 것은 이해해야하는 양, 신경써야할 양을 줄이는 것과 같다. 코드의 유연성 ≠ 최적화 단순함 = 최소한의 코드로 원하는 목표를 이룰 수 있는 것 커맨드(명령) 패턴 → 객체나 함수에 위임 메멘토 패턴 → 현재.. 2022. 5. 1.
Stateless와 Stateful 이전에 NDC2021에서 서버 아키텍쳐 뜯어먹기!에서 나온 stateful 서버와 stateless 서버에 대해 얘기해보려 한다. 간단히 쿠키런에 stateful한 서버를 구현하기 위한 방식들에 대해 설명해주셨다. Stateless 서버 서버가 유저의 상태를 저장하고 있지 않는다. 필요할 경우 매번 DB 혹은 캐시에서 불러와서 요청을 처리한다. Stateful 서버 서버가 유저의 상태를 저장하고 있는다. 유저의 요청은 서버에 저장된 상태를 바탕으로 처리된다. Stateless 서버와 Stateful 서버의 구분은 다소 모호한 부분이 있기 때문에 이때에 발표에서는 위와 같은 발표로 두 서버를 정의하고 발표가 진행되었다. Stateful이란? 클라이언트와 서버 관계에서 서버가 클라이언트의 상태를 보존하는 것.. 2021. 8. 26.