상세 컨텐츠

본문 제목

16. 유니티 모바일 이동(터치 컨트롤)

유니티

by MJ_119 2023. 6. 14. 03:41

본문

 

 

참고 유튜브 : https://www.youtube.com/watch?v=NqrJHj9xlqY

 

 

 

 

마우스 입력 대신 터치를 사용하는 방법.

 

touch를 사용해서 유니티 모바일 이동을 구현해보자.

 

PlayerBehaviour 스크립트에 코드를 다음과 같이 변경해준다.

 

1. 새로운 함수를 만들어준다.

    /// <summary>
    /// 어느 방향으로 플레이어를 횡으로 이동시킬까
    /// </summary>
    /// <param name ="pixelPos"> 플레이어가 터치 혹은 클릭한 위치 </param>
    /// <returns> x축에서 움직일 방향 </returns>
    private float CalculateMovement(Vector3 pixelPos)
    {
        // 0과 1 스케일로 변환한다.
        var worldPos = Camera.main.ScreenToViewportPoint(pixelPos);

        float xMove=0;

        // 스크린 오른쪽을 누른 경우
        if (worldPos.x < 0.5f)
        {
            xMove = -1;
        }
        // 스크린 왼쪽을 누른 경우
        else
        {
            xMove = 1;
        }
        
        // horizontalSpeed 값을 새로운 값으로 지정
        return xMove * leftRightSpeed;

    }

2. FixedUpdate() 함수를 변경한다.

private void FixedUpdate()
{
    // 좌우로 움직이는지 확인
    var horizontalSpeed = Input.GetAxis("Horizontal") * leftRightSpeed;

	// 실행을 유니티 에디터에서 하는지, 독립 빌드에서 하는지 확인한다.
    #if UNITY_STANDALONE || UNITY_WEBPLAYER || UNITY_EDITOR
        // 양옆으로 움직이는지 확인한다
        horizontalSpeed = Input.GetAxis("Horizontal") * leftRightSpeed;
        
        
    // 마우스를 누르고 있으면 or 모바일에서 스크린을 누르고 있으면
    if (Input.GetMouseButton(0))
    {
        horizontalSpeed = CalculateMovement(Input.mousePosition);
    }
       
       
    // 모바일 기기에서 실행되고 있는지 확인한다.
    #elif UNITY_IOS || UNITY_ANDROID
        // 입력이 0개 이상의 터치를 감지했는지 체크
        if (input.touchCount > 0)
        {
            // 첫번째 터치를 저장한다.
            Touch touch = input.touches[0];
            horizontalSpeed = CalculateMovement(touch.position);
        }
    #endif
    
    
    rb.AddForce(horizontalSpeed, 0, autospeed);
}

 

관련글 더보기