ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Unity New Input System으로 캐릭터 이동 구현하기
    개발/지름 2021. 11. 30. 02:11
    반응형

    예전에 유니티를 사용할 때와는 다르게 Input System이란 것이 생겼다.

    Enable Preiview Packages를 활성화 해야지 동작한다.

    Input과는 사용법이 조금 달라졌다.

    이전에는 Input.GetKeyDown()으로 사용을 했지만, 이번 부터는 메시지 기반으로 동작한다. Event handler기반으로 동작시킬 수도 있다.

     

    캐릭터 이동을 구현하려면

    1. Player Input을 GameObject에 추가한다.

    2. Actions에 Input Action을 추가한다. 추가하면 기본적으로 액션들이 추가되어 있다.

    3. DefaultMap을 Player로 선택하면 Action Map의 Player Scheme을 사용할 수 있다.

    4. 기본적으로 Vector2로 나오므로, 3차원 이동을 위해서는 이동 축을 변경 해 주어야 한다.

    카메라 이동은 x축의 경우 캐릭터를 회전 시키고, y축의 경우에는 카메라를 이동 시켜 주어야 한다.

    (일부 코드는 유니티 튜토리얼의 코드를 이용해서 만들었다.)

    private void Move()
    {
      var move = new Vector3(m_Move.x, 0, m_Move.y) * moveSpeed * Time.deltaTime;
      move = transform.TransformDirection(move);
      rigidBody.MovePosition(transform.position + move);
    }
     
    private void Turn()
    {
      float turnPlayer = m_Look.x * mouseSensitivity;
      m_HorizontalAngle = m_HorizontalAngle + turnPlayer;
    
      if (m_HorizontalAngle > 360) m_HorizontalAngle -= 360.0f;
      if (m_HorizontalAngle < 0) m_HorizontalAngle += 360.0f;
    
      Vector3 currentAngles = transform.localEulerAngles;
      currentAngles.y = m_HorizontalAngle;
      transform.localEulerAngles = currentAngles;
    }
    
    private void LookUp()
    {
      var turnCam = -m_Look.y * mouseSensitivity;
      m_VerticalAngle = Mathf.Clamp(turnCam + m_VerticalAngle, -89.0f, 89.0f);
      Vector3 currentAngles = camera.transform.localEulerAngles;
      currentAngles.x = m_VerticalAngle;
      camera.transform.localEulerAngles = currentAngles;
    }

     

    GetKeyDown의 경우에 Update에서 polling하는 구조로 만드는 것 보다는 효율이 좋을 것 같다. (어딘가에는 if분기가 있긴 하겠지만)

    반응형

    댓글

Designed by Tistory.