카테고리 없음

Unity 본캠프 38일차 : 트러블 슈팅 및 Git 해시 정리

julesnow 2025. 5. 30. 07:38

 

목차

## ❶ 트러블슈팅
 ① manifest.json
 ② 깃헙 롤백 - 체리픽
## ❷ 새로 알게된 내용
 ① JsonUtility
## ❸ Git 정복하기
## ❹ 다음 시도 과제

 


❶ 트러블 슈팅

< 기존 코드 >

using System.IO;
using Newtonsoft.Json;
using UnityEngine;

// 저장/불러오기
public static class SaveManager
{
    private static string savePath = Application.persistentDataPath + "/save.json"; // 저장 경로

    // 저장 
    public static void Save(GameProgressData data)
    {
        string json = JsonConvert.SerializeObject(data, Formatting.Indented);
        File.WriteAllText(savePath, json);
    }

    // 불러오기 
    public static GameProgressData Load()
    {
        if (!File.Exists(savePath)) return null; // 파일 없으면 null 반환 (예외 방지)

        string json = File.ReadAllText(savePath);
        return JsonConvert.DeserializeObject<GameProgressData>(json);
    }
}

 

① manifest.json 관련 트러블슈팅 정리

 

문제

  • 외부 패키지 Newtonsoft.Json for Unity 설치 중 오류 발생
  • manifest.json에 "com.jillejr.newtonsoft.json-for-unity": "13.0.103" 추가했지만
  • 다음과 같이 정상적으로 설치되지 않았다는 문구가 뜨면서 오류 발생
Package [com.jillejr.newtonsoft.json-for-unity@13.0.103] cannot be found

  • 수동 설치 위해 .tar.gz 파일 다운로드 후 "file:Packages/경로" 방식 시도했으나
  • using Newtonsoft.Json; 를 실행하기 위한 적합한 방법은 아니었음
pgsql
복사편집
package.json not found

 

시도한 방법

  1. Unity Package Manager 수동 설치 경로 지정 (file: 방식)
  2. GitHub 릴리즈 페이지에서 다양한 .tgz, .tar.gz, .zip 다운로드 후 시도
  3. 경로 오류 및 package.json 누락으로 Unity에서 패키지 인식 실패

 

최종 해결

  • Unity 내장 JsonUtility를 활용한 방식으로 변경
  • 외부 패키지 필요 없이 Json 변환 기능 정상 구현

 

알게 된 점 

Newtonsoft.Json Unity에서 외부 패키지로 따로 설치해야 하는 JSON 변환 라이브러리
manifest.json Unity 프로젝트에서 사용하는 패키지 목록 및 버전 관리 파일
문제 원인 Unity에서 수동 패키지 설치 시 package.json 파일이 없는 압축 파일 사용
해결 포인트 Unity 기본 내장 기능인 JsonUtility는 외부 설치 없이 사용 가능
대체 이유 빠르고 안전하게 기본 기능으로 문제 해결하기 위해

 


DataManager.cs 정리

PlayerData 플레이어 체력, 인벤토리 저장용 Serializable
GameData 현재 레벨, 퍼즐 클리어 상태 + PlayerData 포함 Serializable
DataManager GameData를 담고 관리하는 실질적 저장소 MonoBehaviour + 싱글톤
 

JSON(직렬화(텍스트화)) 저장을
-> PlayerData와 GameData에 [Serializable] 붙이기

 


② 체리픽 이용해서 롤백하기

🍒 체리픽이란?

특정 브랜치에서 원하는 커밋(commit)만 골라 다른 브랜치에 적용하는 기능

 

 

 

문제

  • main 브랜치를 dev 브랜치에 병합함으로써,
    dev 브랜치의 기존 작업 내용이 초기화(덮어쓰기) 되는 문제가 발생

 

 

시도한 방법

  • git reset --hard 및 git reset --hard HEAD를 통해 과거 상태로 되돌리기 시도
    → 그러나 이미 덮어쓴 커밋 기준이라 복구 불가

 

 

최종 해결

  • 라이더 우측 하단 "변경 내역"에서 우클릭 > 체리픽 가능 혹은 🔽
  • git log --all을 통해 이전 커밋 해시 탐색
  • 복구가 필요한 커밋을 git cherry-pick <해시> 명령어로 선택하여
    → 현재 브랜치에 필요한 커밋만 선택적으로 복구

 

알게 된 점 

git log --oneline -all 모든 브랜치의 커밋 로그를 한 줄씩 요약해서 보여줌
→ 커밋 해시 + 메시지만 출력, 브랜치 구분도 확인 가능
git reset --hard 작업 중인 파일과 커밋 상태를 마지막 커밋 상태로 강제로 되돌림
→ 수정한 파일, 스테이징 된 파일 전부 사라짐 (주의!)
git push 로컬 커밋을 원격 저장소(GitHub 등)로 업로드
git add . 현재 폴더 이하 모든 변경 파일을 스테이징 영역에 추가
→ "이 파일들 커밋할 거야"라고 지정
git commit -m "Project Finish" 스테이징한 파일들을 하나의 커밋으로 기록
→ "Project Finish"라는 메시지로 저장
git checkout -b ev 현재 브랜치에서 새로운 브랜치 ev를 생성하고 이동
→ git branch ev + git checkout ev 동시 실행
:wq Vim(vi 에디터)에서 "저장하고 종료"
→ :w = write(저장), :q = quit(종료)
커밋 해시를 알면 대부분의 실수는 완전히 복구 가능하다.

❷ 새로 알게된 내용

 

JsonUtility

Unity가 제공하는 내장 JSON 직렬화 도구

 

기능

  • 객체 ↔ JSON 문자열 간 변환 가능
  • 간단한 Save/Load에 적합
  • Unity 프로젝트 내에서 별도 설치 없이 바로 사용 가능

 

사용법 예시

string json = JsonUtility.ToJson(myObject);        // 객체 → JSON 문자열
MyClass obj = JsonUtility.FromJson<MyClass>(json); // JSON 문자열 → 객체

 

주의사항

  • Dictionary는 지원하지 않음
  • 반드시 [System.Serializable] 속성이 클래스에 붙어 있어야 함
  • public 필드만 직렬화 대상

 

❸ Git 정복하기

 

 

Git 주요 명령어 

push 로컬 → 원격 서버
(GitHub 등)
내 로컬 브랜치의 커밋을 원격 저장소로 업로드 git push
origin main
병합 ❌
pull 원격 → 로컬 로컬 브랜치 원격 브랜치에서 가져온 커밋을
로컬 브랜치에 자동 병합
git pull
origin main
자동 병합 
merge 로컬 → 로컬 로컬 브랜치끼리 두 로컬 브랜치를 병합 (ex: feature → main) git merge feature 수동 병합
fetch 원격 → 로컬 원격 정보만 원격 브랜치의 최신 정보를 가져오지만
병합은 안 함
git fetch origin 병합 
commit 로컬 →
로컬
로컬 저장소 변경사항을 로컬에 저장 (버전 기록) git commit -m "설명" 병합 
 

1. git push

  • 내 로컬 브랜치의 커밋 → GitHub 등 원격 서버에 반영
  • "업로드"의 개념
  • 병합 없음, 그냥 반영

2. git pull

  • 원격 브랜치의 변경 사항을 로컬로 가져오고, 내 브랜치에 병합까지 자동 수행
  • fetch + merge 를 한 번에 수행

3. git merge

  • 다른 로컬 브랜치의 커밋을 현재 브랜치에 통합
  • 예: main에서 git merge feature → feature의 변경을 main에 병합

4. git fetch

  • 원격 저장소의 최신 커밋 정보만 가져옴 (병합 X)
  • 안전하게 비교하거나 변경 내용 확인하고 싶은 경우 사용
  • fetch 후 diff, merge로 분리 관리 가능

 

❹ 다음 시도 과제

 

  1. Shell 단축키 익히기
    • 자주 쓰는 명령어 위주로 연습
    • 히스토리 탐색, 자동완성 등 활용
  2. Unity 파일 정리하기
    • 개인 폴더에서 실사용하는 파일만 선별
    • 전체 프로젝트 폴더로 구조 이동 및 정리
  3. Git 이슈 Open/Close 사용해보기
    • 이슈 생성 및 마감 과정 실습
    • 커밋 메시지에서 Fixes #이슈번호 사용법 익히기