2023/11/27

안석환·2023년 11월 27일
0

오늘의 코드

public event Action OnMoveEvent;

2차원 매개변수를 가지고 있는 이벤트 이름의 행동을 지정

public void CallMoveEvent(Vector2 direction)
{
OnMoveEvent?.Invoke(direction);
}

외부에서 OnMoveEvent를 이용하기 위한 메서드이다

public class PlayerInputController : TopDownCharacterController
{}

캐릭터의 총괄 클래스에게 상속 받는다.

private Camera _camera;
private void Awake()
{
_camera = Camera.main;
}

클래스의 시작시 발생하는 메서드로서 _카메라는 메인 카메라를 참조한다.

public void OnMove(InputValue value)
{
Vector2 moveInput = value.Get().normalized;
CallMoveEvent(moveInput);
}

이 메서드는 InputValue(입력장치에 대한 통합 인터페이스)의 값을 불러오고 2차원의 정규화한 좌표값을 이차원인 moveInput으로 가져온다.(좌표값을 가져오면 대각선이라 길이가 길어진다)

public void OnLook(InputValue value)
{
Vector2 newAim = value.Get();
Vector2 worldPos = _camera.ScreenToWorldPoint(newAim);
newAim = (worldPos - (Vector2)transform.position).normalized;
if (newAim.magnitude >= .9f)
// Vector 값을 실수로 변환
{
CallLookEvent(newAim);
}
}

어딜 보고있는지에 대한 입력값을 받는 메서드로서 위와 같이 InputValue(입력장치에 대한 통합 인터페이스)의 값을 불러온다

2차원의 마우스 좌표는 입력장치의 값을 받아온다.

worldPos 의 값은 메인카메라 화면상의 마우스 좌표값이다.

여기서 마우스 좌표는 (현제 마우스 포인트 좌표에서 해당 객체의 좌표를 뺀값) 마우스에서 객체까지의 거리를 표준화(위와 같이 대각선 값이 더 길기 때문에 대각선거리를 표준거리 만큼 줄인 값)한 값이다.

private TopDownCharacterController _controller;

탑다운 컨트롤러 상속

private Vector2 _movementDirection = Vector2.zero;
private Rigidbody2D _rigidbody;

private void Awake()
{
    _controller = GetComponent<TopDownCharacterController>();
    _rigidbody = GetComponent<Rigidbody2D>();
}

private void Start()
{
    _controller.OnMoveEvent += Move;
}

private void FixedUpdate()
{
    ApplyMovment(_movementDirection);
}

private void Move(Vector2 direction)
{
    _movementDirection = direction;
}

private void ApplyMovment(Vector2 direction)
{
    direction = direction * 5;

    _rigidbody.velocity = direction;
}

}

profile
안석환!

0개의 댓글