설모의 기록

[Cocos creator] GroupManager 사용법 본문

게임엔진/Cocos creator

[Cocos creator] GroupManager 사용법

HA_Kwon 2018. 1. 26. 21:54

Group Manager 란?

  물리엔진을 사용해 충돌에 관련된 작업들을 하려고 할 때 group manager 를 사용의 장점을 알아보겠습니다. 예를 들어, 클래시 로얄 게임을 생각해 볼까요?

  빨간색 hp 를 가진 캐릭터들이 적 캐릭터, 파란색 hp 를 가진 캐릭터들이 제 캐릭터 입니다. 제가 지금 이 게임을 개발하는 중이라고 가정하겠습니다. 저는 캐릭터끼리 충돌이 일어났을 때 싸우도록 구현을 하려고 합니다. 그렇지만 제 캐릭터끼리 만났을 때는 싸우면 안되겠죠? 같은 그룹인 (내 캐릭터 그룹, 상대방 캐릭터 그룹) 캐릭터끼리는 충돌했을 때 싸우지 않도록 구현하고 싶은 것입니다. 이럴 때 Cocos creator 에서는 group manager 라는 기능을 제공합니다. 제 캐릭터 노드들은 같은 그룹으로 설정하고, 상대방 캐릭터 노드들 또한 그들끼리 같은 그룹으로 설정을 해주면 같은 그룹끼리는 충돌이 일어나지 않습니다. 





GroupManager 사용하기


  예시가 이해가 되셨다면, 아래와 같이 따라하시면 됩니다. 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 를 알아보았습니다.

Comments