[Unity]유니티 입문 - Collider

·2022년 12월 11일
0

Unity

목록 보기
3/7
post-thumbnail
post-custom-banner

케이디님의 유니티 입문 강좌를 듣고 정리한 내용입니다.

Collider

오브젝트의 충돌을 처리하고, 충돌범위를 조절하는 컴포넌트이다. 모양에 따라서 box, capsule, sphere 등이 있다. 2D Collider는 앞에 명시되있고 일반 Collider는 3D를 취급한다.

두 물체의 충돌은 적어도 한 물체에 Reigidbody 컴포넌트를 추가해야 두 물체 간에 충돌이 발생한다.
또한 IsTrigger 가 활성화된 Collider 끼리는 충돌 감지가 되지 않는다.

Properties

  • isTrigger : 콜라이더가 trigger로 동작할 지, collision으로 동작할지(=충돌을 감지만 할지, 통과하지 못하게 가로막을 지)
  • material : 어떤 매질의 물리적인 특성으로 충돌할 지.
  • center : 콜라이더 중심 위치. 오브젝트의 로컬 좌표를 기준
  • size : 콜라이더의 크기.
  • bounds : 경계를 이루는 근간. 수정 불가(read only)

Methods

  • ClosestPoint : Returns a point on the collider that is closest to a given location.
  • ClosestPointOnBounds : The closest point to the bounding box of the attached collider.
  • Raycast : 다른 충돌은 무시하고 지정 오브젝트의 충돌하는 레이저 쏘고 충돌과 교차할 경우 true 반환

Messages(Events)

  • onCollision: Enter, Stay, Exit 단계로 나눌 수 있다. 각각의 이벤트는 Collider 컴포넌트의 is Trigger가 false인 상태의 충돌이 시작할 때, 지속될 때, 끝나는 순간 호출된다.

  • onTrigger: Enter, Stay, Exit 단계로 나눌 수 있다. 각각의 이벤트는 Collider 컴포넌트의 is Trigger가 true 인 상태의 충돌이 시작할 때, 지속될 때, 끝나는 순간 호출된다.

Code

public class Text4 : MonoBehaviour
{
    private BoxCollider col;

    void Start()
    {
        col = GetComponent<BoxCollider>();    
    }

    //isTrigger가 체크된 상태에서 collider가 지속될 때 실행.
    private void OnTriggerExit(Collider other)
    {
        //충돌 된 물체의 위치를 변경. 충돌이 끝나는 순간 실행 안함.
        other.transform.position += new Vector3(0, 0, 0.01f);
    }
    void Update()
    {
        
        if (Input.GetMouseButtonDown(0))
        {   //마우스가 있는 좌표에 레이저 쏘기
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hitinfo; //맞은 레이저 정보
            //레이저에 쏴서 큐브와 충돌 할 경우 
            if(col.Raycast(ray,out hitinfo, 1000)) 
            //(레이저 시작점, true일 경우 정보가 저장될 변수, 레이저 최대 길이)
            {
            	//맞았으면 맞은 곳으로 이동
                this.transform.position = hitinfo.point;
            }
        }
    }
}
profile
중요한 건 꺾여도 다시 일어서는 마음
post-custom-banner

0개의 댓글