본문 바로가기
unity3d

Unity 5 - Roll a Ball game

by java개발자 2017. 11. 12.

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나 자동차처럼 움직이는 부분

 

충돌을 계산할 때 정적 지오메트리는 충돌의 영향을 받지 않는다.

하지만 동적 오브젝트는 영향을 받는다.

동적 지오메트리(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