• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

스크립터블 오브젝트

24.04.13 23:55 작성 조회수 74

0

안녕하세요 수업 도중에 한 가지 질문이 생겨서 글 올립니다.

퀘스트를 모듈식으로 조립하기 위해 스크립터블 오브젝트를 많이 사용하던데, 스크립터블 오브젝트는 빌드에 포함되는 에셋 형태이기에, 빌드 용량이 커지게 되고, 사용자가 접근이 가능한 문제가 있다고 알고 있는데, 혹시 제가 이 부분에 대해서 잘못 알고 있는 것일까요?

만약 문제가 맞다면, 스크립터블 오브젝트말고 어떤 식으로 구조를 짜는게 좋을까요?

답변 1

답변을 작성해보세요.

0

수강해주셔서 감사합니다.

ScriptableObject는 Asset이기 때문에 빌드 용량이 커지는 것 자체는 맞으나 Data 객체이기 때문에 유의미한 정도로 늘어나는건 아닙니다. 프로젝트 폴더에서 ScriptableObject Asset의 용량을 확인해보시면 1~2kb 정도 밖에 안하구요, 나중에 Skill처럼 훨씬 많은 Data를 담는 ScriptableObject를 만든다고해도 10kb 내외의 용량을 가지게 됩니다. ScriptableObject를 수 십만개 만드실게 아니시라면 용량은 신경 쓸 부분이 아닙니다.

사용자가 접근이 가능한 문제라는건 아마 언패킹해서 데이터 변조 후 리패킹 하는 것을 얘기하시는 것 같은데요, 데이터 변조는 보안이 뚫린 이상 코드부터 시작해서 각종 에셋들까지 모두 변조가 가능하기 때문에 ScriptableObject만의 문제가 아닙니다.

보안상 가장 좋은 구조는 Database를 구축해서 Quest Table을 만들고, 서버에서 Database와 통신하여 실시간으로 Quest를 조립하고, Quest에 관한 모든 처리를 서버에서 진행, 클라이언트는 Update된 Quest의 정보만 받아오는 구조입니다.

로컬에서 DB와 통신해도 되긴하지만 그렇게되면 DB 수정을 통해 실시간 패치가 가능하다는 것과 ScriptableObject처럼 언패킹을 통한 직접적인 변조가 불가능하기 때문에 우회 변조를 해야한다는 점 정도를 빼면 보안상 큰 이점은 없다고 생각하시면 됩니다.

다만, 아무래도 인디 혹은 개인 개발자가 Database와 서버를 운용하기에는 비용 문제와 기술 난이도 문제가 있기 때문에 싱글 게임이나 인디쪽에선 ScriptableObject 기반 구조나 엑셀 기반 구조로 많이 만듭니다.

감사합니다.