사생활 보호 설정
https://gamjia.tistory.com
Updated News
Mini Rooms
답글수 [0]
What Friends Say
한마디로 표현해봐~
1촌평 관리
Unity, Cocos Collider 비교
GamJia 2025. 1. 25. 00:07
오늘은 게임 개발에 빼놓을 수 없는Collider에 대해 알아보겠습니다비슷한듯 다른 두 게임 엔진을 비교해서 설명드릴게요
Collider 종류
왼쪽은 Unity, 오른쪽은 Cocos Creator인데요
겹치는 Collider도 있고 그렇지 않은 것도 있습니다
표로 설명과 함께 정리하겠습니다
Unity Collider
Unity에서는 OnCollisionEnter, OnTriggerEnter 같은
메서드가 MonoBehaviour에서 자동으로 호출됩니다.
충돌 이벤트를 처리하려면 해당 메서드를 오버라이드하기만 하면 됩니다
Collision Collider (3D)
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Test : MonoBehaviour { private void OnCollisionEnter(Collision other) { Debug.Log("두 Collider가 처음 충돌할 때 호출됩니다.") } private void OnCollisionStay(Collision other) { Debug.Log("두 Collider가 충돌 상태를 유지하고 있는 동안 호출됩니다.") } private void OnCollisionExit(Collision other) { Debug.Log("두 Collider가 더 이상 충돌하지 않을 때 호출됩니다.") } }
Collision Collider (2D)
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Test : MonoBehaviour { private void OnCollisionEnter2D(Collision2D other) { Debug.Log("두 2D Collider가 처음 충돌할 때 호출됩니다.") } private void OnCollisionStay2D(Collision2D other) { Debug.Log("두 2D Collider가 충돌 상태를 유지하고 있는 동안 호출됩니다.") } private void OnCollisionExit2D(Collision2D other) { Debug.Log("두 2D Collider가 더 이상 충돌하지 않을 때 호출됩니다.") } }
Trigger Collider (3D)
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Test : MonoBehaviour { private void OnTriggerEnter(Collider other) { Debug.Log("Object가 Trigger에 처음 들어갔을 때 호출됩니다.") } private void OnTriggerStay(Collider other) { Debug.Log("Object가 Trigger 내부에 머무는 동안 계속 호출됩니다.") } private void OnTriggerExit(Collider other) { Debug.Log("Object가 Trigger에서 나갈 때 호출됩니다.") } }
Trigger Collider (2D)
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Test : MonoBehaviour { private void OnTriggerEnter2D(Collider2D other) { Debug.Log("2D Object가 Trigger에 처음 들어갔을 때 호출됩니다.") } private void OnTriggerStay2D(Collider2D other) { Debug.Log("2D Object가 Trigger 내부에 머무는 동안 계속 호출됩니다.") } private void OnTriggerExit2D(Collider2D other) { Debug.Log("2D Object가 Trigger에서 나갈 때 호출됩니다.") } }
Cocos Creator Collider
Cocos에서는 Collider에 이벤트를 직접 연결해야 합니다.
예를 들어, 충돌 처리 로직은 스크립트에서
ContactListener를 통해 설정해야 합니다.
import { _decorator, Component, Collider, ICollisionEvent } from 'cc'; const { ccclass } = _decorator; @ccclass('Test') export class Test extends Component { private collider: Collider | null = null; start() { this.collider = this.getComponent(Collider); if (this.collider) { // 3D 충돌 이벤트 등록 this.collider.on('onCollisionEnter', this.OnCollisionEnter, this); this.collider.on('onCollisionStay', this.OnCollisionStay, this); this.collider.on('onCollisionExit', this.OnCollisionExit, this); } } private OnCollisionEnter(event: ICollisionEvent) { console.log("두 Collider가 처음 충돌할 때 호출됩니다.") } private OnCollisionStay(event: ICollisionEvent) { console.log("두 Collider가 충돌 상태를 유지하고 있는 동안 호출됩니다.") } private OnCollisionExit(event: ICollisionEvent) { console.log("두 Collider가 더 이상 충돌하지 않을 때 호출됩니다.") } }
import { _decorator, Component, Collider2D, ICollision2DEvent } from 'cc'; const { ccclass } = _decorator; @ccclass('Test') export class Test extends Component { private collider: Collider2D | null = null; start() { this.collider = this.getComponent(Collider2D); if (this.collider) { // 2D 충돌 이벤트 등록 this.collider.on('onCollisionEnter', this.OnCollisionEnter2D, this); this.collider.on('onCollisionStay', this.OnCollisionStay2D, this); this.collider.on('onCollisionExit', this.OnCollisionExit2D, this); } } private OnCollisionEnter2D(event: ICollision2DEvent) { console.log("두 2D Collider가 처음 충돌할 때 호출됩니다."); } private OnCollisionStay2D(event: ICollision2DEvent) { console.log("두 2D Collider가 충돌 상태를 유지하고 있는 동안 호출됩니다."); } private OnCollisionExit2D(event: ICollision2DEvent) { console.log("두 2D Collider가 더 이상 충돌하지 않을 때 호출됩니다."); } }
import { _decorator, Component, Collider, ITriggerEvent } from 'cc'; const { ccclass } = _decorator; @ccclass('Test') export class Test extends Component { private collider: Collider | null = null; start() { this.collider = this.getComponent(Collider); if (this.collider) { // 3D 트리거 이벤트 등록 this.collider.on('onTriggerEnter', this.OnTriggerEnter, this); this.collider.on('onTriggerStay', this.OnTriggerStay, this); this.collider.on('onTriggerExit', this.OnTriggerExit, this); } } private OnTriggerEnter(event: ITriggerEvent) { console.log("Object가 Trigger에 처음 들어갔을 때 호출됩니다."); } private OnTriggerStay(event: ITriggerEvent) { console.log("Object가 Trigger 내부에 머무는 동안 계속 호출됩니다."); } private OnTriggerExit(event: ITriggerEvent) { console.log("Object가 Trigger에서 나갈 때 호출됩니다."); } }
import { _decorator, Component, Collider2D, ITrigger2DEvent } from 'cc'; const { ccclass } = _decorator; @ccclass('Test') export class Test extends Component { private collider: Collider2D | null = null; start() { this.collider = this.getComponent(Collider2D); if (this.collider) { // 2D 트리거 이벤트 등록 this.collider.on('onTriggerEnter', this.OnTriggerEnter2D, this); this.collider.on('onTriggerStay', this.OnTriggerStay2D, this); this.collider.on('onTriggerExit', this.OnTriggerExit2D, this); } } private OnTriggerEnter2D(event: ITrigger2DEvent) { console.log("2D Object가 Trigger에 처음 들어갔을 때 호출됩니다."); } private OnTriggerStay2D(event: ITrigger2DEvent) { console.log("2D Object가 Trigger 내부에 머무는 동안 계속 호출됩니다."); } private OnTriggerExit2D(event: ITrigger2DEvent) { console.log("2D Object가 Trigger에서 나갈 때 호출됩니다."); } }