내일배움캠프 18일차 TIL, 유니티 기초2

황오영·2024년 5월 9일
0

TIL

목록 보기
18/56
post-thumbnail

유니티 기초

  • 지난 TIL에서도 말했듯이 이번주는 유니티 기초강의 주간이라 유니티 관련 글들을 작성할 예정이다.
  • 그중 오늘은 평소 개념은 알고있었지만 잘 활용하지 못했던 Scriptable Object에 관한 내용을 알아보고자 한다.

Scriptable Object

  • 직역하자면 읽기전용 오브젝트이다. 유니티에선 경량화된 데이터 컨테이너로써의 역할을 한다. 유니티 콜백에선 OnEnable과 OnDisable OnDestory에서 콜백 된다.
  • 데이터 컨테이너로 데이터공유와 이를 통한 메모리 사용량을 줄일 수 있다. 데이터를 참조 형태로 오브젝트에 넣는것이 가장큰 장점. ScriptableObject를 통해 데이터를 관리하면 편리성과 최적화 효과를 얻을 수 있다. 예시로 기존 스탯을 각각의 오브젝트에 부여하게되면 데이터 할당이 들어나는데 ScriptableObject를 사용하게 되면 프리팹에 상관없이 데이터를 한개만 가지게 된다.
  • 사용법은
[CreatAssetMenu(fileName = "", menuName = "")
public class PlayerSO : ScriptableOject
{
	publlc int hp = 10;
}

요런 형태로 상속을 바꿔주고 CreatAssetMenu를 이용해 어떻게 생성하는 툴을 만들어 주는것이다.

그래서 장점이 뭘까?

  • 여기까지는 기존에 알던 내용이라 개념만 알고 있어 활용이 어려웠고 왜 써야하는지 몰랐는데.. 다음 유니티 블르고를 보고 배운점이 많았다.

    https://blog.unity.com/kr/engine-platform/6-ways-scriptableobjects-can-benefit-your-team-and-your-code

  • 기본적으로 모듈식 게임을 만드는데 크게 사용된다. 모듈식 게임을 만들게 되면 테스트 및 확장/축소가 용이해지게 되므로 게임을 훨씬 더 효율성 있게 만들 수 있다. 내용을 좀 더 정리해 보면

  1. 효율적인 팀 협업 : 디자이너와 아티스트가 쉽게 접근할 수 있는 장점이 있다. 플래이시 에디터를 통해 스크립터블 오브젝트를 확인하고 편집할 수 있으므로 개발자 없이도 디자이너들이 데이터를 설정할 수 있다. 또한 단일한 MonoBehaviour에 로직을 저장하면 충돌도 많이 일어나고 개발자들의 테스트후에 게임을 테스트 할 수 있게 되지만 스크립터블 오브젝트를 사용하게 되면 효율적인 작업이 가능하게 된다.
    2.데이터 컨테이너 : 스크립터블 오브젝트를 사용하게 되면 로직과 데이터를 분리하게 되어 클린 코딩이 가능해지게 되고 이것이 모듈식 프로그래밍의 첫번째 단계이다. 특히나 위쪽에서 말한 중복데이터를 하나에만 접글 하게 할 수 있기에 프로젝트 성능을 대폭 개선할 수 있다. 다만 스크립터블 오브젝트는 정적데이터 저장에 특화 되어있으므로 게임데이터는 Json류 사용이 좀 더 좋다.

    이렇게 되는것이 아니라

요렇게 데이터를 구성가능하다!
3.열거형 : 열거형을 사용하는것은 코드 간소화에서 매우 유용하다. 이런 열거형을 스크립터블 오브젝트로 사용하게 되면 데이터 추가및 확장이 매우 간편해지고 스크립터블 오브젝트는 추가 필드와 메서드를 가질 수 있는 장점이 있다. 특히나 열거형의 경우 배열의 순서가 바뀌었을 때 일어나는 의도치 않은 버그들을 예방 할 수 있기 때문에 장점이 있다.
4.델리게이트 오브젝트 : 메서드 역시 만들 수 있으므로 데이터 보관용도로 로직이나 동작을 저장 할 수 있고 로직을 옮기게 되면 동작을 더 모듈화 할 수 있다.
5.이벤트 채널 : 대규모 프로젝트의 경우 데이터나 상태를 공유하지만 오브젝트간의 직접적인 참조는 방지해야한다. 왜냐하면 종속관계가 대규모가 되게 될수록 관리하기 힘들어지고 버그도 많이 일어나기 때문이다. 이를 위해 싱글톤을 사용하게 되는데 싱글톤 역시 전역상태를 다루고 단위 테스트가 힘들어지게 되는 단점이 있다. 이를 해결하기 위해 게임오브젝트 통신에 도움이 되는 스크립터블 오브젝트 기반 이벤트를 사용하는것이다. 관찰자 디자인 패턴을 구현하는 것인데

스크립터블 오브젝트를 기반으로 이벤트를 관리 할 수 있다.
6.런타임 세트 : 런타임 시 씬에서 오브젝트나 컴포넌트를 찾아야 하는 상황이 많은데 이럴때 스크립터블 오브젝트를 특수한 데이터 컨테이너를 사용하면 최적화측면에서도 좋고 테스트와 모듈성에서도 좋아진다.

오늘의 회고

  • 스크립터블 오브젝트에 대해 심도있게 정리할 수 있어서 좋았다. 평소에 어렵고 모듈식 개발에 관심이 있었는데 이번기회에 잘 정리한 것 같다.
  • 강의내용이 수학도 있고 로직도 있고 구조도 있어서 너무 난이도가 높다는 생각이든다.. ㅠㅠ 열심히 따라가야지
profile
게임개발을 꿈꾸는 개발자

0개의 댓글