Golf Multiplayer Game 설계

반응형

아웃게임

구글 로그인 구현 과정 아래 더보기 참고

더보기

( https://www.youtube.com/watch?v=oSVVsQgzKRg&t=307s )


준비물 및 주의사항

1. 유니티 버전 6000.0.24f1 이거해야함 아니면 큰일남...

2. 이거 환경변수 설정 해야할 수도 있음 (키스토어 진행하다가 문제가 생긴다면 환경변수 설정이 안 되어 있어서 그랬던 것일 가능성이 높음  아래 값을 환경변수 path에 새로만들기 해서 추가하니까 커맨드창 닫았다가 키니 keytool 치니까 잘 되는것 까지 볼 수 있었음 C:\Program Files\Unity\Hub\Editor\6000.0.24f1\Editor\Data\PlaybackEngines\AndroidPlayer\OpenJDK\bin )

3. Asset > 

 

0:54 : 안드로이드 스위칭

1:15 projectSettings > Player 설정 하는 부분인데 영상보고 쭉 따라 하돼 MinimumAPILevel이랑 Target API는 아래와 같이 설정해야 오류 안 남

 

 

1:40 버튼 같은거 추가

2:27 : 파이어베이스 ㅍ에서 프로젝트 생성 

2:48 : Google Signin Unity 깃허브 페이지에서 파일 다운로드

3:18 : 위에서 다운로드 받은 파일 임포트 하는건 좋은데 아래와 같이 체크 해제 하고 임포트 해야 종속성 에러 안 남

 

4:02 유니티에서 프로젝트 packagename 값 가져와서 파베 에 넣기 (아래 화면은 유튜브 꺼임)

 

이거 파일 일단 다운로드 하기

 

4:34 쯤에 아래 Add Fingerprint 눌러서 키스토어 값 등록하는걸 보여줘야 하는데 보여주질 않음 아무튼

 

아무튼 아래 키스토어 라는걸 생성해야하고 sha1 이랑 sha256 값을 생성해서 위의 Add Finterprint눌러서 추가해야함

https://www.youtube.com/watch?v=QqRoz9PqZds

 

나 같은 경우 아래 처럼 추가했음

 

5:25 이부분은 위에서 이미 햇음 (키스토어 만드는 부분)

5:50  웹클라복사 후 5:59 GOOGLE SERVICES .JSON 파일다운로드.

6:14 Auth 파일 임포트 ㄱ

 

6:37 google-services.json 파일 위에서 다운받은거 같이 임포트 ㄱ

8:12 스크립트 추가 ㄱ 근데이거 아래 파일이긴함 유튜브 링크에 잇음

다운로드

 

8:47 그 아까 웹크랄 id 복사한거 이 스크립트 googleapi 부분에 넣으면 됨

 

9:23 뭐 이거 리졸브 해야한다는데 어차피 이거 하고 나서도 실제 안드로이드 빌드하고 핸드폰에 옮겨서 실해해보면 오류나는데 그 오류 해결하는 과정에서 여러번 하게 될 것임....습

 

 

10:25 과정 쭉 따라하고 마지막에 뭐 빌드하는장면 나오는데 나는 빌드 조차도 안 됐고 어찌어찌 하다 실제 핸드폰 usb연결하고 실행해봐도 오류가 엄청 났었음 아무튼 그래서 어쩌지 하고 있었는데 해당 유튜버가 에러관련 영상 하나 아래거 더 올림 근데 이거 따라해도 오류는 같음 ㅋㅋㅋㅋ 일단 다 따라한다음 

https://www.youtube.com/watch?v=7COZCxKGrYs

 

일단 빌드 자체가 안 되는 오류를 해결하려면 AndroidManifest 파일에 들어가서 아래 줄을

 

아래와 같이 고쳐서 해결했음 (중요한건 포스리졸브 하면 아래 고쳐놓은 게 다시 위 경로로 원복되니 포스리졸브 하게되면 아래 경로로 다시 맞춰주자)

 

그래서 빌드는 되어서 apk 파일이 생겨서 핸드폰에 usb연결해서 옮기고 실행까지는 성공했는데 로그인 버튼 누르니 아래와 같은 거지같은 오류가 나는것임

 

DllNotFoundException: Unable to load DLL 'native-googlesignin'. Tried the load the following dynamic libraries: Unable to load dynamic library 'native-googlesignin' because of 'Failed to open the requested dynamic library (0x06000000) dlerror() = dlopen failed: library "native-googlesignin" not found
Google.Impl.GoogleSignInImpl.GoogleSignIn_Create (System.IntPtr data) (at <00000000000000000000000000000000>:...........

 

어쩃든 이부분도  settingstemplate.gradle 파일의 코드를 아래와 같이 수정해서 해결했음 "이거 포스 리졸브 하면 경로가 초기화 됨..." 그래서 포스 리졸브를 가는 일이 생긴다면 경로 다시 맞춰서 저장해야 할듯

 

 

아무튼 아래와 같이 구글 로그인 성공한 모습.... 프로필 이미지 원래 검은색 맞고 내 이메일이 맞음

 

파베에서도 보면 이렇게 뭐 사용자 어쩌고가 생김

 

회원 정보 수정

더보기

 

 아래 패키지 임포트 했음 (근데 이거 하고 나서 안드로이드 빌드할 때 또 오류가 나늗네 위에서 겪었던 문제이고 AndroidManifest 이거 수정하고 settingstemplate.gradle  여기서 경로 수정했더니 또 해결됨;;; 

아무튼 그러고 나서 LoginWithGoogle.,cs 스크립트에 구글 계정 선택 이후 데이터 등록이라던지 그런 코드들을 넣었는데 앞으로 데이터 수정이라던지 그런것도 해야해서 관련 함수를 아래 미리 적어 놓으려 한다

 

✅ 전제: Firestore 문서 참조 가져오기

var db = FirebaseFirestore.DefaultInstance;
var userDoc = db.Collection("users").Document(user.UserId); // user.UserId = UID

✅ 1. 문서 전체 덮어쓰기 (SetAsync)

await userDoc.SetAsync(new Dictionary<string, object> {
    { "displayName", "홍길동" },
    { "coins", 0 },
    { "level", 1 }
});
  • 문서가 없으면 생성됨
  • 있으면 기존 값 다 지워지고 새 값으로 덮어씀

✅ 2. 일부 필드만 병합 저장 (SetAsync + Merge)

await userDoc.SetAsync(new Dictionary<string, object> {
    { "coins", 500 }
}, SetOptions.MergeAll);
  • coins만 수정됨
  • 문서가 없어도 생성됨
  • 기존 필드는 유지됨

✅ 3. 특정 필드만 수정 (UpdateAsync)

await userDoc.UpdateAsync("coins", 999);

또는 여러 필드 수정:

await userDoc.UpdateAsync(new Dictionary<string, object> {
    { "coins", 999 },
    { "level", 3 }
});
  • 문서가 없으면 ❌ 오류 발생
  • 일부 필드만 바뀜

✅ 4. 숫자 필드 증가/감소

await userDoc.UpdateAsync("coins", FieldValue.Increment(10)); // 코인 +10

✅ 5. 필드 하나 삭제

await userDoc.UpdateAsync("nickname", FieldValue.Delete());

✅ 6. 문서 자체 삭제

await userDoc.DeleteAsync();

🔁 참고: 비동기 함수 내에서 호출 예시

public async Task UpdateCoin(int amount)
{
    var db = FirebaseFirestore.DefaultInstance;
    var userDoc = db.Collection("users").Document(user.UserId);
    
    await userDoc.UpdateAsync("coins", FieldValue.Increment(amount));
}

 

 

 

아웃게임

캐릭터 설정 

게임시작 버튼 클릭 (공통)

방이 없다면 => Session 생성 (공통)

방이 있다면 => 참가 (공통)

로비 이동 (공통)

로비

4명이 채워질 떄 까지 대기 (공통)

스케이드보드 타워에서 대기자들 끼리 놀 수 있도록 구현 (공통)

4명 채워지면 인게임 씬 Open (공통)

 

인게임

 

 

 

 

 

반응형