Unity/베어유 : 어몽어스 개발 노트

[25강] 게임 완성! 휴대폰으로 플레이하기

서니션 2023. 1. 28. 00:19
728x90
반응형

안드로이드 설치했는지 보고

Player Settings 들어가서

Default Icon에 Icon Image 넣어주기

 

build해서 apk파일을 

안드로이드 폰이나 nox앱플레이어에 넣어주면

(나는 nox 사용함)

 

바탕화면에 아이콘이 딱!!

 

게임 플레이를 해보는데

미션 중에 전선 미션을 하면 잘 안이어진다

해상도 문제인 경우가 많다

녹스 플레이어 환경설정을 1080 으로 바꿔주고

유니티에서도 설정해준다

 

UI를 눌렀는데도 캐릭터가 이동하는 문제를 해결하기 위해

PlayerCtrl.cs

클릭했는지 판단하는 if문에서

if (!EventSystem.current.IsPointerOverGameObject(Input.GetTouch(0).fingerId))

Input.GetTouch(0).fingerId를 추가해준다

마우스는 한 개라서 괜찮지만

터치는 여러개의 터치가 입력될 수 있어서

그 중 0번째의 터치만 가져온다는 뜻이다

하지만 이렇게 작성하면 빌드한 플랫폼 안 에서는 잘 작동이 되지만

유니티 에디터에서 실행되지 않는다

 

#if UNITY_EDITOR
                if (!EventSystem.current.IsPointerOverGameObject());
                {
                    Vector3 dir = (Input.mousePosition - new Vector3(Screen.width * 0.5f, Screen.height * 0.5f))
                        .normalized;
                    // 클릭한 값 - 스크린의 가운데 -> 어느 방향으로 터치를 했는지 알 수 있음
                    // .normalized로 정규화. 방향 벡터로 바뀌어서 방향을 알 수 있음. dir에 저장
                    transform.position += dir * speed * Time.deltaTime;
                    // transform에 계속해서 추가. 기기마다 속도가 다를 수 있기 때문에 Time.deltaTime(실제시간)을 곱해줌

                    anim.SetBool("isWalk", true);

                    // 왼쪽으로 이동
                    if (dir.x < 0)
                    {
                        transform.localScale = new Vector3(-1, 1, 1);
                    }
                    // 오른쪽으로 이동
                    else
                    {
                        transform.localScale = new Vector3(1, 1, 1);
                    }
                }
#else
if (!EventSystem.current.IsPointerOverGameObject(Input.GetTouch(0).fingerId))
                {
                    Vector3 dir = (Input.mousePosition - new Vector3(Screen.width * 0.5f, Screen.height * 0.5f))
                        .normalized;
                    // 클릭한 값 - 스크린의 가운데 -> 어느 방향으로 터치를 했는지 알 수 있음
                    // .normalized로 정규화. 방향 벡터로 바뀌어서 방향을 알 수 있음. dir에 저장
                    transform.position += dir * speed * Time.deltaTime;
                    // transform에 계속해서 추가. 기기마다 속도가 다를 수 있기 때문에 Time.deltaTime(실제시간)을 곱해줌

                    anim.SetBool("isWalk", true);

                    // 왼쪽으로 이동
                    if (dir.x < 0)
                    {
                        transform.localScale = new Vector3(-1, 1, 1);
                    }
                    // 오른쪽으로 이동
                    else
                    {
                        transform.localScale = new Vector3(1, 1, 1);
                    }
                }
                
#endif
                
            }
            // 클릭하지 않는다면
            else
            {
                anim.SetBool("isWalk", false);
            }
        }
    }

이렇게 맨 앞에

#if UNITY_EDITOR // 유니티 에디터에서만 작동

#else // 빌드에서 작동

#endif

를 작성해서 유니티에서 확인하면 잘 된다

 

이제 전선잇기 Mission6.cs를 수정해준다

드래그 if문 line.SetPosition을

line.SetPosition(1, new Vector3((Input.mousePosition.x - clickPos.x) * 1920f / Screen.width, 
    (Input.mousePosition.y - clickPos.y) * 1080f / Screen.height, -10));

1920 x 1080의 해상도를 Screen.width와 Screen.height로 나눠준다

float형으로 해아함. int로 하면 오류가 난다

 

빌드 후 녹스를 1600 x 900 해상도로 바꾼 뒤

플레이 해봐도 잘 되는 것을 확인할 수 있다

 


드디어 게임을 다 만들었다 !!!

실제 앱플레이어에서 작동시켜보니 뿌듯했다 !_!

728x90
반응형