-
유니티 리지드바디2D(Rigidbody2D)와 리지드바디(Rigidbody)(1)유니티(Unity)/유니티 코딩 2019. 2. 8. 16:48
해당 티스토리 페이지는 필자가 유니티 C# 개발을 하면서 학습한 내용들을 기록하고 공유하는 페이지입니다 !
- 틀린 부분이 있거나, 수정된 부분이 있다면 댓글로 알려주세요 !
- 해당 내용을 공유 or 퍼가도 좋으나, 출처를 꼭 명시해주세요 !
- 해당 글의 모든 저작권은 Chameleon Studio에 있습니다.
- 방문해주셔서 감사합니다 ^^
유니티 리지드바디2D와 리지드바디
안녕하세요! 카멜레온입니다 ㅎㅎ
오늘은 리지드바디(Rigidbody)와 리지드바디2D(Rigidbody2D)에 대해서 알아볼까합니다 ㅎㅎ
일반적으로, 유니티 프로젝트를 만들 때 2D로 할 지 3D로 할 지 체크를 하게 됩니다.
그 때, 3D로 체크하고 프로젝트를 만든다면, 리지드바디를 사용해야합니다.
2D를 체크하면 리지드바디2D를 사용해야 하구요.
게임 오브젝트에 Rigidbody 추가
리지드바디 붙히는 법
리지드바디를 게임오브젝트에 붙히는 법은 간단합니다.
리지드바디를 붙히고 싶은 오브젝트를 클릭합니다.
Inspector 창에서 Add Component를 누른 후, rigidbody를 검색해서
프로젝트의 2D냐 3D냐에 맞게 리지드바디 또는 리지드바디2D를 눌러주면 됩니다.
Rigidbody 2D 컴포넌트Rigidbody 컴포넌트
리지드바디(Rigidbody)란?
왼쪽이 리지드바디2D로 만들었을 때 인스펙터(Inspector) 창에 나타나는 Rigidbody 2D 컴포넌트입니다.
오른쪽은 3D 프로젝트에서 선택한 Rigidbody 컴포넌트입니다.
약간의 차이가 있습니다.
우선, 리지드바디2D와 리지드바디와의 다른 점은
오브젝트가 X, Y 평면에서만 움직이고 그 평면에 수직인 축을 중심으로만 회전한다는 점이 다릅니다.
나머지 틀은 비슷합니다.
먼저,
리지드바디(Rigidbody)는 게임오브젝트(GameObject)가 물리 제어로 동작하게 합니다.
물체에 생명력을 불어넣어주는 것이라고 생각하면 쉽겠습니다.
리지드바디 컴포넌트가 붙혀지면 스크립팅을 통해 가해진 힘을 받아 물체가 사실적으로 움직이도록 해줍니다.
결국, 게임오브젝트에 어떠한 힘을 주기 위해선 스크립트에 코딩을 해야합니다.
코딩한 스크립트까지 붙혀줘야 한다는 것이죠.
다시 말해, 게임오브젝트가 움직이려면 리지드바디 컴포넌트 + 코딩된 스크립트가 있어야 한다는 것입니다.
캐릭터(게임오브젝트)가 리지드바디와 코딩된 스크립트를 가지고 움직이는 것을 보고 싶으시다면 여기를 눌러주세요.
캐릭터 움직이기에 관한 포스팅을 이전에 해두었습니다.
Rigidbody 2D 컴포넌트 - Body Type: Dynamic
Rigidbody 2D
다시 본론으로 돌아와서, 리지드바디가 가지고 있는 자산들을 리지드바디2D부터 하나하나 알아봅시다.
리지드바디2D의 자산을 알아봅시다.
Body Type
리지드바디2D의 바디 타입은 3종류가 있습니다.
다이나믹(Dynamic), 키네마틱(Kinematic), 스태틱(Static)
다이나믹 타입은 주변의 모든 물체와 상호작용이 가능합니다.
예를 들어, 캐릭터가 중력과 힘을 갖고 있어서 다른 물체와 부딪히면 뒤로 밀려납니다.
키네마틱 타입은 중력과 힘이 없이 없고 스크립트에 의해 이동만 할 때 사용합니다.
그래서 다른 물체와 부딪혀도 밀리지 않습니다.
예를 들면, 좌우로 움직이는 다리나 앞만 보고 돌진하는 미사일과 같은 물체가 필요할 때 키네마틱을 사용합니다.
마지막으로, 스태틱 타입은 움직이지 않는 물체입니다.
예를 들면, 돌이라고 해봅시다.
스태틱 타입은 돌이고, 다이나믹 타입을 가지고 있는 캐릭터와 부딪혔을 때,
돌은 꿈쩍하지 않습니다.
캐릭터만 돌부리에 넘어지는 것이지요.
그렇기에 스태틱 타입은 CPU 리소스가 가장 덜 사용됩니다.
먼저 BodyType 중 다이나믹(Dynamic) 타입에 대한 설명부터 시작하겠습니다.
Material
특정 부모 리지드바디 2D에 연결된 모든 콜라이더 2D의 공통 머티리얼을 지정하기 위해 사용합니다.
예를 들면, 공튀기기의 튕김정도를 설정할 때, 자신의 원하는 물리 머터리얼을 정할 수 있습니다.
간단한 게임을 만드는 경우에는 Material은 거의 사용되지 않습니다.
Simulated
런타임동안 다른 리지드바디 컴포넌트와 상호작용하려면 체크해둡니다.
체크를 해제하면 어떤 물리도 받지 않습니다.
Use Auto mass
게임 오브젝트의 질량을 자동으로 감지합니다.
Mass
게임 오브젝트의 질량을 수동으로 지정합니다.
1Mass는 1Kg과 동일합니다.
Linear Drag
포지션 움직임에 영향을 미치는 저항계수입니다.
질량(Mass)가 크고 Linear Drag가 크다면, 더 느리게 움직입니다.
쉽게, 바람이 많이 분다고 생각하면 됩니다.
Angular Drag
회전 움직임에 영향을 미치는 저항계수입니다.
질량이 크고 Augular Drag가 크면 더 느리게 회전합니다.
부메랑이 회전할 때를 생각해보면 쉽게 이해할 수 있을겁니다.
Gravity Scale
게임오브젝트가 중력에 영향을 받는 정도를 의미합니다.
일반적으로, 지구 중력은 9.81이지요.
중력이 높으면 높을수록 게임오브젝트는 더 빨리 아래로 떨어집니다.
반대로 중력이 낮으면 우주에서 부유하듯이 천~천히 떨어집니다.
Collision Detection
콜라이더 2D간 충돌을 검사하는 방식을 정의합니다.
2가지 타입이 있습니다.
1. Discrete: 물체와 물체가 부딪혔을 때, 빠르게 부딪힌다면 서로 겹치거나 통과할 수 있는 타입입니다.
총알이 관통함이 여기에 해당합니다.
2. Continuous: 서로 겹치거나 통과하지 않습니다. 대신 Discrete보다 더 많은 CPU 시간을 사용합니다.
Sleeping Mode
게임오브젝트가 휴식 상태일 때, CPU 리소스 사용을 절약하기 위해서 수면 모드로 들어갑니다.
Sleeping Mode는 3가지의 타입이 있습니다.
1. Never Sleep: 수면 모드를 사용하지 않습니다. CPU 리소스가 많이 사용되니, 가능한 Never Sleep 타입은 지양해야합니다.
2. Start Awake: 처음 시작 시, 오브젝트가 깨어 있습니다.
3. Start Asleep: 처음엔 수면 상태이고, 부딪히면 깨어납니다.
Interpolate
게임 오브젝트의 움직임이 어색할 때, 움직임을 부드럽게 하기 위하여 사용합니다.
3가지 타입이 있습니다.
1. None: 움직임에 부드러움을 적용하지 않습니다.
2. Interpolate: 게임 오브젝트의 이전 프레임의 위치를 기반하여, 움직임을 부드럽게 합니다.
3. Extrapolate: 게임 오브젝트의 다음 프레임의 위치를 추정하여, 움직임을 부드럽게 합니다.
Constraints
축의 움직임을 사용하지 않기 위한다면 체크합니다.
Freeze Position X: 게임 오브젝트가 X축으로 움직이지 않습니다.
Freeze Position Y: 게임 오브젝트가 Y축으로 움직이지 않습니다.
Freeze Rotation Z: 게임 오브젝트가 Z축으로 회전하지 않습니다.
카멜레온 스튜디오가 만든 <젤랑점핑> 모바일 게임의 경우 Freeze Rotation Z를 사용하여, 물체와 충돌하여도
젤랑이들이 Z축으로 회전하지 않게끔 설정하였습니다.
Rigidbody 2D 컴포넌트 - Body Type: Kinematic
다음은 키네마틱(Kinematic) 바디 타입(Body Type)입니다.
다이나믹(Dynamic)에 대한 설명과 거의 다 동일하지만
한가지 다른 게 보입니다.
Use Full Kinematic Contacts
이 설정을 체크하면, 모든 리지드바디2D의 바디 타입(Body Type)과 충돌상호작용합니다.
이 설정을 체크 해제하면, 다이나믹(Dynamic) 바디 타입(Body Type)과만 충돌상호작용합니다.
일반적으로 체크 해제되어 있습니다.
나머지 설정 내용은 모두 동일합니다.
Rigidbody 2D 컴포넌트 - Body Type: Static
마지막으로, 스태틱(Static) 바디 타입(Body Type)입니다.
스태틱 타입의 설정 내용도 다이나믹(Dinamic)에서 설명한 내용과 동일합니다.
키네마틱(Kinematic) 타입과 다른 점은, 스태틱(Static) 타입은 무조건 다이나믹(Dynamic) 타입과만 충돌상호작용합니다.
추가적으로, 모든 리지드바디 타입의 충돌을 위해선 항상 콜라이더가 필요합니다.
콜라이더가 없다면, 충돌 여부를 판단할 수 없기 때문입니다.
콜라이더와 리지드바디는 거의 한 세트와 같다고도 볼 수 있는데요.
보다 자세한 이해를 위해선, 여기를 눌러주세요.
이번 포스팅에서 리지드바디에 대한 설명과 리지드바디2D에 대한 설정 내용을 살펴보았습니다.
다음 포스팅인 [유니티 코딩] 리지드바디2D(Rigidbody2D)와 리지드바디(Rigidbody)(2)에서는
리지드바디(Rigidbody)에 대한 설정 내용을 알아보도록 하겠습니다.
궁금한 사항은 댓글에 달아주세요.
또, 카멜레온이 다뤘으면 좋겠다하는 포스팅 내용을 달아주시면, 해당 내용에 관한 포스팅도 해보도록 하겠습니다.
감사합니다 !
Chameleon Studio가 만든 게임하러가기
<젤랑점핑>
안드로이드- market://details?id=com.Cameleon.TangTangBall
IOS- itms-apps://itunes.apple.com/app/id1429522379
<크러쉬팡>
'유니티(Unity) > 유니티 코딩' 카테고리의 다른 글
유니티 코루틴 Coroutine 코드의 모든 것 (0) 2019.02.08 유니티 리지드바디2D(Rigidbody2D)와 리지드바디(Rigidbody)(2) (1) 2019.02.08 유니티 코루틴 coroutine 활용하기 (0) 2019.02.06 유니티 캐릭터 점프 구현하기 (0) 2019.02.06 유니티 KeyCode 종류 알아보기 (1) 2019.02.06 댓글