- 액션별로 이벤트 연결 인터페이스가 생성되고 각각 호출하려는 함수를 연결해 사용

- 먼저 컴포던트에 이 3가지를 추가해준다.
- Script
- 먼저 Script는 움직임을 담고 있는 코드이다.
- RigidBody2D
- RigidBody2D는 Unity의 물리 엔진과 연결되어 있다.
- RigidBody2D를 통해 물리적 계산 자동 처리,충돌 처리, 중력 적용, 움직임의 자연스러움, 물리 엔진의 이벤트 사용 가능하다.

- Player Input
- 이부분이 바로 InputSystem의 설정 부분이다.
- 다음으로 Input Action Asset을 설정

- wasd가 각각 눌릴때 그 값을 이용해 움직임을 사용할 것이므로 Action Type을 Value로 설정하였다.
- 그리고 2d움직임이므로 Control Type은 Vector2를 사용했다.
- 다음으로 코드를 알아보자
public class PlayerMove : MonoBehaviour
{
private Vector2 moveInput;
private float speed = 5f;
private Rigidbody2D rb;
}
- 플레이어의 입력 값을 저장하는 변수 (2D 벡터)인 moveInput 설정
- 기본 속도를 5로 설정
- Rigidbody2D를 사용하는 스크립트에서는 해당 컴포넌트를 조작하거나 메서드를 호출해야 한다.
void Start()
{
rb = GetComponent<Rigidbody2D>();
}
- 먼저 Start()는 Unity 시작시 한번 실행되는 메서드이다.
- GameObject에 연결된 Rigidbody2D 컴포넌트를 가져온다.
void FixedUpdate()
{
Vector2 movement = moveInput * speed * Time.fixedDeltaTime;
rb.MovePosition(rb.position + movement);
}
- FixedUpdate()는 Unity에서 물리 연산을 처리할 때 사용하는 메서드로, 매 프레임이 아닌 물리 엔진의 고정 시간 간격(default: 0.02초)마다 호출
- 입력된 방향(moveInput)에 속도(speed)와 물리 프레임 시간(Time.fixedDeltaTime)을 곱해 이동 거리 계산
- 여기서 Time.fixedDeltaTime은 고정 시간 간격으로 FixedUpdate()에 이동거리의 프레임 의존성을 제거
- 다음으로 현재 위치(rb.position)에 이동 거리(movement)를 더하여 새로운 위치로 Rigidbody를 이동.
- 여기서 MovePosition()은 Rigidbody를 물리적으로 이동시키는 메서드로, 충돌 처리를 포함
public void OnMove(InputAction.CallbackContext ctx)
{
moveInput = ctx.ReadValue<Vector2>();
}
- OnMove()는 Unity Input System에서 입력 이벤트가 발생했을 때 호출되는 메서드
- InputAction.CallbackContext는 Input System에서 입력의 상태와 값을 전달하는 컨텍스트 객체
- CallbackContext는 Unity Input System에서 입력 이벤트와 관련된 데이터를 제공하는 구조체
- ctx.ReadValue()는 Vector2 형식의 입력 값을 읽어온다.
- 코드의 흐름
start(RigidBody 2d를 가져옴)-Onmove(입력처리)-FixedUpdate(물리 이동)
- sendmessage와의 차이점
