전체 페이지뷰

2017년 10월 18일 수요일

Unity Tutorial: 2D Roguelike, part 12


Adding Mobile Controls



이 게임의 마지막 순서로 모바일 게임을 위한 터치 콘트롤을 추가하는 부분입니다. 이것을 위해서 현재 standalone으로 되어 있는 build target을 iOS로 변경하려 합니다.

상단 메뉴에서 File>Build Settings를 선택합니다.

나타난 빌드 설정창에 햔재의 씬이 올라와 있는지 확인하고 없다면 Add Open Scenes를 눌러 추가합니다.


다음으로 Platform을 iOS로 변경하고 Switch Platform 버튼을 누릅니다.


이제 빌드세팅창을 닫고 Player 스크립트를 에디터로 열어봅시다.

손가락이 터치하는 위치를 저장하기 위한 변수를 하나 지정합니다.
private Vector2 touchOrigin = -Vector2.one; // 모바일 터치 위치 저장용
cs
이 변수는 손가락이 처음 터치한 곳을 저장하기 위한 곳으로 음수값으로 초기화하여 처음 위치를 화면 바깥에 두었습니다. 실제 터치가 이루어져야만 양수값이 되어 조작 가능하게 됩니다.

이제 Update()에서 입력값을 받을 때에 어떤 플랫폼에서 이루어지고 있는가를 판정하여 그에 맞는 입력값을 처리해야할 것입니다.


void Update ()
{
    if (!GameManager.instance.playersTurn)
        return;   // 플레이어 차례가 아니면 넘어감
 
    // 1또는 -1로 가로, 세로 방향 저장용
    int horizontal = 0;
    int vertical = 0;
 
#if UNITY_EDITOR || UNITY_STANDALONE || UNITY_WEBPLAYER
    // Input 매니저로부터 입력받아 저장        
     horizontal = (int)Input.GetAxisRaw("Horizontal");
     vertical = (int)Input.GetAxisRaw("Vertical");
 
    // 가로로 움직였다면 세로는 0
    if (horizontal != 0)
        vertical = 0;
#else
    if (Input.touchCount > 0//터치입력이 여러번 있었다면
    {
        Touch myTouch = Input.touches[0]; //첫 터치만 받아들임
 
        if (myTouch.phase == TouchPhase.Began) //터치 페이즈가 시작되었으면
        {
            touchOrigin = myTouch.position; // 터치 위치 저장
        }
        // 터치페이즈가 끝났고 화면내에서 이루어졌다면
        else if(myTouch.phase==TouchPhase.Ended && touchOrigin.x >= 0)
        {
            Vector2 touchEnd = myTouch.position; // 터치 끝난 위치 저장
                
            // 터치의 처음과 끝 차이 계산
            float x = touchEnd.x - touchOrigin.x;
            float y = touchEnd.y - touchOrigin.y;
 
            touchOrigin.x = -1// 다시 음수로 설정
 
            // 유저의 터치는 완벽한 직선이 아니므로 어느쪽 움직임이
            // 더 컸나를 판정하여 해당방향으로 움직임
            if (Mathf.Abs(x) > Mathf.Abs(y)) // x가 y보다 더 컸다면
                horizontal = x > 0 ? 1 : -1// x방향으로 1또는 -1 움직임
            else
                vertical = y > 0 ? 1 : -1//아니면 y축으로 움직임
        }
    }
#endif
 
    // 어느 쪽으로든 움직이라는 명령이 있었다면
    if (horizontal != 0 || vertical != 0)
        //플레이어는 벽과도 상호작용할 수 있으므로 제너릭에 Wall을 넘겨줌
        AttemptMove<Wall>(horizontal, vertical);
}
cs

코드를 저장하고 빌드 후 모바일 기기로 옮겨서 실행해 봅시다.

이것으로 2D Roguelike의 튜토리얼을 마칩니다.

댓글 없음:

댓글 쓰기