본문 바로가기

Unity29

Scriptable Object - 응용: 이벤트, 데이터셋 (4) 이벤트 Player는 이벤트를 전파하는 주체인 이벤트 트리거이다. Player가 이벤트 조건을 충족하면 이벤트 에셋을 통해 리스너들을 호출한다. Player는 'public UnityEvent damageEvent'라는 필드를 갖는다. 해당 필드는 Inspector뷰로부터 리스너를 추가할 수 있다. Player는 이벤트를 트리거 시 리스너에게 전파해 줄 GameEvent 에셋을 추가했다. 이벤트 발생 시 에셋의 Raise()를 호출할 것이다. 'Player > UnityEvent.Invoke > GameEvent.Raise()' 리스너들은 'GameEventListener' 컴포넌트를 추가해야한다. 이 컴포넌트는 해당 Event에 자신을 등록한다. 그러면 GameEvent로부터 'public UnityE.. 2020. 6. 1.
Scriptable Object - 개념: 기본 아이디어, 기존 싱글톤의 장단점 (3) 샘플 프로젝트 (Unite - 2017) 소스 : github.com/roboryantron/Unite2017 roboryantron/Unite2017 Sample project for Game Architecture with Scriptable Objects from Unite Austin 2017 - roboryantron/Unite2017 github.com 기본 아이디어 아이디어를 크게 도식화 하면 위와 같다. Player와 다른 개체들 사이를 Asset이 이어주고 매개한다. Player라는 프리팹 개체에는 UnitHealth.cs라는 MonoBehaviour가 정의됐다. 해당 스크립트에는 HP 라는 필드가 선언됐다. 그리고 값으로 해당 에셋이 링크됐다. Player 개체는 플레이 중 HP의 값을.. 2020. 5. 29.
Scriptable Object - 개념: 인스턴스와 에셋 생성 (2) 스크립터블 오브젝트 ScriptableObject는 MonoBehaviour와 같이 Unity.Object를 상속하며 Inspector뷰에 노출된다. Unity.Object는 SerializedProperty로 캐스팅될 수 있는데 이는 곧 직렬화가 가능해서 Disk의 한 파일로 저장될 수 있다는 의미다. SerializedProperty는 Editor 클래스가 참조하는 프로퍼티로 Inspector뷰를 구성할 때 쓰인다. Editor 클래스로 별도의 작업을 안해도 Inspector 뷰에 프로퍼티가 보이는 이유는 MonoBehaviour에 대해 적용된, 보이지 않는 디폴트 Editor 클래스가 있는 것으로 추정해볼 수 있다. 예를 들면, MonoBehaviour.cs에서 선언된 List는 생성자 호출 없이 .. 2020. 5. 29.
Scriptable Object - 개요 (1) 좋은 아키텍쳐는 모듈화 여부에 있다 기존 방식은 MonoBehaviour가 개체를 정의할 때 기능을 잘게 세분화하지 않고 스크립트 하나에 모두 정의한다. 따라서 이 MonoBehaviour는 동작 시점과 조건이 같은 일부 기능을 다른 개체에 재사용 할 수 없다. 왜냐하면 공통적인 기능 외에 다른 기능도 정의됐기 때문이다. 다른 개체로써는 불필요한 프로퍼티를 요구하고 있고 그 프로퍼티의 참조를 구하지 못해도 기능이 동작되리라 신뢰하기 힘들다(재사용 가능 여부를 검증하기 위해 코드 분석이 발생한다). 때문에 기능을 잘게 세분화(granularly)할 필요가 있다. 그런 뒤 MonoBehaviour는 그 기능이 동작하는데 필요한 최소한의 프로퍼티를 명시만 해주고 참조하는 시점과 조건 등 틀만 정의해주면 된다... 2020. 5. 28.