설모의 기록
[Cocos creator] GroupManager 사용법 본문
Group Manager 란?
물리엔진을 사용해 충돌에 관련된 작업들을 하려고 할 때 group manager 를 사용의 장점을 알아보겠습니다. 예를 들어, 클래시 로얄 게임을 생각해 볼까요?
빨간색 hp 를 가진 캐릭터들이 적 캐릭터, 파란색 hp 를 가진 캐릭터들이 제 캐릭터 입니다. 제가 지금 이 게임을 개발하는 중이라고 가정하겠습니다. 저는 캐릭터끼리 충돌이 일어났을 때 싸우도록 구현을 하려고 합니다. 그렇지만 제 캐릭터끼리 만났을 때는 싸우면 안되겠죠? 같은 그룹인 (내 캐릭터 그룹, 상대방 캐릭터 그룹) 캐릭터끼리는 충돌했을 때 싸우지 않도록 구현하고 싶은 것입니다. 이럴 때 Cocos creator 에서는 group manager 라는 기능을 제공합니다. 제 캐릭터 노드들은 같은 그룹으로 설정하고, 상대방 캐릭터 노드들 또한 그들끼리 같은 그룹으로 설정을 해주면 같은 그룹끼리는 충돌이 일어나지 않습니다.
예시가 이해가 되셨다면, 아래와 같이 따라하시면 됩니다. group manager 를 설정하는 방법은 간단합니다.
Cocos creator 의 상단 메뉴중 [Project] - [Project Settings...] 를 클릭해주세요.
클릭하시면 아래의 화면이 뜰 것입니다.
Group Manager 창을 보시면 그룹 리스트를 작성할 수 있는 에디트 창과 체크박스들로 이루어진 group collide map 을 보실 수 있습니다. 위 쪽 Group Manager 리스트에는 그룹명들을 작성하시면 됩니다. 예시를 보시면, 제 캐릭터, 적, 그리고 땅 이렇게 세 개의 그룹을 정의했습니다. 다음으로 group collide map 에서는 충돌을 허용할 관계를 설정합니다. 위의 예시를 보시면, 땅과 제 캐릭터, 땅과 적 캐릭터, 마지막으로 적캐릭터와 제 캐릭터만 충돌을 허용했습니다. 따라서 땅과 땅, 제 캐릭터와 제 캐릭터, 그리고 적 캐릭터와 적 캐리터 끼리는 충돌을 해도 무시되는 것입니다. 이렇게 본인이 검사할 충돌 관계를 설정하신 후 save 를 눌러주세요.
이 후, 그룹을 설정하려는 노드를 클릭하면 Properties 화면에 캐릭터 정보가 보입니다. 그 중 노드 컴포넌트의 가장 아래에 보시면 Group 이라는 프로퍼티가 존재합니다. 이 노드에 설정하려했던 그룹을 선택하시면 이제 이 노드는 그 그룹과 충돌해도 아무일도 일어나지 않게 됩니다.
이렇게 설정하신 후 physicsManager 의 enabled 를 true 로 설정해주시고, collision 함수들을 추가해주시면 설정한 충돌이 일어났을 때만 collision 함수들이 실행됩니다.
아래와 같이 collisionManager 의 enabled 를 설정해주세요.
1 | cc.director.getCollisionManager().enabled = true; |
이 후, 아래 세 함수를 추가해주세요.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | /** * 충돌이 감지되면 실행되는 콜백함수입니다. * @param {Collider} other 상대방의 Collider Component * @param {Collider} self 부딪힌 자신의 Collider Component */ onCollisionEnter(other, self) { console.log('on collision enter'); } /** * 충돌이 시작된 후 끝나기 전까지 계속 실행되는 콜백함수입니다. * @param {Collider} other 상대방의 Collider Component * @param {Collider} self 부딪힌 자신의 Collider Component */ onCollisionStay(other, self) { console.log('on collision stay'); } /** * 충돌이 끝난 직후 실행되는 콜백함수입니다. * @param {Collider} other 상대방의 Collider Component * @param {Collider} self 부딪힌 자신의 Collider Component */ onCollisionExit(other, self) { console.log('on collision exit'); } |
위의 세 가지 함수들을 이용해 충돌이 일어났을 때 해야할 일들을 구현하시면 됩니다! (위의 코드는 타입스크립트 기준 코드입니다.)
이상으로 GroupManager 를 알아보았습니다.
'게임엔진 > Cocos creator' 카테고리의 다른 글
[Cocos creator] ParticleSystem 컴포넌트 사용하기 (1) | 2018.02.08 |
---|---|
[Cocos creator] ray cast 란? (0) | 2018.01.31 |
[Cocos creator] Object pool 이란? (0) | 2018.01.27 |
[Cocos creator] draw call 이란 (0) | 2018.01.22 |
Cocos Creator + VS Code + TypeScript 개발환경 구축 (0) | 2017.12.19 |