진행 기간: 2024. 07 ~ 2025. 02
사용한 기술 스택: C#, MR, Meta Quest 2, Meta Quest 3, Unity, VR
한 줄 설명: VR / MR 환경을 이용한 퍼즐 / 슈팅게임
개발 인원(역할): 개발자 6명 + 기획자 3명 + 디자이너 3명
비고: 팀 프로젝트 /뉴콘텐츠 아카데미 단기과정 2기
- 낮 기믹
- 컨트롤러 오브젝트 인터렉션을 이용한 퍼즐 해결 로직 구현(핸드 트래킹 및 컨트롤러 사용)
- Snap 인터렉터를 이용한 퍼즐 기믹 구현
- 밤 기믹
-
밤 전투씬 시스템 구현
-
FSM을 사용한 몬스터 상태 및 피격 공격 구현
-
오브젝트 풀링을 사용한 몬스터 소환
- 오브젝트 풀링 코드
MemoryPool.cs
using System.Collections; using System.Collections.Generic; using UnityEngine; public class MemoryPool : MonoBehaviour { // Start is called before the first frame update private class PoolItem { public bool isActive; public GameObject gameObject; } private int increaseCount = 5; private int maxCount; private int activeCount; private GameObject poolObject; private List<PoolItem> poolItemList; public MemoryPool(GameObject poolObject) { maxCount = 0; activeCount = 0; this.poolObject = poolObject; poolItemList = new List<PoolItem>(); InstantiateObjects(); } public void InstantiateObjects() { maxCount += increaseCount; for (int i = 0; i < increaseCount; ++ i) { PoolItem poolItem = new PoolItem(); poolItem.isActive = false; poolItem.gameObject = GameObject.Instantiate(poolObject); poolItem.gameObject.SetActive(false); poolItemList.Add(poolItem); } } public void DestroyObjects() { if (poolItemList == null) return; int count = poolItemList.Count; for(int i = 0; i < count; ++ i) { GameObject.Destroy(poolItemList[i].gameObject); } poolItemList.Clear(); } public GameObject ActivatePoolItem() { if (poolItemList == null) return null; if (maxCount == activeCount) { InstantiateObjects(); } int count = poolItemList.Count; for (int i = 0; i < count; ++i) { PoolItem poolItem = poolItemList[i]; if(poolItem.isActive == false) { activeCount ++; poolItem.isActive = true; poolItem.gameObject.SetActive(true); return poolItem.gameObject; } } return null; } public void DeactivatePoolItem(GameObject removeObject) { if (poolItemList == null || removeObject == null) return; int count = poolItemList.Count; for(int i = 0; i < count; ++i) { PoolItem poolItem = poolItemList[i]; if(poolItem.gameObject == removeObject) { activeCount --; poolItem.isActive = false; poolItem.gameObject.SetActive(false); return; } } } public void DeactivateAllPoolItems() { if (poolItemList == null) return; int count = poolItemList.Count; for (int i = 0; i < count; ++i) { PoolItem poolItem = poolItemList[i]; if(poolItem.gameObject != null && poolItem.isActive == true) { poolItem.isActive = false; poolItem.gameObject.SetActive(false); } } activeCount = 0; } }
-
낮 퍼즐 1 → 금고 돌리기
맵에 숨겨져 있는 힌트를 찾아 금고의 비밀번호를 알아내 금고를 열어라!
낮 퍼즐 2 → 보안 시스템 연결
조이스틱과 버튼을 이용해서 컴퓨터에 있는 보안 시스템을 작동시켜 연결하자
낮 퍼즐 3→ 컴퓨터 화면에 있는 단서를 활용하여 상질물을 나열하여 기믹을 풀어보자
⇒ 앞에서 다가오는 적들을 물리쳐서 게임을 클리어하라!
- Unity
- C#
- XR Interaction Toolkit
- Oculus Interaction SDK
- Git
- Notion
- Figma
- Jira
- Visual Studio




