[Basic] 리지드 바디
in Unity
리지드 바디의 정의는 중력이나 관성,저항같은 물리적인 효과를 부여해주는 컴포넌트이다.
리지드 바디 컴포넌의 프로퍼티를 살펴보자.
순서대로 설명 하겠다.
Mass
뜻 그대로 질량이다. 이 수치가 커지면 커질수록 중력의 영향도 많이 받고 속도에도 영향을 미치고 이 오브젝트의 질량보다 질량이 낮은 오브젝트와 충돌하면 이 오브젝트가 질랴이 낮은 오브젝트를 밀어낸다.
Drag
저항이다. 여기서는 공기저항이라고 생각하면 된다. 수치가 커지면 커질수록 이동속도나, 낙하속도 등에 영향이 간다.
Angular Drag
회전 저항이다. 이 수치가 높으면 회전하는데 영향이 간다. 예를들어 빠르게 회전하고 있는 물체가 있는데 Angular Drag를 계속해서 올리면 빠르게 회전이 멈춘다.
Use Gravity
말 그대로 중력의 여향을 받을 것이냐 말 것이냐를 결정한다.
is Kinematic
쉽게 말해서 물리 효과를 없애는 것이다. 활성화가 되면 이 오브젝트는 물리효과를 받지 않는다.
Interpolate
Interpolate는 캐릭터의 움직임이 어색할 때 보간 하는 방법을 선택하여 자연스럽게 만든다. 여기에는 2가지의 항목이 더 있다. 여기서 항목을 Interpolate로 바꾸면 이전 프레임의 움직임을 통해서 다음 프레임을 만들어 낸다.
Extrapolate는 다음 프레임의 움직임을 예측한다. 그 예측과 실제 움직임의 그 사이의 값을 적당히 골라서 부드럽게 유지시킨다.
Collision Detection
이건 충돌 탐지기 이다. 만약 속도가 빠른 오브젝트의 충돌을 감지해야한다. 그러면 항목에 있는 Continuous를 선택하면 좀 더 세밀하게 충돌을 감지한다.
Constraints
제약사항인데 이 프로퍼티를 열어보면
다음과 같이 나오는데 포지션과 로테이션을 얼릴수 있는 프로퍼티가 나온다. 여기서 활성화 되어 있는 프로퍼티는 물리효과를 받지 않고 오직 스크립트상에서만 수정이 가능하게 된다.
스크립트에서 리지드 바디
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NewBehaviourScript : MonoBehaviour
{
private Rigidbody rigid;
private void Awake()
{
rigid=GetComponent<Rigidbody>();
}
void Update()
{
//현재 오브젝트의 속도를 관리한다.만약 리지드 바디의 저항값이 없으면 속도가 유지 된다.
rigid.velocity = Vector3.forward; //앞으로 나가게 된다.
//현재 오브젝트의 회전속도를 관리한다. 만약 회전 자항값이 없으면 계속 회전한다.
rigid.angularVelocity = -Vector3.right; //왼쪽으로 회전한다.
//질량을 바꿀 수 있다.
rigid.mass = 2f;
//공기저항을 바꿀 수 있다
rigid.drag = 2f;
//회전 저항값을 바꿀 수 있다.
rigid.angularDrag = 1f;
//회전의 최대 속도를 변경시킴 기본적으로 7로 되어 있음
rigid.maxAngularVelocity =100; //이제 회전 속도를 100까지 올릴 수 있다.
//활성화 비활성화 가능
rigid.isKinematic = true;
rigid.useGravity = true;
//-----------------------------------------------------------------
//이 아래에 두 함수는 물리영향을 받지 않음
//일정 방향으로 이동시키는 것
rigid.MovePosition(/*방향*/);
//일정 Quaternion값으로 회전시킴
rigid.MoveRotation(/*Quaternion값 필요*/);
//-----------------------------------------------------------------
//특정방향으로 힘을 준다. 물리영향 받음
rigid.AddForce();
//특정 축을 기준으로 회전을 준다. 물리영향 받음
rigid.AddTorque();
//폭발 같은 효과를 구현할 떄 유용함
rigid.AddExplosionForce(/*float 폭발력 세기, 폭발의 위치,float 폭발 반경*/);
//여기서 폭발의 위치에 따라 효과가 바뀜 예를 들어 내 아래에서 터지면 나는 위로 날라가고
//오른쪽에서 터지면 나는 왼쪽으로 날라감
}
}
위의 설명이 끝이다.