Unity 5 - Roll a Ball game - 1 of 8: Setting up the Game - Unity Official Tutorials
https://unity3d.com/kr/learn/tutorials/s/roll-ball-tutorial
https://www.youtube.com/watch?v=W_fAidYRGzs
Name |
Wall |
Player |
Pick Up |
|
GameObject |
Cube |
Cube |
Cube |
|
기본 Component |
Transform |
Transform |
Transform |
|
|
Cube (Mesh Filter) |
Cube (Mesh Filter) |
Cube (Mesh Filter) |
|
|
Box Collider |
Box Collider |
Box Collider - Is Trigger |
Is Trigger : 접촉을 탐지하기 위해 > OnTriggerEnter 로 callback 받을 수 있다. |
|
Mesh Renderer |
Mesh Renderer |
Mesh Renderer |
|
추가 Component |
RigidBody - Use Gravity |
RigidBody - Use Gravity - Is Kinematic |
Is Kinematic : |
|
|
|
|
|
|
Script | PlayerController - Start - FixedUpdate - OnTriggerEnter |
Rotate - Update |
Update : 매프레임마다 호출됨. FixedUpdate : 물리효과 계산을 수행하기 직전에 호출됨. OnTriggerEnter : 트리거를 감지했을때 작동 |
|
tag설정 |
Unity 5 - Roll a Ball game - 6 of 8: Counting Points - Unity Official Tutorials 에서
collider : 콜라이더, 충돌체
* 중요 포인트
1. 충돌 계산:
유니티 물리 효과 엔진은
두개의 콜라이더 볼륨이 켭치는 것을 허용하지 않는다.
두개 이상의 콜라이더가 프레임에서 겹치는 것을 탐지하면, 해당 오브젝트를 검토해 속도 및 회전과 형태를 분석해서 충돌을 계산한다.
이 계산의 주요 인수 중 하나는 콜라이더가 정적인지, 동적인지 여부이다.
정적 콜라이더 : 벽, 바닥 등과 같이 움직이지 않는 부분
동적 콜라이더 : Player나 자동차처럼 움직이는 부분
충돌을 계산할 때 정적 지오메트리는 충돌의 영향을 받지 않는다.
하지만 동적 오브젝트는 영향을 받는다.
2. 물리 효과 최적화 방법
유니티는 씬의 모든 정적 콜라이더의 볼륨을 계산하고, 캐시에 저장한다.
정적 콜라이더가 움직여서는 안되므로 이를 통해 모든 프레임의 정보를 다시 계산해 저장한다.
그런데, Pick Up은 정적 콜라이더인데 회전하고 있다.
정적 콜라이더를 이동 또는 회전하거나 크기를 조정하면,
유니티는 모든 정적 코라이더를 매 프레임마다 다시 계산해 캐시를 업데이트 한다.
재계산을 할 때 캐시가 많은 리소스를 차지한다.
그러니 Pick Up을 동적 콜라이더로 만들어야 한다.
유니티는 사용자가 동적 콜라이더를 이동시킬 것이라는 것을 예상해서
동적 콜라이더의 볼륨을 캐시에 저장하지 않는다.
물론, 유니티는 어떤 콜라이더가 동적인지 알아야 한다.
이때 리지드바디 컴포넌트를 이용한다.
콜라이더 + 리지드바디 ------> 동적 콜라이더
콜라이더 ----------------------> 정적 콜라이더
그런데, Pick Up에 리지드바디(+Use Grivity)를 적용하면,
Pick Up은 트리거이므로, 바닥과 충돌하지 않고, 중력 때문에 밑으로 떨어진다.
밑으로 떨어지는 것을 막기 위해 Use Gravity를 해제하면 되지만 임시방편이다.
여전히 다른 물리력에는 계속 반응하기 때문이다.
더 나은 해결책: Is Kinematic
> 물리력에는 반응하지 않으며, transform을 이용해서 움직일 수 있다. (일반 리지드바디는 물리력을 이용해 움직인다.)
> 엘리베이터 같은 이동플랫폼 등에 상용됨.
> 정리
벽, 바닥 |
콜라이더 |
정적 |
공, 자동차 |
콜라이더 + 리지드바디 |
동적 |
엘리베이터 |
콜라이더 + 리지드바디(kinematic) |
동적 |
감지기 |
콜라이더(trigger) |
정적 |
움직이는 감지기 |
콜라이더(trigger) + 리지드바디(kinematic) |
동적 |
|
|
|
|
|
|
'unity3d' 카테고리의 다른 글
visual studio 2017 shortcut (0) | 2017.11.23 |
---|---|
c# window output (0) | 2017.11.22 |
namespace could not be found (0) | 2017.11.22 |
Vector3 (0) | 2017.11.16 |
안드로이드 빌드 버그 (0) | 2017.10.28 |