2. Galaxy Card/3. 기타 개발

모바일 최적화#2(저장경로 수정(persistentDataPath), 터치 감도 수정, 타겟프레임 맞추기(targetFrameRate))

DOlpa_ 2025. 12. 9. 20:56
728x90

 

 

최적화 - 10 (설정 수정★)

안좋은 소식이 있다.. 최근에 핸드폰에다 다시 한번 빌드를 해본 결과....달라진게 없다...확실히 컴 유니티에서는 부드러워진게 체감이 되길래 진짜 끝난줄 알았는데 다시 원점이다 하지만 낙

sangeun00.tistory.com

 

예전에 갤볼 최적화할때 했었던 설정 수정들. 똑같이 전부 해주었고

이런저런 코드들도 손봐주었다

 

그리고 한가지 문제가 있다면 구매한 조커카드가 구매한 내용이 저장이 되질 않는다...

이게 갤볼때는 진짜 간단한 숫자 몇개만 PlayerPrefs로 저장을 해서 별 상관이 없었는데

JsonUtility를 처음 써보니 이런 문제가 생겼던것.

 

예상했던대로 컴퓨터 전용 저장경로와 모바일 저장경로는 달랐다. 

 

 private void Awake()
    {
        jokerStat = FindObjectOfType<JokerStat>();
        
        // 플랫폼에 따른 저장 경로 설정
        try
        {
            // persistentDataPath가 비어있는 경우를 대비한 예외 처리
            if (string.IsNullOrEmpty(Application.persistentDataPath))
            {
                Debug.LogWarning("Application.persistentDataPath가 비어있습니다. 임시 경로를 사용합니다.");
                savePath = "./Saves/JokerZone";
            }
            else
            {
                savePath = Path.Combine(Application.persistentDataPath, "Saves", "JokerZone");
            }
            
            // 저장 디렉토리 생성
            if (!Directory.Exists(savePath))
            {
                Directory.CreateDirectory(savePath);
                Debug.Log($"[ItemData] 저장 디렉토리를 생성했습니다: {savePath}");
            }
        }

 

 

Application.persistentDataPath

 

앞으로는 이 경로를 사용해주도록 하자. 전에 어떤 경로를 쓰긴 썻는데 기록이 남아있질 않아 모르지만

아무튼 그건 컴퓨터 환경에서만 멀쩡하게 작동하는 컴퓨터용 경로였다

 

위 경로는 컴퓨터를 비롯하여 안드로이드, ios 환경등에서도 안정적으로 작동한다고 한다

 

이렇게 경로 하나만 잘 설정해줬는데도 모바일 환경에서 잘 구현하는것을 확인할 수 있었다

 

----------------------------------

 

그 다음은 카드의 드래그와 선택 문제

 

 

OnMouse 와 OnPointer, Raycast에 대하여

게임에서 가장 많이 하는 클릭(터치)언더테일이나 할로우나이트같은 게임을 제외하면 게임에서 제일 많이 하는게 클릭이 아닐까 싶다그래서!!!! 클릭은 참 중요한데!!! 모바일 최적화 #1 (카드 터

sangeun00.tistory.com

 

지난 글에서 카드의 터치, 드래그가 원활하게 구현되지 않아 따로 정리까지 했었는데

그때에 비하면 많이 개선되었으나 여전히 불안정한 모습을 보인다

 

이번에도 할 수 있는건 모두 다 해보면서 방법을 찾아가는 방식을 택하겠다

 

1. Application.targetFrameRate = 60;

 

    private void Awake()
    {
        Application.targetFrameRate = 60;
        Debug.Log("프레임 60으로 맞춤!");
        DontDestroyOnLoad(gameObject); // 씬이 바뀌어도 파괴되지 않음
    }

 

첫번째는 타겟 프레임을 60으로 맞추기

 

유니티는 모바일 환경을 위해 강제로 프레임을 30으로 맞추는 경우가 많다고 한다

그래서 타겟프레임을 60으로 맞춰주는것이 터치감도에 영향을 줄 수 있고,

무작정 60으로 올린뒤 안되면 렉걸리게 하는 방식이 아니라 폰의 사양이 되는 선 안에서 맞춰주게 해주는거라

성능에도 큰 지장이 가지 않는다

 

 void HandleTouchInput()
    {
        Touch touch = Input.GetTouch(0);
        Vector3 touchPos = touch.position; // 스크린 좌표

        switch (touch.phase)
        {
            case TouchPhase.Began:
                // 터치 시작 시 바로 Raycast 검사
                if (IsObjectTouched(touchPos)) 
                {
                    OnTouchDown(touchPos);
                }
                break;

            case TouchPhase.Moved:
            case TouchPhase.Stationary: // 가만히 누르고 있을 때도 드래그 상태 체크
                if (isDragging || isDragStarted)
                {
                    OnTouchDrag(touchPos);
                }
                else if (IsObjectTouched(touchPos)) // 내 물체를 잡고 움직이는 중인지 체크
                {
                    CheckDragStart(touchPos);
                }
                break;

            case TouchPhase.Ended:
            case TouchPhase.Canceled:
                if (isDragging)
                {
                    OnTouchUp_DragEnd();
                }
                else if (IsObjectTouched(touchPos)) // 드래그가 아니었다면 클릭으로 판정
                {
                    OnTouchUp_Click();
                }
                
                // 상태 초기화
                isDragging = false;
                isDragStarted = false;
                break;
        }
    }

 

안드로이드(모바일) 전용 레이캐스트 검사도 해주었다

 

 

728x90
반응형