본문 바로가기

GameProgramming

메세지 기반 프로그래밍 - 3

메세지 기반 프로그래밍은, 기존에 ~~Manager 등으로 강하게 커플링된 오브젝트간의 연결을 해소한다는데에 목적을 두고 있지만, 너무 메세지에 몰빵해버리면 오히려 불편한점도 생기기 마련이다.

예를들어 현재 플레이어의 체력같은 경우에는 여러가지 오브젝트들이 공유할 수 있다.
( 상태창 UI, 적군 인공지능, 펫 등...)

플레이어 오브젝트가 체력이 변할때마다 Change 메세지를 매번 발송해서 처리할 수도 있겠지만,, 
받는쪽에서도 번거롭게 수신자를 만들어야하고, 플레이어쪽에서도 변하는 모든 부분에서 발송 코드를 작성해야 한다. 분명 이러한 구조는 이전의 GameManager.playerHp 에 접근하는것보다 몇배는 더 불편하다.


이러한 구조적 불편함을 해소하기 위해서 
Rinity (https://github.com/pjc0247/Rinity2) 에서는 공유되는 전역변수 기능을 제공한다.

공유되는 변수는 기존의 매니저에 의한 전역 상태 / 그리고 메세징에 의한 루즈 커플링의 절충지대 역할을 한다.

공유되는 변수는 변수 그 자체를 하나의 오브젝트가 '소유' 하는것이 아닌, 그냥 공중에 존재하는 변수를 여러개의 오브젝트가 가져와서 사용하는 개념이다. 물론 공중에 떠다니는 각각의 변수를 식별하기 위해서 별도의 이름을 가진다.

공유되는 변수는 아래와 같은 모양을 가지며, 프로퍼티로 동작한다. 


이렇게만 작성하면 어떠한 오브젝트에서든지 KEY만 일치하면 값을 공유할 수 있다.


플레이어 오브젝트에서는 언제든지 값이 변할때마다 set 하면 되고, 가져다 쓰는 체력바 UI 등에서는 마치 원래부터 자기값이었다는듯이 클래스 내부의 프로퍼티를 사용하면 되니 굉장히 편리하다.




이전 메세징 방식처럼 값이 변경되는 순간순간마다 메세지를 받고 싶다면, 단순히 이전처럼 메세지를 구독하기만 하면 된다. 공유 변수의 set에 의한 메세지 발송은 Rinity 내부에서 자동으로 이루어진다.



'GameProgramming' 카테고리의 다른 글

피격 파편 효과 주기  (1) 2017.11.06
메세지 기반 프로그래밍 2  (0) 2016.05.18
카드게임  (0) 2016.05.09
클릭 시 물결 효과 주기  (0) 2016.03.04
0~3 로 4방향 만들기  (0) 2016.03.03