간단한 비행기 슈팅게임을 만들어보자. 

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;
}

+ Recent posts