Rigidbody
물리 시뮬레이션을 통해 오브젝트의 위치를 제어합니다.
오브젝트에 리지드바디 컴포넌트를 추가하면 오브젝트의 모션이 Unity 물리 엔진의 제어를 받습니다. 코드를 추가하지 않아도 리지드바디 오브젝트는 중력에 의해 아래쪽으로 당겨지고, 올바른 Collider 컴포넌트가 있으면 들어오는 오브젝트와의 충돌에 반응합니다.
또한 Rigidbody에는 스크립팅 API가 있어 오브젝트에 힘을 가하고 물리적으로 사실적인 방식으로 제어할 수 있습니다. 예를 들어 자동차의 동작을 바퀴에 가해지는 힘으로 지정할 수 있습니다. 이 정보가 주어지면 물리 엔진은 자동차 동작의 다른 대부분의 측면을 처리할 수 있으므로 사실적으로 가속하고 충돌에 올바르게 반응합니다.
스크립트에서는 힘을 가하고 리지드바디 설정을 변경하는 장소로 FixedUpdate 함수를 권장합니다(대부분의 다른 프레임 업데이트 작업에 사용되는 Update와는 반대로). 피직스 업데이트가 프레임 업데이트와 일치하지 않는 측정된 시간 단계로 수행되기 때문입니다. FixedUpdate는 각 피직스 업데이트 직전에 호출되므로 변경 사항이 바로 처리됩니다.
Rigidbody를 처음 시작할 때 흔히 발생하는 문제는 게임 피직스가 '슬로우 모션'으로 실행되는 것처럼 보인다는 것입니다. 이는 실제로 모델에 사용된 스케일 때문입니다. 기본 중력 설정은 하나의 월드 단위가 1미터의 거리에 해당한다고 가정합니다. 비물리 게임에서는 모델의 길이가 모두 100단위라고 해도 큰 차이가 없지만, 물리를 사용할 때는 매우 큰 물체로 취급됩니다. 작아야 할 물체에 큰 스케일을 사용하면 물리 엔진이 매우 큰 물체가 매우 먼 거리에서 떨어지는 것으로 간주하여 매우 느리게 떨어지는 것처럼 보입니다. 이를 염두에 두고 물체의 크기를 실제 크기와 비슷하게 유지하세요(예를 들어 자동차는 4단위 = 4미터 정도).
Rigidbody.AddForce
public void AddForce(Vector3 force, ForceMode mode = ForceMode.Force);
Rigidbody에 힘을 추가합니다.
힘(Force)은 힘 벡터의 방향을 따라 연속적으로 적용됩니다. ForceMode 모드를 지정하면 힘의 유형을 가속도, 임펄스 또는 속도 변화로 변경할 수 있습니다.
이 함수로 적용된 힘의 효과는 호출 시점에 누적됩니다. 물리 시스템은 다음 시뮬레이션 실행 시(FixedUpdate 이후 또는 스크립트에서 Physics.Simulate 메서드를 명시적으로 호출할 때) 효과를 적용합니다. 이 함수에는 다양한 모드가 있으므로 물리 시스템은 전달된 힘 값이 아닌 결과 속도 변화만 누적합니다. 델타타임(DT)이 시뮬레이션 단계 길이(Time.fixedDeltaTime)와 같고 질량은 힘이 가해지는 리지드바디의 질량과 같다고 가정하면 모든 모드에서 속도 변화가 계산되는 방식은 다음과 같습니다:
ForceMode.Force: 입력을 힘(뉴턴 단위로 측정)으로 해석하고 힘 * DT/질량 값으로 속도를 변경합니다. 이 효과는 시뮬레이션 스텝 길이와 몸체의 질량에 따라 달라집니다.
ForceMode.Acceleration : 매개 변수를 가속도(초당 미터 제곱으로 측정)로 해석하고 힘 * DT 값에 따라 속도를 변경합니다. 효과는 시뮬레이션 단계 길이에 따라 달라지지만 몸의 질량에는 영향을 받지 않습니다.
ForceMode.Impulse: 매개변수를 임펄스(뉴턴초 단위로 측정)로 해석하고 힘/질량 값에 따라 속도를 변경합니다. 이 효과는 몸체의 질량에 따라 달라지지만 시뮬레이션 단계 길이에는 영향을 받지 않습니다.
ForceMode.VelocityChange: 매개 변수를 직접적인 속도 변화(초당 미터 단위로 측정)로 해석하고 힘의 값에 따라 속도를 변경합니다. 이 효과는 몸체의 질량이나 시뮬레이션 단계 길이에 의존하지 않습니다.
Rigidbody
https://docs.unity3d.com/6000.0/Documentation/ScriptReference/Rigidbody.html
Rigidbody.AddForce
https://docs.unity3d.com/6000.0/Documentation/ScriptReference/Rigidbody.AddForce.html
'유니티 엔진 (Unity Engine)' 카테고리의 다른 글
[Unity C#] 파일 경로 분리와 경로 구분자 변환: 두 가지 접근법 비교 (0) | 2024.12.06 |
---|---|
유니티 엔진 라이트맵 베이커 Bakery의 Texels per unit 이란? (0) | 2024.06.03 |
[Unity] Timeline 을 구성하는 PlayableGraph의 Playable 구성 샘플 (0) | 2024.05.30 |
[Unity] ScriptableWizard 클래스로 간단하게 커스텀 툴, 에디터 창 만들기 (0) | 2024.05.15 |
[Unity] 후처리 효과 : 앰비언트 오클루젼 - Post Processing Effects: Ambient Occlusion (0) | 2024.05.14 |
[Unity] The Unity Tutorial For Complete Beginners(완전 초보자를 위한 유니티 튜토리얼) 스크랩 (0) | 2024.05.13 |
[Unity] 모바일📱최적화 2022LTS 파트 1~4 정리 + 스크랩 (0) | 2024.05.13 |