2023/12/21 TIL
===
오늘 한 일
- 건축 기능 마무리.
오늘은 최종 발표 전 부랴부랴 구현하지 못한 기능들을 마무리했다.
내가 마무리할 부분은 건축 기능이였다.
팀원 중 한분이 이미 기틀은 만들어 주셨었기 때문에 생각보다 간단했다.
먼저, Scriptable 오브젝트를 이용해 건축할 구조물의 데이터를 만들었다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public enum CraftType
{
Structure,
Building,
}
public enum CraftIngrediants
{
Rock,
Wood
}
[CreateAssetMenu(fileName = "Craft", menuName = "New Craft")]
public class CraftData : ScriptableObject
{
[Header("Info")]
public string craftName;
public string description;
public string ingrediants;
public CraftType type;
public Sprite icon;
}
이제 팀원분이 짜놓은 틀에 코드를 집어 넣으면 되는데, 여기서 문제가 생겼다.
먼저 알아야 하는 사실은 우리조는 안전한 협업을 위해 Scene에 넣을 모든 오브젝트들을 프리팹화 시킨 후에 GameManager에서 불러오는 방식을 사용하고 있었다. 팀원분이 미리 짜놓은 건축물 생성 구조는 위의 코드로 생성한 Scritable Object를 건축물 프리팹에 넣은 뒤 불러오는 구조였는데, 위에서 말한 방식으로 인해 프리팹끼리 인스펙터 연결이 힘든 상황이였다.
그러다 생각해낸 방법이 생성할 건축물 프리팹에 ScriptableObject 정보를 넣는 것이 아니라, 건축물 생성 버튼에 ScriptableObject 정보를 넣는 것이였다. 이렇게 만들 경우 UI프리팹에 있는 코드들에 쉽게 접근할 수 있고, 반대로 ScriptableObject 정보를 쉽게 UI에 표시할 수 있었다.
결론: 생각을 약간 비틀어서 만드니 정상적으로 작동하면서도 오히려 코드가 쉬워졌다.
- 이번 프로젝트 회고
이번 프로젝트는 처음하는 3D프로젝트인 만큼 낮선 느낌을 많이 받았다.
3차원이라는 좌표로 인해 다양한 기능들과 개념도 볼 수 있었다.
AI Navigation, 카메라 시점, Light, URP 등 처음 보는 기능들과 개념들이였다.
그래서 그런 탓일까, 기능들을 이해하고 적용하는데 더 많은 시간을 쏟을 수 밖에 없었고 이는 프로젝트에 할애할 수 있는 시간을 단축시키는 결과를 가져왔다.
팀원들에게 민폐를 끼치기는 싫어서 늦게까지 공부했고, 주말도 투자했다.
이렇게 시간을 투자한 덕분일까, 팀원들의 코드를 이해할 수 있었고 도움을 줄 수 있었다.
팀원들도 굉장히 열심히 참여했다. 특히 마감 전날이였던 어제는 다들 밤을 새어가며 프로젝트에 매달렸고, 만족할만한 프로젝트를 만들 수 있었다.
시간이 모자라서 넣지 못한 기능들도 많았고, 실력이 부족해서 넣지 못한 기능들도 많았지만 적어도 후회할 정도로 만들진 않았다고 생각한다.