다음 내용이 궁금하다면?
불편하시다면 뒤로 가기를 눌러주세요
[락락락 개발일지]
4. 상속 구조와 몬스터
오늘 일지는 락락락의 오브젝트 설계 구조에 대한 내용이야.
전체적인 구조를 따라가는 걸 목적으로 글을 써서, 세부적인 함수 내용은 생략했으니, 대충 이런 구조구나 정도로만 보면 좋을 듯

게임메이커는 기본적으로 오브젝트간의 상호작용을 제어해서 게임을 만드는 구조고
오브젝트는 부모와 자식 오브젝트를 설정할 수 있어.

한번 작성해둔 공용 코드 돌려쓰는 일반적인 상속의 기능 외에도
다른 오브젝트와 충돌 이벤트에서, 대상을 부모 오브젝트로 설정하면, 해당 오브젝트의 자식과 충돌할 때도 이벤트가 발동하는 등
태그의 기능도 가지고 있다고 볼 수 있어

우리 게임의 경우 위 이미지와 같은 구조로 부모-자식을 선언해줬어
obj_physics_parent의 create 이벤트

obj_physics_parent의 step 이벤트

게임메이커는 [이벤트 발생 - 이벤트에 작성된 코드 실행] 방식으로 코드를 제어하는데
create 이벤트는 오브젝트 생성 시, step 이벤트는 매 프레임마다 실행되는 이벤트로
유니티의 Start, Update와 유사하다고 볼 수 있어
보통 create에서는 오브젝트 제어에 필요한 지역 변수 선언이나, 오브젝트 최초 설정 등의 코드를 넣고
step에는 오브젝트를 구동시키는 코드가 들어가지

한편, 변수는 오브젝트의 Variable Definitions 버튼을 눌러 선언할 수 있어.
create 이벤트에서 변수를 선언하면 되는데, Variable Definitions 기능은 왜 있는 거지 싶을 수 있지만

Variable Definitions에서 선언한 변수는, 룸에 배치된 인스턴스 개별적으로 수정해주는 게 매우 용이해
그래서 동일한 몹이나 물건이지만 혼자 hp, 최초 행동 함수, 기타 값 등이 다른 경우가 필요하다면, 해당 정보를 Variable Definitions로 관리하면 좋겠지.
문경새재에서는 튜토리얼 몹의 hp나, 일부 지역에서 원거리 몹의 순찰 코드 제거 등을 구현할 때 유용하게 사용했어.

정수, 실수, 문자열 등의 일반적인 변수 외에도, Type을 Asset으로 지정하면 미리 선언해둔 스프라이트, 오브젝트, 함수 등등을 변수에 지정해둘 수 있어
[이 경우엔 이미 만들어둔 것들을 지정한다는 측면에서, 포인터의 역할도 일부 수행한다고 볼 수 있을듯]
락락락에선 Variable Definitions를 통해 자식의 사용자 지정 함수를 선언했어. [create_sc, step_sc]
이를 통해, 자식 오브젝트들의 이벤트를 수정하지 않아도, 변수 값에 스크립트 정보를 집어넣으면 create, step 이벤트에서 원하는 코드를 실행시킬 수 있게 되어서 생산성을 올릴 수 있어.
일반적으로 자식 오브젝트에서 이벤트를 수정하게 되면, 새로 만들어 덮어쓰기로만 수정해야 하거든

이를 상속받은 플레이어 오브젝트는 create, step 이벤트를 수정할 필요 없이 선언해둔 create_sc, step_sc에 플레이어 제어용 함수를 넣어주면 깔끔하게 동작한다.

몹 부모용 obj_mob_parent의 경우, 부모의 정보를 받아와 사용자 지정 함수에 몹 제어용 코드를 넣고,
추가로 몹 개별 정보와 행동 함수를 받아온다.
mob_sc는 create 이벤트에서 발동할 함수로, 몹의 기본 정보를 선언하고
behave_sc는 step 이벤트에서 발동할 함수로, 몹의 행동 코드가 들어가
1, 2번 등, 행동에 대한 부분들은 behave_sc를 통해 적용하고, 동일한 행동을 가진 몹들은 동일한 함수가 적용되어 있어.
3, 4번 등, 몹 정보에 대한 부분들은 mob_sc를 통해 적용해
------------------------------------------
게임메이커 스튜디오 2 입문을 고민하는 갤러들을 위해 좀 더 상세하게 써봤는데,
정작 우리 게임의 상속 구조의 큰 틀을 설명하는 내용이라, 입문자를 위한 글은 아니게 된 것 같다.

인디 게임 개발 갤러리
Copyright 시보드 All rights reserved. 무단 전재 및 재배포 금지.
인기상품 확인하고 계속 읽어보세요!
원치 않을 경우 뒤로가기를 눌러주세요.
