
간단한 비행기 슈팅게임을 만들어보자.
1.움직이기
움직이는 것을 new Input System을 통해 구현해보자.
우선 InputAction에서 Generate C# class를 켜주고 Apply해서 코드로 불러낼 수 있도록 해주자.


이렇게 해준다음 Player 클래스를 생성하여 매핑된 Actions가 작동될 때 실행될 함수를 할당해주자.

우선 입력을 받아올 때 입력 이벤트의 context를 Vector2로 읽어드려서 어떤 방향에서의 입력인지 알아내고 이를 저장한다. 저장한 값이 0보다 크다면 해당 방향으로 이동을 시작하게 한다. 이때 키 입력이 끝났을 때 다시 입력값을 0으로 초기화 해주어야 정상적으로 작동한다.
Player.cs
public class Player : MonoBehaviour
{
private PlayerInputActions _playerInputAtions;
void Update()
{
if (_movementInput.magnitude > 0)
{
Vector2 direction = new Vector2(_movementInput.x, _movementInput.y);
direction.Normalize();
transform.Translate(direction * _speed * Time.deltaTime);
}
}
private void PlayerMove(InputAction.CallbackContext context)
{
_movementInput = context.ReadValue<Vector2>();
}
private void PlayerStop(InputAction.CallbackContext context)
{
_movementInput = Vector2.zero;
}
private void OnEnable()
{
_playerInputAtions = new PlayerInputActions();
_playerInputAtions.Player.Move.performed += PlayerMove;
_playerInputAtions.Enable();
}
}
그리고 슈팅게임이기 때문에 경계선 check를 해주어서 만약 viewport 밖으로 나간다면 반대쪽으로 돌아오도록 구현해주자.
void Update()
{
transform.position = BoundaryCheck(transform.position);
if (_movementInput.magnitude > 0)
{
Vector2 direction = new Vector2(_movementInput.x, _movementInput.y);
direction.Normalize();
transform.Translate(direction * _speed * Time.deltaTime);
}
}
public Vector2 BoundaryCheck(Vector2 position)
{
Vector2 newposition = position;
Vector2 viewPort = _mainCamera.WorldToViewportPoint(position);
if (viewPort.x < 0)
{
newposition.x = _mainCamera.ViewportToWorldPoint(new Vector2(1, 0)).x;
}
else if (viewPort.x > 1)
{
newposition.x = _mainCamera.ViewportToWorldPoint(new Vector2(0, 0)).x;
}
newposition.y = Mathf.Clamp(newposition.y, _mainCamera.ViewportToWorldPoint(new Vector2(0, 0)).y, _mainCamera.ViewportToWorldPoint(new Vector2(0, 1)).y);
return newposition;
}
'게임공부 > Unity' 카테고리의 다른 글
[C#][Unity][팬 게임]카드 짝 맞추기 게임 만들기1 (0) | 2025.02.03 |
---|---|
[C#][Unity][나만의 탑뷰 게임 만들기]9. 적 시스템구현1(FSM) (0) | 2025.01.30 |
[C#][Unity][나만의 탑뷰 게임 만들기]8. 인벤토리 시스템 수정 (1) | 2025.01.13 |
[C#][디자인 패턴]State 패턴 (0) | 2025.01.09 |
[Unity]최적화 관련 팁 (0) | 2025.01.08 |