[Unity]유니티 입문 -Rigidbody

·2022년 12월 9일
0

Unity

목록 보기
2/7
post-thumbnail

케이디님의 유니티 입문 강좌를 듣고 정리한 내용입니다.

Rigidbody

물리 효과를 제어할 수 있다.

Properties

  • Mass
    물체의 질량. 기본값은 Kg이고, 값이 클 수록 가속력, 관성 등 무게와 관련된 힘들의 크기도 커진다.

  • Drag
    공기저항 값. 값이 커지면 아래로 떨어지는 속도도 줄어든다.
    0이면 저항이 없고, 무한대를 입력하면 오브젝트가 즉시 정지하게 된다.

  • Angular Drag
    회전 공기저항 값. 값이 높을수록 회전 속도가 감속된다.
    0일때는 저항이 없으나, 무한대로 설정한다고 해서 회전이 멈추지는 않는다.

  • Use Gravity
    중력의 영향을 받을 것인지 설정할 수 있다.

  • Is Kinematic
    중력, 관성 등의 물리엔진의 영향을 받을 것인지, 물리효과를 무시하고 로직을 통해서만 움직일 것인지를 결정할 수 있다. 체크하면 물리엔진이 무시된다.

  • Interpolate
    물리엔진에서 움직임을 얼마나 자연스럽게 보정할지를 선택할 수 있다. 캐릭터의 움직임이 부자연스러울 때 전 프레임의 움직임을 통해 다음 프레임의 움직임을 자연스럽게 만든다.

    • None - Interpolate 기능을 사용하지 않는다.
    • Interpolate - 이전 프레임을 기반으로 보정하여 움직임을 자연스럽게보정함.
    • Extrapolate - 다음 프레임의 움직임을 예측해서 움직임을 자연스럽게 보정함.
  • Collision Detection
    충돌 탐지 기능. 물체의 속도가 지나치게 빠를 경우에는 프레임을 기준으로 일정거리를 뛰어넘을 수도 있기 때문에 충돌을 하지 않고 지나치는 경우가 발생할 수 있다. 그럴때 적용한다.
    총알같이 속도가 빠른 물체일때 Continuous나 Continuous Dynamic를 사용한다.

  • Constraints
    리지드바디의 움직임을 제한한다.
    X,Y,Z 축의 이동이나 회전을 선택해서 제한할 수 있다.

Code

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값으로 설정되어있다.

profile
중요한 건 꺾여도 다시 일어서는 마음

0개의 댓글