블로그 이미지
Every unexpected event is a path to learning for you. blueasa

카테고리

분류 전체보기 (2795)
Unity3D (852)
Programming (478)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (185)
협업 (61)
3DS Max (3)
Game (12)
Utility (68)
Etc (98)
Link (32)
Portfolio (19)
Subject (90)
iOS,OSX (55)
Android (14)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (3)
Memories (20)
Interest (38)
Thinking (38)
한글 (30)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (18)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total
Today
Yesterday

[파일]

File&Folder Rename.zip




[링크]

http://limiter.co.kr/426

반응형
Posted by blueasa
, |




소스트리 최신 버전(1.10.x)을 받고 위와 같은 에러가 나서 확인하다 답을 찾고 올려 놓음.



[해결방법]

1. C:\Users\myName\AppData\Local\Atlassian\SourceTree\git_local\mingw32\bin 위치의 dll파일들을 모두 Copy 한다.

2. C:\Users\myName\AppData\Local\Atlassian\SourceTree\git_local\mingw32\libexec\git-core 위치에 1.에서 Copy 한 File들을 Paste 한다.

3. 끝..


해당 위치에서 dll 파일을 참조 못해서 생기는 에러 같다.

다른 dll missing 문제도 같은 문제 인 듯..

(설명엔 37개라고 돼있는데 내가 할 땐 43개였음.)



[참조]

I've been struggling with similar issue where a fresh install of SourceTree on a different PC failed to clone with an error saying it couldn't find a DLL (specifaclly LIBEAY32.dll). It is all installed and working correctly on another PC. Eventually I found that 37 DLL's are in: C:\Users\myName\AppData\Local\Atlassian\SourceTree\git_local\mingw32\bin

But they should also be found at:

C:\Users\myName\AppData\Local\Atlassian\SourceTree\git_local\mingw32\libexec\git-core

After a Copy 'n' paste of all 37 DLL's into the git-core folder and it is now working. Hope this helps someone.



[출처]

https://answers.atlassian.com/questions/32972886/git-remote-https.exe-libcurl-4.dll-the-procedure-entry-point-sslctxsetalpnprotos-could-not-be-located-in-the-dll

반응형
Posted by blueasa
, |

다루는 내용

- Sprite Slice

- Anchor

- UI Tweener

- TypeWriter Effect


말풍선은 게임의 많은 곳에서 사용된다. 튜토리얼을 진해할 때, NPC와 대화 할 때 등.. 이러한 말 풍선을 NGUI를 사용하면 쉽게 만들 수 있다. 아래와 같이 말풍선이 커지는 트위닝과 글씨가 자동으로 써지는 타이핑 효과 그리고 말풍선 배경이 문구의 크기와 위치에 맞게 변하도록 하는 앵커의 개념을 이해한다.

준비물

NGUI, 캐릭터 이미지, 말풍선 이미지, 폰트 (NGUI는 상용 플러그인이므로 예제를 첨부할 수 없음.) 















NGUI 아틀라스 만들기

먼저 위의 그림들을 NGUI를 활용하여 아틀라스를 만든다. 메뉴의 NGUI - Open - Atlas Manker 를 차례로 클릭하여 아틀라스 메이커를 실행한다. 그리고 사용할 이미지들을 선택 하면 아래 그림처럼 Add가되고 선택 완료 후 끝으로 Create 버튼을 클릭하면 아틀라스를 저장할 곳을 묻는다. 적당한 곳에 저장하면 끝난다.


나인패치(9Patch)

추가한 말풍선 스프라이트는 작은 크기인데 어떻게 글자 수에 맞워서 늘어날 수 있을까? 그리고 늘어난 이미지는 왜 꺠져보이지 않을까? 말풍선을 9개 조각으로 나누어 활용하였기 때문이다. 나인패치 개념은 스프라이트 하나를 9족가으로 나무어 각 모서리 4부분은 고정으로 사용하고 나머지 5부분은 늘어나는 데 사용된다. 말풍선 뿐아니라 게임에서 사용하는 버튼도 9패치를 사용할 수있다. 여러 상황마다 버튼의 크기가 달라질 수 있는데 그때마다 새로운 버튼을 만들어 추가하는 것은 비효율적이다. 나인 패치를 이용하면 하나의 버튼 스프라이트로 다양한 크기의 버튼을 만들어낼 수있다. 

스프라이트를 9조각으로 나누는 방법은 간단하다. 생성한 스프라이트를 선택하고 Edit 버튼을 누른다. 그럼 UI Atlas 인스펙터가 보인다. 중간에 Border 값 들을 조절하면 점선으로 나눌 부분을 지정할 수 있게된다. 9개로 나눌 부분을 지정이 끝났다면 다시 스프라이트로 돌아와 스프라이트의 Type를 Sliced로 변경한다. 그리고 아래의 Size 에서 크기를 조절하면 9개의 영역을 나눈데로 크기가 변하는 것을 확인할 수 있다.


앵커(Anchor)

텍스트가 말풍선 스프라이트 밖으로 삐져나가면 안된다. 말풍선은 말풍선안의 텍스트 포함해야한다. 이것을 해결하기 위해 2가지 방법이 있다. 먼저 말풍선의 크기를 고정하고 메세지 라벨의 크기도 그 안에서만 보이도록 하는 것이다. 하지만 고정된 말풍선 영역 안에서 텍스트의 양이 많다면 자연적으로 텍스트가 작아지는 단점이있다. 이 방법을 사용하려면 라벨의 Overflow를 shrink로 설정하고 Size를 말풍선에 맞게 수정해야 한다. shrink로 설정하였기 때문에 텍스트는 설정 영역 밖으로 나가지 않는다. 또 한가지 방법은 텍스트는 글자 수에 따라 자유롭게 늘어날 수있고 이것에 대응하여 말풍선 배경의 사이즈가 조절되는 방식이다. 첫 번째 방법은 텍스트가 많을 경우 글씨 크기가 작아지는 단점이있다. 그래서 보통 두 번째 방법을 사용한다. 크기가 자유로은 텍스트의 크기를 말풍선이 따라가기 위해서 필요한 것이 앵커이다. 말풍선은 이미 9패치로 자유롭게 크기 조절이 가능한 상태이다. 그러므로 말풍선 스프라이터의 앵커를 텍스트에 맞추면 된다. 라벨의 Overflow는 Resize freely로 설정한다. 

앵커를 설정하는 것은 어렵지 않다. 위 그림처럼 말풍선 스프라이트의 인스펙터에서 간단히 설정한다. 타입은 None, Unified, Advenced 가 있다. None는 앵커를 사용하지 않는 것이다. Unfied는 단일 타겟을 4방향에서 지정한 수치만큼 앵커를 잡는 것이다. 마지막으로 Advenced는 4방향을 각각 원하는 타겟을 잡고 수치를 지정하는 방식이다. 타겟을 서로 다르게 지정할 수도있고 지정하지 않을 수도있다. Excute 는 앵커가 동작하는 시점을 말한다. OnEnable 은 해당 오브젝트가 꺼진상태에서 활성화 될 때 호출, OnUpdate는 매 프래임마다, OnStart는 씬이 시작할 때 한 번 호출된다. 이번 예제에서는 텍스트의 크기가 시간이 따라 변화하면서 그에 맞추어 말 풍선 스프라이트의 앵커도 따라가야하기 때문에 OnUpdate로 설정하였다.


Tween Scale

NGUI의 라벨이나 스프라이트를 애니메이션할 수있게 돕는 컴포넌트이다. 크기에대한 애니메이션을 Tween Scale로 처리하고 그 밖에 Tween Position으로 위치 애니메이션, Tween Alpha로 투명도 애니메이션을 할 수 있다. 이번 예제에서 사용하는 Tween Scale은 말풍선이 캐릭터 위에서 커지는 애니메이션을 한다.

스케일 애니메이션을 할 말풍선 스프라이트에 Tween Sacle 컴포넌트를 추가한다. From 에서 시작할 크기를 지정하고 To에 끝나는 크기를 지정한다. 시작 크기를 0.5 끝 크기를 1로 설정하였다. 이렇게히면 0.5에서 1까지 말풍선의 크기가 변하게 된다. Plya Style 은 애니메이션을 반복할지 여부를 설정하는 옵션이다. 기본적으로 Once로 설정이 되어있어서 애니메이션은 한 번만 실행된다. Loop는 애니메이션을 계속 반복하는 것이고 PingPong은 From -> To ->From ->To 반복적으로 From 에서 To 그리고 To 에서 From 으로 왕복한다. Animation Curve에서는 애니메이션 이징 그래프가 등장한다. 시간에 따른 변화량을 그래프로 표현한 것이다. 클릭해면 편집창이 뜨고 초록색 선위에 오른쪽버튼을 클릭하여 Add key를 선택한다. 그리고 선을 자유자제로 조절할 수있다. Duration은 실행 시간이다. 기본적으로 1초가 세팅되어있다. Start delay는 지연시간을 의미한다. Start delay 시간 만큼 지난 후 애니메이션을 실행 시킬 수 있다. Ignore TimeScale 옵션을 체크하면 타임스케일의 영향을 받지 않고 애니메이션을 한다. 예를 들어, 게임 중 볼륨이나 진동 옵션을 변경하기 위해 설정 대화상자를 띄었을 때 게임은 일시 정지되고 설정 대화상자 안의 스프라이트나 라벨들은 시간에 따른 스케일이나 위치등의 애니메이션을 하기위해서는 해당 옵션이 체크되어있어야 한다. 마지막으로 On Finished 는 애니메이션이 종료된 후 호출할 메서드를 선택할 수 있다. 매서드가 포함된 스크립트가 붙은 오브젝트를 드래그하여 넣고 매서드를 선택하면 된다.


원하는 상황에서 Tween 실행

위 그림에서 컴포넌트의 체크가 꺼져있다. 그러므로 실행되지 않는다. 게임중에 켜는 시점을 코드로 제어하여 컴포넌트를 켤 수 있다. 그러면 원하는 상황에 애니메이션이 가능하다. 그런데 애니메이션이 끝나고 다시 켠다고해서 애니메이션이 동작하지는 않는다. 이유는 컴포넌트가 켜지는 순간 인스펙터의 옵션들의 정보를 바탕으로 애니메이션이 시작되는데 애니메이션이 끝나고 나중에 다시 켜더라도 옵션들은 이전의 정보이기 때문이다.


해결책

컴포넌트를 켜고 끄는 방식으로 애니메이션을 제어하지 말고 ResetToBeginning 과 PlayForward를 사용하여 제어한다. 위처럼 인스펙터에서 옵션들을 설정한 뒤 컴포넌트를 끈 상태로 놔두고 게임을 실행한다. 코드에서는 해당 애니메이션을 할 상황이 됐을 때, PlayForward 를 호출 해 애니메이션을 실행한다.

1
2
tweenScale.ResetToBeginning();
tweenScale.PlayForward();

다시 사작하고 싶다면 ResetToBeginning 으로 초기화 후 PlayForward로 실행할 수 있다. 오래된 NGUI 버전에서는 Play로 실행했지만 현재는 PlayForward 와 PlayReverse 로 분리되었다. 반대로도 애니메이션을 실행할 수 있는 것이다. PlayReverse 를 사용해 애니메이션을 반대로 실행했다면 이 상황에서 PlayForward를 하고싶을 떄에는 굳이 ResetToBeginning 를 할 필요 없이 바로 PlayForward해도 동작한다.


타이핑 효과

Typewriter Effect 컴포넌트를 추가하여 텍스트에 타이핑 효과를 적용할 수 있다. charsPerSecond 옵션은 초당 표시할 글자 수이다. 수치가 높을 수록 빠른 타이핑 효과가 나타난다. fadeInTime 옵션은 글자가 알파가 적용되어 나타나는 시간이다. 딱딱한 타이핑효과가 아니라 부르럽게 텍스트가 나타난다. delayOnPeriod 옵션은 . ! ? 로 문장이 끝났을 때 지연되는 시간이다. 설정된 시간이 지난 후 다은 타이핑 효과가 계속 된다. delayOnNewLine 옵션은 텍스트가 다음 행으로 넘어갈 때 지연되는 시간이다. 그리고 타이핑 효과에도 scrollView 옵셥으로 NGUI 스크롤을 적용할 수 있다. 


타이핑 효과의 역설

텍스트에 타이핑 효과를 적용하는 이유는 한 글자씩 보이게 하기 위해서인데, 그러기 위해선 텍스트를 할당해야 한다. 하지만 할당하는 순간 UI에 텍스트는 이미 모두 보여지는 상태이다. 잠깐이지만 텍스트들이 모두 보이고 없어진다 그리고 타이핑 효과가 진행된다. 이것 때문에 말풍선 전체가 잠깐 깜빡이는 것처럼 보인다. 이것을 해결하기 위해 순서를 바꿔서 실행한다. 기존에는 스케일 커지기 -> 텍스트 할당 -> 타이핑 효과의 순서로 진행 했다. 이것을 텍스트 할당 -> 타이핑 효과 -> 스케일 애니메이션의 순서로 변경하였다. 물론 이것은 편법이다. 



출처: http://teddy.tistory.com/entry/NGUI-쉽게-말풍선-만들기 [Teddy Games]

반응형
Posted by blueasa
, |

This is an easy task with fontforge.


First, you want to open the font with the missing glyphs and select Element -> Merge Fonts. In this example, the glyphs for E and F are the ones missing. Element->Merge Fonts

Select the font from which you want to pull glyphs. You will be asked whether you want to keep the existing kerning; you most likely want to select No here, but if you get strange results close fontforge and try again with Yes.Kerning dialog

The missing glyphs should be added in a few moments:Result in main fontforge window

Finally, do File -> Generate Fonts and export your font to a desired location.



[출처] http://superuser.com/questions/490922/merging-two-fonts

반응형
Posted by blueasa
, |

한글을 사용하는 프로그래머를 위한 폰트 라는 글을 포스팅 한적 있습니다.
여기서 Bitstream Vera Sans Mono 폰트와 맑은 고딕 폰트를 합친 폰트를 제작 해서 배포 했습니다.
하지만 저작권 문제를 배포를 중단하고 있습니다.
그래서 이번에는 제작하는 방법을 포스팅해 볼려고 합니다.


준비물

  • FontCreator
    • 최신 버전은 6.0인데, 이걸 받으면 저장이 되지 않습니다 ^^;;; 그래서 예전 버전을 올려 드리겠습니다.
    • 쉐어웨어 이지만 30일 사용할 수 있으니.. 폰트만 제작하고 지우시면 됩니다.

[설치파일]

FontCreator_5.5_Setup.zip
6.54MB

 

 





FontCreator 설치
별거 없습니다. ^^;; 그냥 Next만 누르면 설치가 됩니다.
그리고 프로그램을 띄우면 인증하라고 나옵니다.

 

Use Evaluation Versiond을 클릭하시면 됩니다. 
그런데 이게 띄울때 마다 버튼의 위치가 바뀝니다 ^^;; 
잘 찾아서 눌러주세요.







폰트 편집하기
File > Open > Font File로 Bitstream Vera Sans Mono 폰트(이하 영문폰트)를 엽니다.
영문 폰트외에 사용하지 않을 폰트를 제거 합니다.
첫폰트를 선택하고 끝에서 Shift를 누르고 클릭하면 선택이 됩니다. Del키를 눌러서 삭제 합니다.

저같은 경우에는 물결글자(~) 이후 폰트를 제거 하고 나머지는 맑은고딕 폰트(한글폰트)를 사용하였습니다.

File > Open > Font File로 맑은고딕 폰트를 엽니다.

이 파일도 마찬가지로 물결글자(~)이후의 문자를 모두 선택합니다.
(팁으로 처음부터 물결까지 선택을 하신뒤 Ctrl+T를 누르면 전체가 선택이 됩니다.)
Edit > Copy를 선택해서 복사를 합니다.(단축키 : Ctrl + C)
(사양에 따라서 시간이 많이 걸릴 수도 있습니다. 반응이 없더라고 참고 기다리세요 ^^;)
그리고 밑에 있는 12649 glyphs selected를 잘 기억합니다.
복사된 폰트의 갯수 입니다.

그리고 다시 Ctrl+Tab키를 눌러서 열어 두었던 영문 폰트 창으로 이동 합니다.


그리고 메뉴에서 Insert > Glyphs를 선택합니다.
좀 전에 기억해 두었던 숫자를 Insert Glyph(s)에 입력합니다.
그리고 체크 박스는 After last glyph로 선택하고 OK를 누릅니다.
(다음을 진행하기 전에 꼭 빈공간이 선택되어 있어야 합니다. 위 다이얼로그에서 진행하고 나면 자동으로 빈공간이 선택되어 있어서 그냥 진행합니다.)
그리고 메뉴에서 Edit > Paste Special을 선택합니다.

 

다음과 같은 다이얼로그가 나오면 Items는 전체를 다 선택해 주시고 Add mappings를 선택하고 OK를 누릅니다.
그러면 이번에는 정말 소식없이 기다립니다 -_-;;
사양에 따라서 다르지만, 저 같은 경우에는 1분 정도 기다리는거 같습니다.
폰트의 갯수가 많아 질 수록 더 기다리고요 ^^;
죽은거 아니니까 참고 기다리세요.

기다리고 나면 기본 폰트가 완성 된겁니다.

그리고 약간의 손을 봐 줘야 합니다.

메뉴에서 Font > Settings를 선택합니다.

메뉴에서 Format > Settings를 선택합니다.

 

Unicode Character Ranges에서 Calculate를 누르시고 Code Page Character Ranges에서는 Edit를 누르시면 됩니다.


위와 같은 화면에서 Korean Wansung(949)를 추가해 주시면 됩니다.
Code Page Character Ranges에서는 Calculate를 누르지 마세요. 언어 선택할 때 귀찮아 지고, 코드가 많이 추가 되는데, 폰트를 사용할 때 원하는 대로 안 되는 경우가 있습니다.

여기 까지 하시면 폰트를 합치는 작업은 완료가 됩니다.

메뉴에서 File > Save As하셔서 저장하고 사용하시면 됩니다 ^^*

 
[인증 스샷~ ^ ^*]


추가사항

  1. 맑은 고딕만 합치게 되면 일본어나 한자 폰트가 나오지 않습니다. 일본어나 한자 폰트가 필요하신 분은 Arial Unicode MS폰트의 일본어와 한자 폰트를 위와 같은 방법으로 합치시면 됩니다. 굴림이나 돋음 폰트에서도 합칠 수 있는데, 거기는 한자가 좀 모자르더군요.
  2. 한글폰트를 기본으로 영문폰트를 합칠 수도 있습니다. 하지만, 이렇게 할 경우에는 폰트의 폭이나 설정이 있어서.. 영문에다가 한글을 합치는게 조금 쉽습니다.
  3. 폰트를 완성했는데... 이름을 바꾸고 싶으신 분도 계시죠? 그런 분들은 메뉴에서 Format > naming에 가셔서 이름을 바꿔서 사용하시면 됩니다.




다른 프로그램

  • fontforge라는 프로그램도 있습니다. 무료에 공개 입니다. 모든 플랫폼을 지원한다고 되어 있기는 한데 -_-, 리눅스 용입니다. 윈도우에서는 cgwin을 사용해서 실행합니다. 사용하기는 좀 복잡하지만, 스크립트를 사용하면 좀 더 우아하게 폰트를 합칠 수 있습니다.

 

 

[출처] http://gyuha.tistory.com/245

 

 

[폰트 이름(Font Naming) 수정]

Menu-Format-Naming...

 

 

[참조] http://perafan.blog.me/30113207479

반응형
Posted by blueasa
, |

 

 

[경량화 프로그램 링크] http://opentype.jp/subsetfontmk.htm

 

サブセットフォントメーカー

サブセットフォントメーカー Windows版 Mac版 概要 フォントから指定された文字列だけを取り出して、ファイルサイズを小さくしたフォントを作成するソフトです。 変換元のフォントとしては

opentype.jp

 

 

[경량화 프로그램 파일(2020-03-10)]

subsetfont320.msi
1.43MB

 

[경량화 방법 정리] https://spoqa.github.io/2015/10/14/making-spoqa-han-sans.html

 

스포카 한 산스와 글꼴 경량화

글꼴의 용량을 어떻게 줄였는지를 중심으로 스포카 한 산스의 제작기를 적어보았습니다.

spoqa.github.io

 

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

[kr_jp_특수문자 추가 서브셋]

jp_특수문자_new.txt
0.01MB
kr_특수문자_new.txt
0.01MB
kr_특수문자_간체_번체_new.txt
0.02MB

 

[참조] https://drybone-developer.tistory.com/72

 

[폰트] 서브셋 경량화, WOFF 변환 + 상용 한글, 제1수준 한자, 특수기호

요즘 자꾸 딴짓만하네 하지만 어쩌겠어요 전 오늘도 제가 하는 게임들에서 이벤트 총을 동시에 네 발이나 맞았어요 (?) 여튼 어제 쓴 글에서 이어지..기도 하는? 글입니다. [WOFF / CSS] 글자 사라짐(

drybone-developer.tistory.com

 

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

 

[각 언어별 필수 글자들 모음]

jp.txt
0.01MB
kr.txt
0.01MB
kr_jp_간체_번체.txt
0.03MB
kr_간체_번체.txt
0.03MB
language_title.txt
0.00MB
sc_간체(중국본토).txt
0.01MB
tc_번체(대만).txt
0.01MB

 

 

[링크] https://brunch.co.kr/@brunchgulb/10

반응형
Posted by blueasa
, |

[다운로드] http://www.piriform.com/speccy/builds




[링크] http://mastmanban.tistory.com/185

반응형
Posted by blueasa
, |

yield return 0은 UnBoxing이 일어나니 yield return null; 사용.



[참조]

Using "yield return 0;" allocates unwanted memory, due to unboxing the 0 to null. so you should use "yield return null;" to lessen GC stress.


[참조링크] https://disqus.com/home/discussion/unitypatterns/scripting_with_coroutines/

반응형
Posted by blueasa
, |


[링크http://lhh3520.tistory.com/315



[추가]

Unity Analytics도 Offline 일 때,

Cache에 저장해둔 후, Online이 되면 전송함


[참조

Our SDK caches events that are sent if the request fails for any reason(e.g. no internet connection) after it reaches the retry threshold.
Once there's an internet connection, we resend the cached events.


[참조 출처]

https://forum.unity3d.com/threads/is-unity-analytics-a-best-effort-delivery-service-offline-unreliable-connections.311369/

반응형
Posted by blueasa
, |

iOS 키체인을 활용해 문자열을 앱의 삭제 이후에도 보존하는 방법이다. 스크립트 하나를 아래와 같이 작성.

using UnityEngine;
using System.Runtime.InteropServices;
 
public class KeyChain {
   
  #if UNITY_IPHONE || UNITY_STANDALONE_OSX
   
  [DllImport("__Internal")]
  private static extern string getKeyChainUser();
   
  public static string BindGetKeyChainUser()
  {
    return getKeyChainUser();
  }
   
  [DllImport("__Internal")]
  private static extern void setKeyChainUser(string userId);
   
  public static void BindSetKeyChainUser(string userId)
  {
    setKeyChainUser(userId);
  }
   
  [DllImport("__Internal")]
  private static extern void deleteKeyChainUser();
   
  public static void BindDeleteKeyChainUser()
  {
    deleteKeyChainUser();
  }
 
 
  #endif
 
}
한 스크립트의 함수를 받을 Objective-C 파일을 만들 차례.

당연하게 새롭게 만들거나 다운로드한 파일의 위치는 유니티 프로젝트 Plugins/IOS에 위치. (위에 만든 스크립트 위치는 상관없음)


[링크] <- 링크를 통해 아래의 2개 파일을 다운로드.

- UICKeyChainStore.h

- UICKeyChainStore.m



아래의 2개의 파일을 새롭게 생성.

- KeyChainPlugin.h

- KeyChainPlugin.mm


KeyChainPlugin.h의 내용은 아무것도 구현하지 않고 빈 파일로 둠.


KeyChainPlugin.mm의 내용은 아래와 같이 작성.

#import "KeyChainPlugin.h"
#import "UICKeyChainStore.h"
 
NSString *_keyForID = @"UserID";
 
@implementation KeyChainPlugin
 
extern "C" {
    char* getKeyChainUser();
    void setKeyChainUser(const char* userId);
    void deleteKeyChainUser();	
}


char* getKeyChainUser()
{
    NSString *userId = [UICKeyChainStore stringForKey:_keyForID];
 
    if (userId == nil || [userId isEqualToString:@""]) {
        NSLog(@"No user information");
		userId = @"";
    }
 
	NSString* json = [NSString stringWithFormat:@"{\"userId\":\"%@\"}",userId];
 
    return makeStringCopy([json UTF8String]);
}
 
void setKeyChainUser(const char* userId)
{
    NSString *nsUseId = [NSString stringWithCString: userId encoding:NSUTF8StringEncoding];
 
    [UICKeyChainStore setString:nsUseId forKey:_keyForID];
}
 
void deleteKeyChainUser()
{
    [UICKeyChainStore removeItemForKey:_keyForID];
}
 
char* makeStringCopy(const char* str)
{
    if (str == NULL) {
        return NULL;
    }
 
    char* res = (char*)malloc(strlen(str) + 1);
    strcpy(res, str);
    return res;
}
 
@end

전체적인 흐름은 다음과 같음.


1. Keychain.getKeyChainUser() 호출.

2. KeychainPlugin.getKeyChainUser() 진입후, UICKeyChainStore.stringForKey함수를 사용하여 키체인에 접근, UserID의 키에 해당하는 값을 가져옴.

3. 함수를 보면 알겠지만, 값이 null이거나 빈값일 경우 json으로 리턴할 데이터에 값을 따로 지정하지 않음.

4. {"UserID":"ABC"} 형태로 리턴되므로, 유니티에서 해당 값을 반은 후 JSON 데이터를 파싱해서 사용.


* 유니티 API의 SystemInfo.deviceUniqueIdentifier은 호출시 고유한 값을 리턴하지만,  앱을 삭제하고 다시 설치후 호출할 경우 변경된 값을 리턴하므로, 위와 같은 방법을 통해 영구적인 형태로 사용할 수 있음.



참고링크

- http://bribser.co.jp/blog/pluginkeychain/

- http://docs.unity3d.com/kr/current/Manual/PluginsForIOS.html

- https://github.com/kishikawakatsumi/UICKeyChainStore



출처: http://redccoma.tistory.com/134 [My Data Factory]


반응형
Posted by blueasa
, |