ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 유니티 콜라이더 Collider 이용하는 트리거 Trigger / 콜리젼 Collision (1)
    유니티(Unity)/유니티 코딩 2019. 2. 5. 16:13

    해당 티스토리 페이지는 필자가 유니티 C# 개발을 하면서 학습한 내용들을 기록하고 공유하는 페이지입니다 !

    - 틀린 부분이 있거나, 수정된 부분이 있다면 댓글로 알려주세요 !

    - 해당 내용을 공유 or 퍼가도 좋으나, 출처를 꼭 명시해주세요 !

    - 해당 글의 모든 저작권은 Chameleon Studio에 있습니다.

    - 방문해주셔서 감사합니다 ^^



    썸네일 이미지입니다.유니티 콜라이더 Collider


    안녕하세요! 카멜레온입니다 ㅎㅎ


    오늘은 콜라이더(Collider)에 대해서 알아보려고합니다.


    그 중에서도 트리거(Trigger)에 대해서 다뤄볼텐데요.


    콜라이더(Collider)를 사용할 때, 관련 함수로 트리거(Trigger)가 있고 콜리젼(Collision)이 있답니다.


    콜리젼(Collision)은 다음 포스팅에서 다뤄보고, 이번 포스팅은 트리거(Trigger)에 대해 알아봅시다.




    우선, 프로젝트가 필요하겠죠?


    콜라이더 관련해서 포스팅하는 내용들은 전부 <젤랑점핑> 개발 때 사용했던 프로젝트 중 일부를 가져와서 해보려고합니다.


    프로젝트 파일을 다운받아주세요.


    ColliderTest.zip


    압축을 풀고 폴더에 들어가서 Assets > Scenes > Test를 열어주세요.



    프로젝트 열린 이미지프로젝트 실행



    자, 파일이 열렸습니다.


    유니티가 설치되어 있지 않으신 분은 다운로드부터 해주세요.


    제가 프로젝트 내에서 미리 젤랑이 밑에 있는 5개짜리 블록에 콜라이더를 넣어두었습니다.


    Inspector 창을 보면 Box Collider 2D가 붙어있다는 걸 볼 수 있습니다.


    콜라이더를 붙여줬기때문에 Scene 창에도 초록띠가 둘러져 있는 것을 볼 수 있죠.


    마찬가지로 젤랑이한테도 콜라이더를 둘러놓았습니다.


    여기서 아주 중요한 점이 하나 있습니다.


    콜라이더를 붙힌 오브젝트와 콜라이더를 붙힌 오브젝트 사이에 충돌을 감지하기 위해서는 둘 중 한놈 이상은 반드시 Rigidbody 컴포넌트가 필요합니다.

    (리지드바디(Rigidbody)에 관한 설명을 더 자세히 알고싶다면 여기를 눌러주세요.)


    둘 다 있어도 상관없지만, 둘 중 한 오브젝트는 꼭 있어야하지요.


    지금은 젤랑이에게 Rigidbody를 붙혀두었기때문에 충돌을 잘 감지할 것입니다.


    ▶을 누르면 어떻게 되는지 확인해볼까요?





    젤랑이가 블록 위에 안착했습니다.


    콜라이더 + 콜라이더는 충돌을 감지하고, 물체와 물체가 통과되지 못하게 합니다.


    만약, 콜라이더를 씌우지 않았다면, 젤랑이가 블록 위에 안착하지 않고 끝없이 밑으로 추락할 것입니다.


    이를 방지하기 위해서 콜라이더를 씌우는 것입니다.


    그렇다면, 젤랑이를 눌러서 트리거 설정을 해볼까요?



    Is Trigger 체크 이미지Is Trigger를 체크하기



    젤랑이를 누르고, Inspector 창에서 Box Collider 2D를 찾아서 Is Trigger를 체크합니다.


    참고로, Project를 만들 때, 3D or 2D 중 2D로 Project를 만들었기때문에 꼭 2D 콜라이더와 2D 리지드바디를 사용해야합니다.


    다시, 본론으로 돌아와서 트리거를 체크해줬으면, ▶을 눌러봅시다.





    젤랑이가 삼천포로 빠졌습니다.


    이렇게 Trigger를 시켜주면, 충돌 여부는 판단하고 물체와 물체는 통과하게 됩니다.


    어차피 물체와 물체가 통과하게 할꺼면, 그냥 둘 다 콜라이더를 안씌우면되잖아?


    라고 생각하실 수도 있겠지만, '충돌'했다를 알기위해서는 콜라이더가 있어야 합니다.


    예를 들면, 나뭇잎이 있다고 치고, 젤랑이가 나뭇잎을 먹으면 나뭇잎이 사라진다고 생각해봅시다.


    콜라이더가 없다면 젤랑이가 나뭇잎과 충돌해도 충돌 여부가 판단되지 않아서 나뭇잎을 못 먹는 결과가 생깁니다.


    그렇다면, 젤랑이 또는 나뭇잎이 트리거 체크 없이 콜라이더만 가지고 있다면,


    나뭇잎과 부딪혀서 젤랑이의 이동이 잠시 멈춤 -> 나뭇잎 획득 -> 나뭇잎 사라짐


    이라는 순서로 젤랑이가 나뭇잎을 획득하는데에 있어서 어색함이 있습니다.


    그럼 둘 중 한 놈이 트리거를 가지고 있다면 어떨까요?


    트리거는 물체와 물체가 통과가 되고 충돌 여부만 판단해주기때문에,


    나뭇잎과 부딪혀도 이동방향에 대한 제어가 없이 나뭇잎을 획득하고 나뭇잎이 사라지게 됩니다.


    그렇다면, 스크립트로 충돌 감지여부를 콘솔 창에 띄워볼까요?


    젤랑이가 가지고 있는 스크립트를 더블 클릭해서 열어봅시다.




    아래 코드를 캡처해놓은 사진입니다.이미지가 안보이시는 분들은 아래 코드 보기를 눌러서 코드를 확인해주세요.




    위의 코드를 미리 만들어진 OnTriggerEnter2D에 넣어봅시다.


    그 다음 유니티로 돌아와서, ▶을 눌러서 충돌 감지를 하는지 하지 않는지 확인해 봅시다!





    자, 스크립트를 통해서 트리거 충돌 감지를 찍어내보니 기분좋게 충돌을 감지했습니다.


    만약, 젤랑이의 Is Trigger 체크를 해제한 후에 ▶ 버튼을 누른다면 어떨까요?


    한 번 해보시면, 콘솔에서 아무 반응이 없다는 걸 볼 수 있습니다.


    왜 그럴까요?


    스크립트에 적은 매서드가 OnTrigger 매서드이기 때문입니다.


    트리거만 감지할 수 있는 매서드이기 때문에 트리거가 체크되어 있지 않다면 감지를 하지 않습니다.


    이번 시간에는 OnTriggerEnter 매서드를 사용했지만, OnTriggerStay나 OnTriggerExit를 더 알고 싶은 분은 여기를 눌러주세요.


    두 번째 시간에는 트리거가 없는 오브젝트들의 충돌 여부(Collsion)를 감지해보도록 하겠습니다.


    감사합니다 !


    Chameleon Studio가 만든 게임하러가기


    <젤랑점핑>

    안드로이드- market://details?id=com.Cameleon.TangTangBall

    IOS- itms-apps://itunes.apple.com/app/id1429522379



    <크러쉬팡>

    안드로이드- market://details?id=com.Chameleon.CrushPang 

    IOS- itms-apps://itunes.apple.com/app/id1450109331


    댓글

Designed by Tistory.