2021년 2월 15일 월요일

[Unity3d] 물리처리 Rigidbody, Collider

 cocod2dx할떄 박스2d에 비하면이건뭐 천국..

Unity3d 에선 물리처리가 걍 쉽다. 그래서 좀더 자연스러운 게임들이 나오는건가보다.


RigidBody

물리를 구현하려면 강체(Rigidbody : 형태가 변하지 않는 몸체?) 라는 속성을 게임오브젝트에 적용해주면 된다. 강체로 지정된 애들은 자신의 질량, 마찰력, 중력계수 등을 가지게되어 외부물체와 어떤 상호작용을 하게될지를 스스로 결정하게 된다.


  • BodyType : 강체형식
    Dynamic : 뭔가 움직이는 물체에 주는 타입이다. 
    Kinematic : 코드로 제어하는 물체에 주는 타입으로서, 중력과 힘에 영향을 받지않는다.  미사일, 플랫폼의 이동다리 등은 다른 물체에 부딪혀 튕겨나갈일이 없으므로 이럴때 사용한다.
    Static : 말그대로 고정된 
  • Meaterial : 물리적재질지정 ( Create -> Physics Material 2D 로 생성가능하다. 현재의 RigidBody 에 부딪히는 상대방의 콜라이더에 대해 마찰 계수와 바운싱 정도를 지정하여 영향을 줄수 있다. 이 물체에 부딛혀도 안튀기도록 하거나 등등)
  • Mass : 물체의 질량이다. 1 Mass 는 1Kg이다.
  • Linear Drag : 물체를 질질끌때 마찰력이다.
  • Angular Drag : 물체를 회전시킬때 마찰력이다.
  • Gravity Scale : 물체의 중력계수이다 ( -9.81 " Gravity Scale)
  • Constrants : 지정된 것들은 물리력에 영향을 받지않는다.
  • Collision Detection : 이 물체에 다른 물체가 부딪혔을때 얼만큼 정확하게 체크할건지를 정한다. 
    Discrete : 다른 물체가 이 강체에 빠르게 부딪히면 그냥 통과될수도 있다. 
    Continuous : 절대 통과되진 않지만, 계속 계산하기 때문에 게임에 부하가 생긴다.
  • Sleeping Mode : 충돌체크를 하기위해서 깨어있는 시간 이다. Never Always는 느려지니까 피라란다.

Collider

강체를 물체에 추가했다면, 물체가 강체에 반응하도록 Collider 라는걸 지정해 주어야 한다. 만일 현재 오브젝트가 다른곳에 부딪히게 하고 싶다면, 콜라이더를   추가해야하고, 상대 오브젝트는 강체 이어야 한다. 

콜라이더의 형태는 박스, 원, 원통, 사용자 정의등 다양한 모양으로 가능한다.


  • isTrigger : 체크하게 되면 이 콜라이더는 단순히 충돌여부 체크용으로만 사용된다. 즉 물리적으로 따로 반응하거나 하지않고, 충돌했다여부만 알수 있게 한다. 아이템획득시에 아이템에 튕겨나갈 필요가 없으니까 isTrigger를 체크하여 아이템근처에 가면 충돌헀다라고 판단만 하고 아이템획득처리하면된다.
    OnTriggerEnter2D(Collider2D 상대편)  로 체크한다. Stay, Exit 함수도 있다.
    OnCollisionEnter2D 계열도 있는데 이건 실제로 충돌된 상태를 반환한다. 즉 triggerfh 체크만 하는게 아니라 실제충돌인지 체크하는 리스너이다. 
  • used by composite : 여러개의 콜라이더를 하나의 덩이리화 시킬때 사용한다.
  • used by effector : effector 2d (플랫폼 게임을 만들기 위한 효과 들을 모아놓은 것들, 땅에 떨어져 굴러가기, 밑에서점프해서 위쪽블록에 안착하기, 서로 당기기(인력?),  물에 반쯤 잠기는 효과, 
    https://www.youtube.com/watch?v=crDmNx5XRc8

0 comments:

댓글 쓰기