2024. 10. 7. 23:08ㆍ카테고리 없음
1.
public void OnMove(InputValue value)
{
Vector2 moveInput = value.Get<Vector2>().normalized;
CallMoveEvent(moveInput);
}
Player Input컴퍼넌트에서 받아온 값을 Vector2값으로 변환시키고 normalized를 사용해서 대각석으로 이동을 하든 상하좌우로 이동을 하든 같은속도로 이동을 하게 만들어놓고, 그 값을 event가 있는 곳으로 값을 보내준다.
OnMove함수가 실행이 되는 이유는 Player Input컴퍼넌트에서 Behavior을 Send Messages로 설정을 해놔서 OnMove가 이벤트함수처럼 실행이 되는거다.
2.
public event Action<Vector2> OnMoveEvent;
public event Action<Vector2> OnLookEvent;
public void CallMoveEvent(Vector2 direction)
{
OnMoveEvent?.Invoke(direction);
}
그 보내준 값을 Invoke를 통해서 예약걸어놓은 메서드한테 값을 보낸다.
3.
private void Start()
{
controller.OnMoveEvent += Move;
}
private void Move(Vector2 direction)
{
movementDirection = direction;
}
Start에서 예약걸어놓은 메서드가 실행이 되서 해당 클래스에서 Vector2값을 가져와서 movementDirection에 저장한다.
4.
private void FixedUpdate()
{
ApplyMovement(movementDirection);
}
private void ApplyMovement(Vector2 direction)
{
direction = direction * 5;
movementRigidbody.velocity = direction;
}
속도를 조절한다음에 Rigidbody2D안에 있는 벡터에 값을 넣어준다. 그 함수를 물리업데이트를 통해서 호출한다.