private void ScrollMoveToTargetObject(Vector2 _targetPosition) { scrollRect.verticalNormalizedPosition = (_targetPosition.y - scrollRect.GetComponent().rect.height*0.5f) /(scrollRect.content.rect.height - scrollRect.GetComponent().rect.height); } 위 코드는 ScrollRect/Content내의 타겟 Object로 이동하는 코드이다. 새로 스크롤이고, 해당 타겟이 가운데로 오게끔한다. 공식은 다음과 같다. verticalNormalizedPosition = (타겟의 위치 - ScrollRect 크기*0.5)/(Co..
2023.02.24 - [게임을 만들자/Unity] - 1. UniRx 시작, Subject와 ReactiveProperty 2023.03.22 - [게임을 만들자/Unity] - 2. UniRx, Observable 메소드 2023.08.14 - [게임을 만들자/Unity] - 3. UniRx, 메시지 제어(Select, Where..) Merge 같은 타입의 메시지 스트림을 병합한다. 병합되는 메시지 스트림 중 하나라도 메시지를 보내는 경우, 구독 함수가 실행된다. ReactiveProperty a = new (); ReactiveProperty b = new (); ReactiveProperty c = new (); ReactiveProperty d = new (); a.Merge(b, c, d) ..
2023.02.24 - [게임을 만들자/Unity] - 1. UniRx 시작, Subject와 ReactiveProperty 2023.03.22 - [게임을 만들자/Unity] - 2. UniRx, Observable 메소드 2023.08.25 - [게임을 만들자/Unity] - 4. UniRx, 메시지 병합(Merge, CombineLastest, Concat) UniRx에서는, 스트림으로 전달된 메시지를 변형하거나, 필터링 하는 등의 함수를 제공한다. 이 함수들은 C#의 Linq함수와 사용법이 비슷하다. 예를 들어 Select는 메시지를 변경하고, Where는 메시지는 필터링하는데, Linq함수의 Select/Where와 매우 흡사하다. Select 메시지를 변경한다. heroModel.DiffHp ..
AndroidManifest.xml 수정 https://developer.android.com/guide/topics/ui/picture-in-picture?hl=ko onPause 호출됨 //UnityPlayer가 onPause시 내부에서 pause된다. 이것을 다시 resume으로 바꿔 활성화 시켜줘야한다. mUnityPlayer.resume(); } } //pip전환 함수 private void enterPipMode() { if (!IsSupportedPIP()) { return; } if (!IsAvailablePIP()) { return; } if (mUnityPlayer == null) { return; } int width = mUnityPlayer.getWidth(); int height..
2023.02.24 - [게임을 만들자/Unity] - 1. UniRx 시작, Subject와 ReactiveProperty 2023.08.14 - [게임을 만들자/Unity] - 3. UniRx, 메시지 제어(Select, Where..) 2023.08.25 - [게임을 만들자/Unity] - 4. UniRx, 메시지 병합(Merge, CombineLastest, Concat) Observable메소드 IObservable객체, 즉 구독 가능한 객체를 만든다. Subject나 ReactivePropery 외에, 프레임워크에서 제공하는 기능들을 구독해야 하는 경우들이 있다. 예를들어 GameObject의 Update, 코루틴 등, 다양한 상황을 구독하고 싶을 때가 있다. Observable클래스에서 이러..
2023.03.22 - [게임을 만들자/Unity] - 2. UniRx, Observable 메소드 2023.08.14 - [게임을 만들자/Unity] - 3. UniRx, 메시지 제어(Select, Where..) 2023.08.25 - [게임을 만들자/Unity] - 4. UniRx, 메시지 병합(Merge, CombineLastest, Concat) UniRx를 이용해 Unity에서 Rx기반의 개발이 가능하다. c#에 Official Rx가 있지만, Unity에서 IL2CPP 호환문제로 제대로 동작하고 있지 않다. UniRx에는 다양한 비동기 함수와 Unity Ui 개발에 편리한 기능들이 있어, 조금 익숙해지면 매우 편리하다는 것을 느낄 것이다. 또한 Linq문법과 비슷해, 코드가 깔끔해보이는 것도..
1. 구글 개발자 콘솔에서 인증서 발급하고 다운받기(json 키) 위 이미지 대로, [구글 플레이 콘솔 api액세스 -> 새서비스계정만들기 -> 서비스계정 생성 -> 계정 key다운로드(json파일) -> 재무데이터 권한 주기] 를 완료하면 준비는 끝.!! 키 json 파일을 다운받아 열어보면, 위와같은 텍스트 들이 있다. 2. Firebase Functions 설정 Firebase 계정을 만들고, 내 컴퓨터에도 firefunction기능을 쓸 수 있도록 세팅. 세팅은 구글페이지 가이드를 참고 바람. https://firebase.google.com/docs/functions/get-started?hl=ko 시작하기: 첫 번째 함수 작성, 테스트 및 배포 | Firebase Documentation Ch..
게임 서비스를 운영하다보면, 핸드폰 기기 시간을 수정해, 이익을 보려는 유저들이 많다. 보통 일정 시간 주기로 보상을 주는 기능이 들어간 경우, 그 시간값을 서버가 아닌 클라이언트에서 한다면, 유저는 기기시간 조절하는 것만으로도 보상을 빠르게 받을 수 있다. 서버에서 시간을 확인해 막으면 좋지만, 그렇게하기 여의치 않을 경우, Resume 시 보상을 받기 위한 버튼을 눌렀을 때 구글 표준시간과 비교해 처리하면 좋다. //구글 시간 가져오기 public async Task GetCurrentTime() { using (var client = new HttpClient()) { try { var result = await client.GetAsync("https://google.com", HttpComple..
현재 FireBase Firestore를 이용해 유저의 데이터를 저장하고 있다. 그런데 [앱 삭제 후 재설치], [앱 업데이트 시] 일부 유저에게서 데이터가 롤백되는 현상이 발견되었다. 다행히 내 폰에서도 발생해, 여러가지 테스트가 가능했다. [앱 삭제 후 재설치 시, 나타나는 문제 현상] - 대략 2~3일정도로 데이터가 롤백됨. - Firestore 서버에서 데이터를 완전히 다 삭제해도, 접속 시 복구 됨. - 그냥 앱 종료 후, 접속 시에는 문제 없음. - 본인은 플레이스토어에서 설치 시에만 발생했지만, 일부 유저는 apk를 직접 다운받아 설치하는 경우에도 발생함. - 앱 내 소스코드 어디에서도, 클라이언트 단말에 저장하는 기능은 없음. 위 현상에서 유추 했을 때, 1. 유저의 데이터가 어딘가에 자동..
현재 Mac 버전 : 카탈리나 Unity 버전 : 2021.1.12f 현재 위 버전에서, 구글 Firebase sdk를 import하고, 유니티 에디터를 실행 할 때, 위와 같은 에러가 뜰 때가 있다. 아마 맥 버전이 카탈리나라서 발생하는 건지, 그냥 맥 보안문제 인지 모르겠지만, 아래와 같이 권한을 주면 된다. 맥 [시스템 환경 설정 -> 보안 및 개인정보 보호]에 들어가면 위 사진과 같이, 확인된 응용프로그램이 아니라서 차단됐다는 표시가 있다. [확인 없이 허용]을 누르고 재실행 하면 될 것이다.