본문 바로가기

Unity3D/SendMessage

Unity 3D SendMessage On Collision

유니티 3D에 충돌처리시 충돌 대상 오브젝트에게 메시지를 보내서 충돌처리하는 예제


앞서 작성했던 프로젝트를 여기서도 이어서 사용하므로 앞의 내용을 먼저 참조해야 한다.

현재까지 작성된 내용은 포탄을 발사해서 포탄과 다른 오브젝트가 충돌할 경우, 충돌한 대상이 파괴의 대상인지 아닌지를 구별할 수 있도록 대상 오브젝트의 Tag를 구별해 내는 것이 전부였다.


포탄(CannonBall)이 장벽에 명중할 경우에 장벽이 파괴될 수 있도록 장벽(Wall) 오브젝트에게 메시지를 보내어 특정 함수가 실행될 수 있게 한다


포탄(CannonBall 프리팹)에 포함될 스크립트 (장벽에 명중하면 장벽에 포함된 함수(Explode())를 호출하여 파괴되도록 한다)

#pragma strict


function Start () {

}


function Update () {

}


function OnCollisionEnter(collision:Collision) {

var tag:String = collision.transform.tag;

//print("충돌:"+tag);

if(tag=='Target') {                     

Destroy(gameObject,1);            //목표에 명중한 포탄은 1초만에 사라진다

// 포탄과 충돌한 대상 오브젝트의 스크립트에 포함된 Destroy()함수를 호출함

// 그러므로 대상 오브젝트의 스크립트에서는 Explode()함수가 선언되어 있어야 한다


collision.transform.SendMessage('Explode', SendMessageOptions.DontRequireReceiver);

}else{

Destroy(rigidbody, 3);              // 목표에 맞지않은 포탄은 사라지지 않고 3초후에 움직임을 멈춘다

}

}


위의 스크립트에서는 포탄이 장벽에 명중하면 장벽(Wall) 오브젝트에 포함된 Explode() 함수를 호출하여 파괴되도록 하고 있으므로 Wall 오브젝트에는 Explode() 함수를 선언해 주어야 한다

다음과 같은 스크립트를 작성하고 드래그하여 Hierarchy 뷰의 Wall 오브젝트에 포함시킨다




위와 같이 설정한 후 실행 테스트를 해보면 포탄이 장벽에 명중할 경우 메시지가 전달되는지 확인할 수 있다.