반응형
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 |
---|
댓글