오늘 배운 것
1. 자투리 지식
2. 틱택토 게임 빌드
3. 버그 수정
1. 자투리 지식
Altlas
- 여러개의 텍스쳐를 하나의 큰 텍스쳐로 합쳐서 관리하는 기술
- 텍스쳐가 많아질수록, 드로우 콜 횟수가 증가하여 게임 성능에 부담을 줄 수 있음 > 해결
- Create - 2D - Sprite Atlas로 만들 수 있음
UI 이미지들을 아틀라스로 묶음, Compression을 None으로 ! (압축을 해버리면 이상해질 수 있음)
https://docs.unity3d.com/kr/2022.3/Manual/class-SpriteAtlas.html
Sprite Atlas 프로퍼티 레퍼런스 - Unity 매뉴얼
Unity에서 스프라이트 아틀라스를 생성하려면 Assets > Create > 2D > Sprite Atlas로 이동합니다.Unity는 파일 확장자가 ’.spriteatlas’인 스프라이트 아틀라스를 Assets 폴더에 생성합니다.
docs.unity3d.com
2. 빌드
빌드하고 테스트해 보기 위해서 일단 제일 간단한 방법을 사용
빌드 후 apk 파일을 USB로 옮기기 .
이를 실행하기 위해서는 다음과 같은 핸드폰 설정이 필요함.
핸드폰 - 설정 - 소프트웨어 정보 - 빌드 번호 - 7번 이상 연속해서 탭
이후 컴퓨터와 핸드폰을 연결, 뜨는 창에 항상 연결 허용.
APK 파일을 핸드폰으로 옮기고 실행.
다음은 바로 실행되게 하는 방법이다.
연결 후 다음과 같이 뜬다면 연결 후 Build And Run
만일 뜨지 않는다면 다음과 같은 과정을 거쳐야 함.
1. Android Studio 설치 - 톱니바퀴 - SDK Manager - 주소 복사 후 - 탐색기 - platform tools에 들어가서 주소 복사
2. 컴퓨터 설정 - 고급 시스템 정보 보기 - 환경 변수 - 시스템 변수 - path에 위의 주소 추가
3. cmd 창에서 abd devices로 연결 확인
4. 유니티 창에서 SDK 주소 확인.
위의 과정이 3시간 걸렸다 .ㅎㅎㅎㅎ 결국 유니티 재설치로 해결
3. 버그 수정
게임을 한 번 플레이하고 (싱글 or 듀얼 플레이) 다시 플레이하면 무조건 싱글 플레이 모드가 실행되는 버그가 있었다.
다른 분의 테스트 결과 GameManager 함수에 있는 구독 때문에 발생한 문제였다.
private void Awake()
{
if (_instance == null)
{
_instance = this as T;
DontDestroyOnLoad(gameObject);
}
else
{
Destroy(gameObject);
}
// 씬 전환시 호출되는 액션 메서드 할당
SceneManager.sceneLoaded += OnSceneLoaded;
}
GameManager의 베이스가 되는 Sigleton함수의 awake 부분이다.
디스트로이를 하긴 하지만 동시에 자신의 OnSceneLoaded 함수를 scenenLoaded에 구독시켜 두었다.
SceneManager.sceneLoaded += OnSceneLoaded;
위 코드 때문에 발생합니다. Destroy를 시키긴 하지만 같은 프레임에서 이미 구독을 했기 때문에 구독한 OnSceneLoaded (파괴되어야 할 GameManager에서 실행되는)
함수는 씬이 로드될 때 똑같이 실행됩니다.
그리고 우리는 첫 번째 (Don'Destroy로 설정한) 함수에 MainPanelController에서
GameManager.Instance.ChangeToGameScene(GameManager.GameType.DualPlayer);
로 함수를 호출합니다.
player는 Dual플레이어로 정상적으로 설정되나, 이후 파괴되어야 할 두 번째 게임 매니저 함수의
OnSceneLoaded함수가 호출됩니다.
이 때, 두 번째 게임 매니저의 Playertype은
public enum GameType { SinglePlayer, DualPlayer }
private GameType _gameType;
기본적으로 우리가 게임 매니저 함수에서 따로 설정해 주지 않았기에, enum형의 첫 번째 타입인 SinglePlayer가 됩니다.
때문에 싱글 플레이든 듀얼 플레이든 플레이를 두 번째 할 때 부터는 무조건 싱글플레이 타입으로 게임이 실행됩니다.
(듀얼플레이를 두 번 해도 똑같은 문제 발생) ,이와 같은 문제를 해결하기 위해서 저는
private void Awake()
{
if (_instance == null)
{
_instance = this as T;
DontDestroyOnLoad(gameObject);
}
else
{
// 메인으로 돌아왔을 때 2번째... ( 즉시 소멸되지는 않음)
//Destroy를 다시 ... 더 이상 참조하지 않겠다는 뜻
Destroy(gameObject);
return;
}
// 씬 전환시 호출되는 액션 메서드 할당
// 죽어야 하는 2번째 함수가 살아 있음. (참조가 생기면서 소멸이 안됨)
SceneManager.sceneLoaded += OnSceneLoaded;
}
싱글톤에 리턴을 추가해 주었고 정상 작동합니다.
그리고 위의 토막이 내가 정리한 부분이다. 정상 작동한다 !
Build and run 을 했는데 안드로이드 버전이 맞지 않다고 실행이 안된다...ㅎ슬퍼
'TIL' 카테고리의 다른 글
[멋쟁이사자처럼 부트캠프 TIL회고] 73일차 : 퀴즈 게임 (1) | 2025.02.12 |
---|---|
[멋쟁이사자처럼 부트캠프 TIL회고] 72일차 (0) | 2025.02.11 |
[멋쟁이사자처럼 부트캠프 TIL] 70일차 : 틱택토 자동로직 완성 (0) | 2025.02.07 |
[멋쟁이사자처럼 부트캠프 TIL회고 69일차] : 틱택토 게임 수정 (0) | 2025.02.06 |
[멋쟁이사자처럼 부트캠프TIL회고] 68일차 : 패널창 만들기 (0) | 2025.02.05 |