이번 글에서는
Collider의 종류와 쓰임 보다는
Collider가 무슨 역할을 하며 왜 필요한지.. 어떤 property를 가지고 있는지를 알아볼 것이다.
도대체 무엇인가?
++Unity.Engine 클래스에 포함되어 있다.
RigidBody가 나온다면 항상 따라오는 것이 있다.
바로 Collider다
++영어단어 뜻이 Collide with, 으로 많이 쓰이듯이 "충돌"을 의미한다.
즉, 충돌에 대해, 접촉에 대해, 모든 것을 관리한다고 볼 수 있다.
다시 말해서 물리적인 상호작용에 관여한다고 보면 된다.
어떤 속성을 가지고 있는데?? 그냥 충돌하면 그게 끝 아니야??
사실 우리가 당연하게 여기는 모든 행동 안에는 물리적인 법칙이 끊임없이 적용되고 있다.
유니티는 조금이라도 자연스럽게 만들고자 여러가지 Property를 준비했다.
- Property
몇개만 알아보자
attachedArticulationBody |
Body에 collider가 붙어 있는가? |
attachedRigidbody |
RigidBody에 Collider가 붙어있는가? |
bounds |
경계를 이루는 근간 |
contactOffset (float) |
만약 offset보다 distance가 작아지면 접촉발생했다고 봄 꼭, collider끼리 정말 만나야만 접촉이 되었다고 인지하는 건 아니지 투명벽 같은 느낌? |
enabled |
Enable 상태면 접촉 가능, disable 상태 불가능 |
isTrigger |
Is the collider a trigger? 말 그대로 |
material |
The material used by the collider. 말 그대로 부딪히면 어떤 물질이냐에 따라 상호작용이 다르겠지? |
sharedMaterial |
The shared physic material of this collider. 말 그대로 |
Collider는 접촉을 어떤 물질과 하는지,
언제 접촉했다고 판단할 것인지.
어떻게 경계를 설정하는지 등등
많은 Property가 있다.
때문에 다양한 상호작용이 나올 수 있다.
그래서 우리는 충돌이 발생했을 시에 어떠한 상호작용을 하기를 바란다.
그래서 충돌 시에 우리가 많이 사용하는 것들이다.
**여기서 collider 와 rigidbody의 조합을 묶어서 A라고 하겠다.
**GameObject는 B라고 하겠다.
오른쪽은 호출 조건이라고 보면 되겠다.
OnCollisionEnter(Collision collision) |
A1과 A2가 처음으로 만났을 때-> 충돌했을 때 |
OnCollisionStay(Collision collision) |
A1과 A2가 접촉이후 처음으로 떨어졌을 때 -> 충돌이 끝남 |
OnCollisionExit(Collision collision) |
매 프레임마다 접촉되어있는 A들에게 호출된다.-> 충돌 중 |
OnTriggerEnter(Collider other) |
B1과 B2가 처음으로 부딪혓을 때 ->충돌했을 때 |
OnTriggerStay(Collider other) |
B1과 B2가 접촉이후 처음으로 떨어졌을 때-> 충돌이 끝남 |
OnTriggerExit(Collider other) |
거의 매프레임마다 접촉되어있는 B들에게 호출된다 -> 충돌중 |
뭐야 Trigger랑 Collison이랑 뭔차이야??? 내가 보기엔 똑같은데??
아니다.
필요로하는 인수가 다르다.
++ 만약 충돌 시 어떤 물리적인 현상도 일어나게 하지 않으려면 onCollisionTrigger로 하면 collision보다 더 빨리 detect할 수 있기 때문에 이용할 수 있다.
Collision 을 원하는지 Collider를 원하는지 다르다.
??? 어떻게 쓰이는 건데??
충돌하는 것은 같은게 아닌가??
collision으로 받으면 무엇이 포함되어있을까?? other은 무엇일까?
Collision 타입은 충돌 관련 정보를 담아두는 컨테이너다.
따라서 입력으로 들어온 Collision을 통해 충돌한 상대방 게임 오브젝트, 충돌 지점, 충돌 표면의 방향 등을 알 수 있다.
사실 더 많이 있다.
밑을 참고하면 내가 더 무엇을 이용할 지 알 수 있다.
collider |
The Collider we hit (Read Only). |
contactCount |
Gets the number of contacts for this collision. |
contacts -> 충돌지점의 정보 |
The contact points generated by the physics engine. You should avoid using this as it produces memory garbage. Use GetContact or GetContacts instead. |
gameObject |
The GameObject whose collider you are colliding with. (Read Only). |
impulse |
The total impulse applied to this contact pair to resolve the collision. |
relativeVelocity |
The relative linear velocity of the two colliding objects (Read Only). |
rigidbody |
The Rigidbody we hit (Read Only). This is null if the object we hit is a collider with no rigidbody attached. |
transform |
The Transform of the object we hit (Read Only). |
OnTrigger 계열의 메서드가 실행될 때는 메서드 입력으로 충돌한 상대방 게임 오브젝트의 콜라이더 컴포넌트가 Collider 타입으로 들어온다.
쉽게 말하면 충돌 당한 상대의 콜라이더(Collider) 정보를 받아오는 것이라고 생각하면 된다.
트리거 충돌에는 상세한 충돌 정보가 필요 없기 때문에 조금 다르게 받아오는 것이다.
두 가지에 차이점이 있다는 것을 참고하면 되겠다.
참고링크
docs.unity3d.com/ScriptReference/Collider.html
'Game Development, 게임개발 > 개발' 카테고리의 다른 글
다른 클래스 변수 접근(public: x / member variable(Property): o) [Unity] (0) | 2021.03.20 |
---|---|
Time.deltaTime의 의미 [Unity] (0) | 2021.03.15 |
용어 정리 (0) | 2021.03.14 |
AddForce에 대한 모든 것(+RelativeForce) [Unity] (2) | 2021.03.14 |
C#, Unity에서의 접근제한자,Access modifier [Unity] (0) | 2021.03.11 |