[포트폴리오] Unity-은재팜

Date:     Updated:

카테고리:

태그:

프로젝트 내용

은재팜은 아쿠아포닉스 기술을 활용한 스마트팜입니다.

은재팜의 인프라를 넓히기 위해 게임이라는 플랫폼을 통해 게임을 하면 실물 채소를 얻을 수 있는 구조를 만드려고 했던 프로젝트 입니다.

기술 스택

  • Client : Unity 2022.3.23f / C#
  • Server : Ubuntu 22.0.3 / Asp.net 8.0
  • DataBase : MariaDB

기술적 내용

  • UI가 중요한 게임이었음. UI가 엄청 많아서, UI를 관리하는 메니저를 SingleTon으로 설정하고, PoolManager를 설정하여, UI의 인스턴스가 한개씩만 만들어지고, 그 만들어진 인스턴스를 공유하는 식으로 사용했음. 또한, 추상화와 제네릭을 사용하여 함수를 유연하게 만들었고, UI에 콜백을 이용하여 행동을 유연하게 정의하였음
  • UI에 중복되는 기능들이 많았음. UnityEngine.UI 의 의존성을 최대한 제거하기 위해, 컴포넌트 마다 Wrapper 클래스를 만들었고, 중복되는 기능들을 해당 클래스에 정의하여 사용하였음
  • 2D Grid 시스템을 도입하였음
  • 유니티의 인스펙터에 직접 참조를 넣는것은, 커플링을 증가시킬 수 있고, 변수 네이밍이 바뀌거나, 메타파일이 조금이라도 수정되면 바인딩이 풀리는 문제가 있음. 그것을 막고자 ResourceManager를 통해 인스펙터의 의존성을 제거함
  • 유니티에서는 하이어라키 계층 구조에 따라서 유니티의 이벤트가 진행되는 것이 아니라, 같은 Start 함수라면 실행 순서를 보장하지 못하는 문제가 있음. 따라서, .Lazy Init 기법을 사용하여 객체들의 초기화 순서를 보장하는 식으로 해결함
  • 서버를 구축하여 백엔드 인프라 구성
  • Ubuntu의 그래픽카드 드라이버를 만지다가, 어떤 설정을 잘못 만졌었음. 그 뒤로, 랜카드 드라이버가 먹통이 되어, Ubuntu를 리셋한 경험이 있음. 여기서, 가상화 시스템과 이미지 파일로 서버를 백업할 수 있다는 사실을 알게됨
  • Asp.net 과 Swagger 를 활용하여 API 서버 구축. ORM 을 사용하여 데이터베이스 자동화를 구현

배운점

  • 유니티를 배우고, 처음으로 유니티를 활용하여 상용 프로그램을 제작하였음. 여기서, 학생의 마음가짐이 들어갔던거 같음. 우선, 프로젝트를 만들고 난 후에, 배운점을 정리해야 하는데, 프로젝트를 하는 도중에 자꾸 리팩터링하여 개발 속도가 엄청 더뎠음
  • 성공한 프로젝트에는 좋은 코드 구조가 있겠지만, 좋은 코드 구조가 있다고 해서 무조건 성공하는것은 아니다 라는것을 배움
  • 2D에서는 GridSystem에 고질적인 문제인 Z fighting을 해결할 방법이 모호하다는것을 알게됨. Grid가 중요한 게임이면, 3D 기반으로 만들고, 2D처럼 보이게 하는 흔히 2.5D라는 기법을 도입할 수 있다는 것을 알게됨
  • 게임마다 효율적인 구조가 있다는것을 깨달음
  • 서버 구축 방법을 알게 되었고, 인프라를 구축하며 인프라에 이해도가 생겼음
  • 게임을 만들다가 서버의 쿨러가 고장났던적이 있었음. 어떻게든 소프트웨어적으로 풀려고 했는데, 결국 찾아보니 하드웨어 문제였음. 디버깅을 할 때, 어느 한 곳에 매몰되면 안된다는것을 알게됨

Portfolio 카테고리 내 다른 글 보러가기

댓글 남기기