정의
Rigidbody에서 엄청 많이 쓰이는 AddForce를 알아보자
2가지 형태가 있다.
- public void AddForce(Vector3 force, ForceMode mode = ForceMode.Force);
- public void AddForce(float x, float y, float z, ForceMode mode = ForceMode.Force);
쉽게 말하면 AddForce(방향*힘 값, 힘의 종류) 라고 보면 된다.
AddForce는 Rigidbody에게 힘을 전달해준다.
(하지만 모든 Rigidbody가 아닌 Active 상태일 때만 전달된다.)
**이러한 Force calculation은 FixedUpdate() 때 이루어진다.
using UnityEngine; // 이것을 쓰지 못하면 Rigidbody에 접근이 불가능함.
public class ExampleClass : MonoBehaviour
{
public float thrust = 1.0f; //미는 힘
public Rigidbody rb; // 해당 리지드바디
void Start()
{
rb = GetComponent<Rigidbody>(); // 이 스크립트를 refer하는 오브젝트에서 리지드바디를 가져옴
}
void FixedUpdate()
{
rb.AddForce(transform.forward * thrust); //해당 방향으로 업데이트될 때마다 힘을 줌.
// ForceMode를 안 써도 default 값으로 진행됨
}
}
ForceMode는 무엇인가?
어떤 식으로 힘을 전달할 것인가를 결정하는 것이다.
저것들의 차이는 질량을 무시하느냐? 또는 연속적인 힘이냐? 에 따라 달라진다.
Force는 연속 + 질량 무시 X
-> 현실적인 물리현상을 나타낼 때 많이 씀
Accel은 연속 + 질량 무시 O
->질량에 관계 없이 가속된다. 즉, 오브젝트의 질량에 관계없이 가속을 주고싶다면 이용한다.
Impulse는 불연속 + 질량 무시 X
-> 짧은 순간의 힘, 충돌이나 폭발과 같은 것에 많이 쓰인다.
Velocity Change 불연속 + 질량 무시 O
-> 마찬가지로 질량에 관계 없이 속도를 바꾼다. 질량이 다른 함대 같은 경우 같은 힘을 줘서는
같은 속도로 움직일 수 없는데 이 모드를 사용하면 가능하다.
AddRelativeForce라는 것이 있다. 원형을 보자면 아래와 같이 생겼다.
- public void AddRelativeForce(Vector3 force, ForceMode mode = ForceMode.Force)
Adds a force to the rigidbody relative to its coordinate system.
RigidBody가 로컬 좌표계에 의해서 반영되는 것이다..
'게임엔진 > Unity' 카테고리의 다른 글
[Unity] onClick.AddListener에서 함수의 파라미터 전달 문제 (0) | 2023.01.14 |
---|---|
[Unity] 안드로이드 플러그인 사용해보기 (0) | 2023.01.09 |
[Unity] 트랜스폼을 이용해서 AI 만들기 (0) | 2022.12.07 |
[Unity] 키보드와 마우스 입력받기 (0) | 2022.12.04 |
[Unity] 입력 바인딩 시스템 만들기 (0) | 2022.11.30 |