본문 바로가기
Unity

Physcis.CheckBox와 OnTriggerEnter

by 호아나트 2022. 6. 10.
반응형

Physcis.CheckBox

해당 함수가 포함되어 있는 오브젝트는 다른 콜라이더와 겹치는지를 확인한다.

리턴 값은 bool로 겹침 여부만 반환한다.

 

박스 콜라이더를 추가하지 않고도 특정 레이어와 겹침여부를 확인을 할 수 있으며 오브젝트와 순간적인 판정에 사용하면 좋다.

사용방식

Physics.CheckBox(Vector3 center,Vector3 halfExtents,Quaternion orientation=Quaternion.identity,int layerMask = DefaultRaycastLayers)
center  박스의 중심
halfExtents 박스 길이의 절반
orientation 박스의 회전
layermask 충돌했을 때 무시할 레이어

단점

설정된 범위는 시각적으로 보이지 않기 때문에 직관적으로 확인하기 힘들다.

해결

시각화를 위해 기즈모를 활용하여, 박스의 범위가 어떻게 되는지 확인할 수 있다.

private void OnDrawGizmos()
    {
        var target = gameObject;
        Matrix4x4 transform = Matrix4x4.TRS(target.transform.position, target.transform.rotation,
             target.transform.lossyScale);
        Gizmos.matrix *= transform;
        Gizmos.color = Color.green;
        Gizmos.DrawWireCube(Vector3.zero,Vector3.one);
    }

OnTriggerEnter

사용을 하면서 자주 사용하는 OnTriggerEnter와 무엇이 다를지 궁금증이 생겼다.

유니티 사이클의 Phsysics 부분에선 FixedUpdate() → OnTriggerXXX순으로 진행됨을 확인할 수 있었다. 그렇기에 CheckBox와 OnTriggerEnter도 순서가 아래와 같을 것이라고 예상을 할 수 있었다.

아래와 같이 실험을 진행하였다.

private void FixedUpdate()
    {
        isCheck = Physics.CheckBox(gameObject.transform.position, new Vector3(0.5f, 0.5f, 0.5f),Quaternion.identity,1<<LayerMask.NameToLayer("Ground"));
        if (isCheck)
        {
            Debug.Log("CheckBox를 체크하였습니다.");
        }
    }

    private void OnTriggerEnter(Collider other)
    {
        Debug.Log("Trigger가 활성화 되었습니다.");
        EditorApplication.isPlaying = false;
    }

예상과 같이 Physics.CheckBox→OnTriggerEnter 순으로 진행 됨을 볼 수 있었다.

참고 자료

Unity - Scripting API: Physics.CheckBox (unity3d.com)

 

반응형

'Unity' 카테고리의 다른 글

Awake()와 Start()의 차이  (0) 2022.07.25

댓글