오늘부터 3D 프로젝트 강의 시작.
ForceMode, 말 그대로 힘모드다. Rigidbody 컴포넌트를 사용해 게임 오브젝트의 물리적인 힘을 가할 때 사용하는 힘 적용 방식이다.
예를 들면 점프할 때, _rigidbody.AddForce(Vector2.up * jumpForce, ForceMode.Impulse);
이런 식으로 적용하면 된다. 그럼 ForceMode의 종류에 대해 알아보자.
Type | Explanation | 질량 무시 | ex | |
---|---|---|---|---|
Force | 연속적 | O | 지속적으로 힘을 적용. 연속적인 힘 표현. | 바람, 자기력 |
Impulse | 순간적 | O | 순간적으로 힘 적용. | 점프, 타격, 폭발 |
Acceleration | 연속적 | X | 가속도 적용. | 중력 |
VelocityChange | 순간적 | X | 변화하는 속도 적용. |
이전에는 InputAction에 동작방식을 Send Message
방식으로 하다가. 이번에는 Invoke Unity Events
방식으로 구현했다. 일반적인 이벤트처럼 인스펙터창에 드래그앤드롭으로 이벤트를 추가해서 사용하는 방식이다.
public void OnMoveInput(InputAction.CallbackContext context)
{
if (context.phase == InputActionPhase.Performed)
{
curMovementInput = context.ReadValue<Vector2>();
}
else if (context.phase == InputActionPhase.Canceled)
{
curMovementInput = Vector2.zero;
}
}
플레이어 구현의 이동 부분 메소드. 이번에는 매개변수로 InputAction.CallbackContext
를 받아오고 있다. 그리고 이 context의 phase라는 데이터를 이용해 상태를 알 수 있다.
Type | Explanation |
---|---|
Started | 실행 시작 시 호출 |
Performed | 실행 확정시 호출 (Started 되고 일정 시간 이후) |
Canceled | 실행 종료시 호출 |
Disabled | 액션이 활성화되지 않음 |
Waiting | 입력을 기다리는 상태 |
그동안 값의 범위를 정의할 때는 if 문을 사용하거나 거지같은 가독성의 Mathf.Max(Mathf.Min(a, 10), 0) 이런 식을 사용했었지만, 역시나 이런 기능이 있었군.
Mathf.Clamp(value, min, max)
매개변수를 넣어주면 자동으로 최솟값보다 작으면 최솟값이, 최댓값보다 크면 최댓값이, 그 사이면 value값이 리턴된다.