[Basic] 리지드 바디



리지드 바디의 정의는 중력이나 관성,저항같은 물리적인 효과를 부여해주는 컴포넌트이다.

리지드 바디 컴포넌의 프로퍼티를 살펴보자.

image

순서대로 설명 하겠다.

Mass

뜻 그대로 질량이다. 이 수치가 커지면 커질수록 중력의 영향도 많이 받고 속도에도 영향을 미치고 이 오브젝트의 질량보다 질량이 낮은 오브젝트와 충돌하면 이 오브젝트가 질랴이 낮은 오브젝트를 밀어낸다.

Drag

저항이다. 여기서는 공기저항이라고 생각하면 된다. 수치가 커지면 커질수록 이동속도나, 낙하속도 등에 영향이 간다.

Angular Drag

회전 저항이다. 이 수치가 높으면 회전하는데 영향이 간다. 예를들어 빠르게 회전하고 있는 물체가 있는데 Angular Drag를 계속해서 올리면 빠르게 회전이 멈춘다.

Use Gravity

말 그대로 중력의 여향을 받을 것이냐 말 것이냐를 결정한다.

is Kinematic

쉽게 말해서 물리 효과를 없애는 것이다. 활성화가 되면 이 오브젝트는 물리효과를 받지 않는다.

Interpolate

Interpolate는 캐릭터의 움직임이 어색할 때 보간 하는 방법을 선택하여 자연스럽게 만든다. 여기에는 2가지의 항목이 더 있다. 여기서 항목을 Interpolate로 바꾸면 이전 프레임의 움직임을 통해서 다음 프레임을 만들어 낸다.

Extrapolate는 다음 프레임의 움직임을 예측한다. 그 예측과 실제 움직임의 그 사이의 값을 적당히 골라서 부드럽게 유지시킨다.

Collision Detection

이건 충돌 탐지기 이다. 만약 속도가 빠른 오브젝트의 충돌을 감지해야한다. 그러면 항목에 있는 Continuous를 선택하면 좀 더 세밀하게 충돌을 감지한다.

Constraints

제약사항인데 이 프로퍼티를 열어보면

image

다음과 같이 나오는데 포지션과 로테이션을 얼릴수 있는 프로퍼티가 나온다. 여기서 활성화 되어 있는 프로퍼티는 물리효과를 받지 않고 오직 스크립트상에서만 수정이 가능하게 된다.

스크립트에서 리지드 바디

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 폭발 반경*/);
        //여기서 폭발의 위치에 따라 효과가 바뀜 예를 들어 내 아래에서 터지면 나는 위로 날라가고
        //오른쪽에서 터지면 나는 왼쪽으로 날라감
    }
}

위의 설명이 끝이다.




© 2022. by KSC

Powered by sora