230922_ ForceMode, InputActionPhase, Clamp

Minsang Kim·2023년 9월 22일
0

TIL

목록 보기
29/41

오늘부터 3D 프로젝트 강의 시작.


Rigidbody - ForceMode

ForceMode, 말 그대로 힘모드다. Rigidbody 컴포넌트를 사용해 게임 오브젝트의 물리적인 힘을 가할 때 사용하는 힘 적용 방식이다.

예를 들면 점프할 때, _rigidbody.AddForce(Vector2.up * jumpForce, ForceMode.Impulse); 이런 식으로 적용하면 된다. 그럼 ForceMode의 종류에 대해 알아보자.

TypeExplanation질량 무시ex
Force연속적O지속적으로 힘을 적용. 연속적인 힘 표현.바람, 자기력
Impulse순간적O순간적으로 힘 적용.점프, 타격, 폭발
Acceleration연속적X가속도 적용.중력
VelocityChange순간적X변화하는 속도 적용.

InputActionPhase

이전에는 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라는 데이터를 이용해 상태를 알 수 있다.

TypeExplanation
Started실행 시작 시 호출
Performed실행 확정시 호출 (Started 되고 일정 시간 이후)
Canceled실행 종료시 호출
Disabled액션이 활성화되지 않음
Waiting입력을 기다리는 상태

Mathf.Clamp

그동안 값의 범위를 정의할 때는 if 문을 사용하거나 거지같은 가독성의 Mathf.Max(Mathf.Min(a, 10), 0) 이런 식을 사용했었지만, 역시나 이런 기능이 있었군.

Mathf.Clamp(value, min, max) 매개변수를 넣어주면 자동으로 최솟값보다 작으면 최솟값이, 최댓값보다 크면 최댓값이, 그 사이면 value값이 리턴된다.

profile
게임만 하다가 개발자로

0개의 댓글