본문 바로가기
게임 개발 일지/내일배움캠프 TIL

ScriptableObject / 메타 파일의 중요성

by 빛하_ 2023. 12. 1.

 

 

Unity 게임 개발 입문 
팀프로젝트 : Arkanoid24

 

ScriptableObject 사용한 level design

 

벽돌깨기에 사용할 맵을 저장하기 위해 Scene을 여러 개 생성하고 벽돌 prefab을 보관하려고 했다.

그러던 중 팀원이 ScriptableObject 를 추천해줘서 검색해보았다. 

 

ScriptableObject란 대량의 데이터를 저장하기에 적합한 데이터 컨테이너이다.

값의 사본이 생성되는 것을 방지해 프로젝트의 메모리 사용을 줄일 수 있다.

연결된 MonoBehaviour 스크립트에 변경되지 않는 데이터를 저장하는 prefab이 있는 프로젝트의 경우 유용하다.

참고 : https://docs.unity3d.com/kr/2023.2/Manual/class-ScriptableObject.html

 

벽돌깨기 게임처럼 하나의 씬에 prefab을 60개 정도 사용하는 경우는

Scene을 여러 개 들고 있는 것이 비효율적이라고 생각했다.

아낄 수 있는 메모리는 최대한 아껴보자! 라는 생각에 ScriptableObject를 사용하기로 했다. 

 

< Code >

using UnityEngine;

[CreateAssetMenu(fileName = "Stage", menuName = "Blueprint/Stage")]
public class StageBlueprint : ScriptableObject
{
    [SerializeField] private int level;
    [SerializeField] private GameObject stageMap;
    [SerializeField] private int bricks;

    public int Level => level;
    public GameObject StageMap => stageMap;
    public int Bricks => bricks;
}

 

Assets_Scene 폴더에 StageScene은 하나만 남게 되고,

여러 개의 맵은 Assets_Resources_Blueprint 에 Stage1, Stage2, Stage3 ... 이런 식으로 쌓이게 된다.

메모리가 한결 가벼워진 것 같아 다행이다.

 

 

Unity : Meta 파일의 중요성

 

현재까지, 팀 프로젝트 과정에서 부트캠프 팀원들이 겪고 있는 가장 큰 어려움은 [깃허브 사용법]이다.

혼자하는 작업이 아닌, 다른 사람과 유니티 프로젝트/C# script를 공유하고 협업해야하는 과정이기 때문이다.

어제도 한 팀의 깃에 큰 오류가 발생해 밤 늦게까지 복구 작업이 있었고, 여기저기서 깃과 관련된 잡음이 많이 들리고 있다.

우리 팀도 순조로운가 싶었지만, 팀원이 커밋하자 이전에 편집한 prefab 리소스가 모두 삭제되는 일이 벌어졌다.

(Image의 Sprite Mode가 Mutiple 에서 Single 로 바뀌는 현상)

편집하면 Multiple 상태로 남아있어야 하는데, Single 로 바뀌면 편집이 초기화된다. 

아마도 이 부분을 건드렸다기 보다는, 커밋하는 과정에서 이전에 편집된 내용을 pull 하지 않고 바로 자신의 작업물을 올리고 병합해서 생긴 문제라고 생각한다. 

 

다행히도! brach history에서 정상적으로 편집되어 있던 부분의 Meta 파일을 가져와 복구할 수 있었다.

Unity의 Meta 파일이 소중하다는 것을.. 알게 된 하루였다.

 

 

오늘의 회고

 

 

벽돌깨기의 기본 틀은 완성되었다.

디자인 요소는 아직 깊게 들어가지 않았고, 

필수적으로 필요한 기능 (벽 collider, 공-패들/공-벽돌의 상호작용, 아이템 출현) 까지 구현했다.

나는 벽돌 prefab을 이용해 맵을 구성했고, 원하는 색감으로 전체적인 틀을 잡았다.

 

다음 주에는 맵 추가, 배경 및 UI 다듬기, BGM을 추가할 생각이다.

주말에는 팀원들이 커밋한 스크립트를 공부하면서 게임 전체를 이해할 생각이다.

 

 

** 더 공부하기

if - return 형식의 코딩

 

이번 주도 고생 많았습니다..

다음 주도 즐거운 마음으로 고생합시다! :)

 

 

 

 

 

 

댓글