프로젝트의 생성 실절적인 개발에 들어가기에 앞서, 필요한 패키지(addressable, unitask 등) 추가, 깃 연동, Github Action을 사용한 CI 구축을 하기로 마음을 먹었다. 원래는 어드레서블을 사용한 리소스 관리 시스템도 추가 할 예정이었지만, 마음에 드는 에셋을 쇼핑해야 하거니와, 아직 확실한 게임성이 안나왔기에, 추후 작업으로 미뤄 둘 예정이다. 실제로 진행하면서 사진을 찍었어야 하는데 그러지 못하였다. 이점은 반성 토록 하고, 일단 CI 추가 한 것만 올리도록 하겠다. 이전 회사에서 Game-ci를 사용하여 파이프라인을 만든 적이 있는 데, 그때와 현재 방식이 조금 달라져서 새롭게 main.yml을 만들어 줬다. on: [push, pull_request] jobs: build..
사이드 프로젝트의 시작 처음 게임 개발을 하고자 했을 때, 무작정 모바일 게임을 하나 만들어서 출시를 한적이 있다. 너무 조잡한 게임이었고, 언젠가 실력을 쌓아 더 좋은 게임을 만들고 싶다고 생각했다. 그리하여, 오늘 실제로 내가 만들고 싶은 게임을 직접 기획, 프로젝트 관리, 개발, 배포 등 모든 작업을 아울러서 해보자고 생각했다. 단순히 포트폴리오나 레벨업을 위한 게임이 아닌 실제 나의 아이디어와 현재 내가 낼수 있는 아웃 풋의 한계를 보고자 개발을 해보려고 한다. Touch Craft 게임 제목을 touch craft라고 정했다. 스타 크래프트와 같은 rts 게임을 모바일에서 매우 간단하고 접근성을 확 낮추어 유저들에게 간단하며, 빠르게 승부를 볼 수 있는 게임을 제공하고자 한다. 아직 게임의 전체..
ecs란? Unity ecs의 ecs는 entity component system으로, 기존의 component system과 다른 구조를 가지고 있다. ecs는 Dots, data oriented technology stack를 기반으로 설계된 시스템이다. 간단하게 축약하자면, 기존의 방식은 그대로 유지하되, 게임오브젝트로 작업을 하던것이entity로 수행을 하게 되는 것이다 기존 component system 기존의 component system은 우리가 생성한 gameobject에 component를 붙여서 object를 완성해 나간다. 이러한 component들은 개별로 메모리에 저장이 된다. 이때, component 저장이 되는 메모리는 랜덤한 위치에 저장이 되게 된다. 이 구조로는 많은 캐시 ..
memory leak은 성능 저하의 원인중 하나이고, 최적화를 위해 잡아야 하는 문제들중 하나이다. unity 내부에서 memoty leak을 유발 할 수 있는 이슈중 하나로, 잔류 unity instance가 있다. 이 경우 어디서 어떤 오브젝트가 누수가 되고 있는 지 확인하기가 어렵다. 이현상에 대해서 잠깐 짚고 넘어가보자. 실제로 Unity Engine은 C#의 Managed shell과 C++로 이루어진 Native 엔진 코드로 이루어져 있다. C#에 할당된 오브젝트를 Wrapper object, C++에 할당된 오브젝트를 Native Object라고 부르겠다. 잠깐 설명하고 넘어가자면, 실질적인 오브젝트는 Native Object로 실직적인 process는 여기에 존재한다. Wrapper obe..
틀린 데이터 동기화 메커니즘을 선택하면 버그가 발생할 수 있으며, 대역폭을 많이 사용하고 코드를 더 복잡하게 만들 수 있다. Netcode for GameObjects (Netcode)은 플레이어 간의 정보 동기화를 위한 두 가지 주요 방법을 제공한다. RPC (원격 프로시저 호출)와 복제 상태 (NetworkVariable) 두 가지 방법 모두 네트워크를 통해 메시지를 전송하는 데, 어떻게 메시지를 전송할지에 대한 논리와 설계는 둘 중 하나를 선택해야 한다. NetworkVariables vs RPC RPC는 순간적인 이벤트, 수신될 때에만 유용한 정보에 사용 NetworkVariables은 영구적인 상태, 순간 이상 유지되는 정보에 사용 사용할 방법을 빠르게 선택하는 방법은 자신에게 다음과 같다 : ..
UML 프로그램 구조를 나타내기 편하게 해준다. 주로 클래스 다이어 그램으로 프로그램 구조를 생각하려 했는 데, 전제 프로세스를 생각하려면 uml도 고려하는 게 좋다는 것을 다시금 깨닫게 된다. 시퀀스 다이어그램 & 액티비티 다이어그램 시퀀스 다이어그램 : 객체 간 메시징 흐름을 일목요연하게 표현 액티비티 다이어그램 : 자세하게 프로그램의 실행 방식을 그림으로 묘사 게임 플레이 네트워킹 이 책에서는 3가지로 크게 나타내고 있는 데, 서버에서 모든것을 처리 하기, 클라이언트에서 렌더링하기, 추측항법(prediction) 사용하기 이렇게 있다. 기대했던 부분인 만큼 설명 부족하여 조금 실망인 파트였다.. 모든 역할을 서버에서 하기 가장 고전적인 방식이다. 클라이언트에선 입/출력만 담당하면 되고, 서버에서 로..
유니티로 시야각 구현 using System.Collections; using System.Collections.Generic; using UnityEngine; public class FovTest : MonoBehaviour { public struct ViewCastInfo { public bool hit; public Vector3 point; public float dst; public float angle; public ViewCastInfo(bool _hit, Vector3 _point, float _dst, float _angle) { hit = _hit; point = _point; dst = _dst; angle = _angle; } } public struct Edge { public..
온라인 게임에서 게임 서버 컴퓨터 네트워크 어딘가에 서버 프로그램이 실행된 상태로 있으면, 여러 사람이 그 서버에 접속해서 게임을 즐긴다.게임 서버를 게임 플레이어가 자유롭게 가져다 실행하는 것도 가능했지만, 일부 게임은 일반 대중에게 공개되지 않고 게임 사업자만 독점적으로 게임 서버를 실행해 놓기도 했다. 지금 온라인 게임은 사실 이러한 형태이다. 서버의 역할 싱글 플레이에서는 모든 입출력과 연산 처리가 컴퓨터 한 대 안에서 일어난다. 따라서 컴퓨터 네트워크 자체가 쓰일 일이 없다. 그러나 온라인 게임에서는 플레이어 한 명 이상이 게임을 즐기기 때문에 플레이어 세 명 이상이 한 공간에 있다면, 컴퓨터 네트워크를 통해 상대방 모습이 생생하게 전달되어야 한다. 대부분 온라인 게임에서는 클라이언트에서 게임 ..