05-03 09:48
Notice
Recent Posts
Recent Comments
«   2025/05   »
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 27 28 29 30 31
Archives
Today
Total
관리 메뉴

(주) 망나니 힘집

[UNITY] 물리 충돌 이벤트와 트리거 이벤트 본문

유니티 최고/Unity

[UNITY] 물리 충돌 이벤트와 트리거 이벤트

군포망나니 2022. 1. 18. 17:13

<이번 시간은 물리 충돌 이벤트와 트리거 이벤트에 대해서 알아보겠습니다. >

 

* 물리 충돌 이벤트 *

 

움직이는 공 A, 가만히 있는 공 B 가 존재하고, A가 B의 공에 충돌했을 때, B의 공 색상을 변경하는 스크립트. 

public class NewBehaviourScript : MonoBehaviour
{

    //MeshRenderer : 오브젝트의 재질 접근을 위해 선언. 
    MeshRenderer mesh;
    Material mat; 

    void Start()
    {
        mesh = GetComponent<MeshRenderer>();
        mat = mesh.material;  //mesh 안에 있는 mmaterial 요소를 꺼내기 위함 
        
    }

    //충돌했을 때 발생하는 함수 
    //OnCollisionEnter : 물리적 충돌이 시작할 때 호출하는 함수 
    //Collision : 충돌 정보 클래스 
    void OnCollisionEnter(Collision collision)
    {
        if(collision.gameObject.name == "A 공" )
            mat.color = new Color(0, 0, 0); //(0,0,0) : 검은색  
        //Color : 기본 색상 클래스
        //Color32 : 255 색상 클래스 
        //>>> 충돌하면 검은색으로 변한다. 
    }

    // 주의 : 충돌이 이미 존재할 때, 원하는 물체와 닿았을 때 상태를 변화시킬려면 따로 조건을 걸어주어야 함. 
    //그러기 위해서는 원하는 물체의 정보를 읽어와야 한다. 

    //OnCollisionStay : 충돌 중일 때 호출되는 함수 
     void OnCollisionStay(Collision collision)
    {
        
    }

    //OnCollisionExit : 물리적 충돌이 끝날을 때 호출되는 함수 
    void OnCollisionExit(Collision collision)
    {
        if (collision.gameObject.name == "A 공")
            mat.color = new Color(1,1,1); //(1,1,1) : 흰색  
    }
    //>>> 충돌했다가 떼면 흰색으로 변한다. 
}

 

* 트리거 이벤트 * 

 

공이 점프 영역[cube]에 들어서면 공이 위로 움직일 수 있도록 만드는 스크립트.  

//오브젝트 재질을 투명하게 만드는 방법 

Rendering Mode ->  Transparent 로 변경 후 Albedo 컬러에서 A 값을 변경한다. 

//주의 : Box collider -> is Trigger 체크해야 한다. 

 

public class NewBehaviourScript : MonoBehaviour
{
    Rigidbody rigid; 
    void Start()
    {
        rigid = GetComponent<Rigidbody>();  
    }

    //OnTriggerEnter : 충돌할 때
    void OnTriggerEnter(Collider other)
    {
        
    }
    
    //OnTriggerStay : 콜라이더가 계속 충돌 중일 때. 
    void OnTriggerStay(Collider other)
    {
        //Trigger 는 물리적인 충돌이 아닌 콜라이더가 겹쳐는지만 확인. 
        if(other.name == "cube")
        {
            rigid.AddForce(Vector3.up * 2, ForceMode.Impulse);        
        }
        //>>> 오브젝트가 
    }

    //OnTriggerExit:  충돌이 끝날 때 
    void OnTriggerExit(Collider other)
    {
        
    }

 

// 실제 물리적인 충돌로 발생하는 이벤트
private void OnCollisionEnter(Collision collision){ }
private void OnCollisionStay(Collision collision) { }
private void OnCollisionExit(Collision collision) { }
// 콜라이더 충돌로 발생하는 이벤트
private void OnTriggerEnter(Collider other) { }
private void OnTriggerStay(Collider other) { }
private void OnTriggerExit(Collider other) { }

 

  

<이번 시간은 물리 충돌 이벤트와 트리거 이벤트에 대해서 알아보았습니다. >