케이디님의 유니티 입문 강좌를 듣고 정리한 내용입니다.
물리 효과를 제어할 수 있다.
Mass
물체의 질량. 기본값은 Kg이고, 값이 클 수록 가속력, 관성 등 무게와 관련된 힘들의 크기도 커진다.
Drag
공기저항 값. 값이 커지면 아래로 떨어지는 속도도 줄어든다.
0이면 저항이 없고, 무한대를 입력하면 오브젝트가 즉시 정지하게 된다.
Angular Drag
회전 공기저항 값. 값이 높을수록 회전 속도가 감속된다.
0일때는 저항이 없으나, 무한대로 설정한다고 해서 회전이 멈추지는 않는다.
Use Gravity
중력의 영향을 받을 것인지 설정할 수 있다.
Is Kinematic
중력, 관성 등의 물리엔진의 영향을 받을 것인지, 물리효과를 무시하고 로직을 통해서만 움직일 것인지를 결정할 수 있다. 체크하면 물리엔진이 무시된다.
Interpolate
물리엔진에서 움직임을 얼마나 자연스럽게 보정할지를 선택할 수 있다. 캐릭터의 움직임이 부자연스러울 때 전 프레임의 움직임을 통해 다음 프레임의 움직임을 자연스럽게 만든다.
Collision Detection
충돌 탐지 기능. 물체의 속도가 지나치게 빠를 경우에는 프레임을 기준으로 일정거리를 뛰어넘을 수도 있기 때문에 충돌을 하지 않고 지나치는 경우가 발생할 수 있다. 그럴때 적용한다.
총알같이 속도가 빠른 물체일때 Continuous나 Continuous Dynamic를 사용한다.
Constraints
리지드바디의 움직임을 제한한다.
X,Y,Z 축의 이동이나 회전을 선택해서 제한할 수 있다.
public class Test3 : MonoBehaviour
{
private Rigidbody myRigid;
private Vector3 rotation;
void Start()
{
myRigid = GetComponent<Rigidbody>();
rotation = this.transform.eulerAngles;
}
// Update is called once per frame
void Update()
{
if (Input.GetKey(KeyCode.W))
{
//질량 지정
myRigid.mass =2f;
//저항 지정
myRigid.drag = 2f;
//속도 지정
myRigid.velocity = new Vector3(0, 0, 1); //Vector3.forward와 동일
//회전 속도 지정
myRigid.angularVelocity = new Vector3(0, 0, 1);//Vector3.right와 동일
//최대 회전 속도를 지정. 하지 않으면 7이 최대이다.
myRigid.maxAngularVelocity = 100;
//메소드 Move~ ,Add~ 가 있다.
//키를 누르면 일정 방향으로 이동,관성과 질량에 영향을 받지않고 강제로 이동
myRigid.MovePosition(transform.forward);
//키가 눌릴때만 회전.
rotation += new Vector3(90, 0, 0)*Time.deltaTime;
myRigid.MoveRotation(Quaternion.Euler(rotation));
//키를 누르면 힘의 방향으로 이동. 물리엔진의 영향을 받기때문에 키를 떼도 천천히 정지
myRigid.AddForce(Vector3.forward);
//키가 눌릴때만 회전. 물리엔진의 영향을 받기때문에 키를 Epaus 천천히 정지
myRigid.AddTorque(Vector3.up);
//폭발 지정. (힘, 위치 반경)
myRigid.AddExplosionForce(10, this.transform.right,10);
}
}
}
추가로 아래와 같이 project settings>phyics>gravity에 들어가면 현재 적용된 중력값을 알 수 있다. 현실과 같이 y축으로 -9.81값으로 설정되어있다.