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

카테고리

분류 전체보기 (2741)
Unity3D (30)
Programming (475)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (228)
협업 (58)
3DS Max (3)
Game (12)
Utility (136)
Etc (96)
Link (32)
Portfolio (19)
Subject (90)
iOS,OSX (54)
Android (15)
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
05-15 09:26

Font fallBack

Unity3D/Font / 2016. 1. 5. 09:37

1.     Unity Font fallBack 기능
현재 폰트에 표현하지 못하는 글자가 있을 때다른 폰트를 참조할 수 있도록 검색할 폰트리스트를 적어둔다.
http://forum.unity3d.com/threads/text-characters-not-visible-in-the-built-game-app.225594/

2.     예를 들어 현재 폰트가 Thai Bold폰트일 때 Thai어는 bold효과가 있지만다른 기본글자(영문자)는 효과가 없이 나온다.

따라서, fallBack기능과 더불어 사용할 때에는 우선순위를 잘 정해야 모두 Bold효과가 나올 수 있다.

3.     Unity freeType 라이브러리를 사용한다.
http://www.soen.kr/lecture/library/freetype/ft1.htm
폰트 타입에 상관없이 모든 폰트를 다루며글자마다 폰트에 있는 글자인지 판단하기 때문에
여러 글자가 섞여 있어도 fallBack List의 폰트를 가져오게 된다.

4.     지금까지의 테스트로는 Noto Sans CJK를 기본으로 Noto Sans Thai fallBack List에 추가를 하여 사용하는 것이 
가장 좋은 것 같다.

 

Noto Sans : 영문자스페인어 지원 / 한글중국어는 기본 텍스트 또는 안나올지도

Noto Sans CJK : 중국일본한국어영문자스페인어 타이어 안나옴

Noto Sans Thai : 타이어 / 한글영문자 기본 텍스트 또는 안나올지도







Noto Sans CJK와 Noto Sans Thai를 assetBundle로 구성하여 패치로 다운 받게 했더니 fallBack 기능이 안되었다.

용량이 작은 Noto Sans Thai를 apk에 포함 시킨 채 , Noto Sans CJK만 assetBundle로 구성하였더니 되는 듯..


단, Noto Sans CJK를 assetBundle로 load할 때 fontNames를 설정 해야 한다.




출처 : http://jenemia.tistory.com/315

반응형
Posted by blueasa
, |

이거 해결하려고 죽는줄 알았다........


이번 게임을 제작하면서 facebook sdk plugin과 googlePlay sdk plugin 을 함께 사용하였다. 


이클립스에 손안대고 쉽게 코딩을 하려 plugin을 사용하였는데 생각지도 못했던 AndroidManifest.xml에서의 Activity충돌 문제가 발생하였다. 


AndroidManifest.xml에서 무언가 답이 있지 않을까 고민하여...

수정하고 빌드돌리고 폰에 넣고.. 테스트하고.. 

수정하고 빌드돌리고 폰에 넣고.. 테스트하고.. 

수정하고 빌드돌리고 폰에 넣고.. 테스트하고.. 

수정하고 빌드돌리고 폰에 넣고.. 테스트하고.. 

수정하고 빌드돌리고 폰에 넣고.. 테스트하고.. 

안된다. 그 어떤 방법을 해보아도 안된다.. ㅋㅋ



그리고 많은 사이트와 많은 구글링을 통하여 힌트를 얻었다. 


그리하여 내가 얻은 결론은,

나만의 MainActivity를 작성하여야 한다!!!!!!!

진리다! 방법 없다. 

귀찮아도 어쩔수없다. 거진 3일을 소비하여 다른방법을 갈구해 보았으나 없다. 방법은 이것뿐이다!!!!


생각보단 양이 되어 보이지만 따라하다보면 금방 해결할 수 있을 것이다.



참고한 사이트

나와 동일한 문제. 허나 이대로하면 문제있음.

http://stackoverflow.com/questions/18970822/conflict-with-activity-tags-on-android-manifest-facebook-and-google-play-games/18971204#18971204


Activity생성방법

http://sungho0459.blog.me/40167910950


우선 위의 두 링크를 참고하길 바란다.


첫번째 링크에서 보면 아래와 같이 설명하고 있다.


import android.content.Intent;
import android.os.Bundle;
import com.facebook.Session;

public class MyMainUnityPlayerActivity extends com.bfsgooglegames.GoogleGamesUnityPlayerActivity {
  @Override
  protected void onCreate(Bundle arg0) {
    super.onCreate(arg0);
  }

  @Override
  public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
  } 
}

근데 이대로하면 역시나 문제 생긴다.


이유는 facebook.Session자체가 아직 null이기 때문이다!!!! 



그러므로 완성되어야할 소스는 바로,


package com.snowberry01.blockbind;

import android.content.Intent;
import android.os.Bundle;
import com.facebook.Session;
import com.unity3d.player.UnityPlayerNativeActivity;

public class MainActivity extends UnityPlayerNativeActivity {
  @Override
  protected void onCreate(Bundle arg0) {
    super.onCreate(arg0);
  }

  @Override
  public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    
    if( null != Session.getActiveSession() )
    {	
    	Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
    }
  } 
}


이리하여 아무런 문제없이 facebook sdk와 googlePlay sdk를 함께 사용하였다.

( 참고로 위의 소스는 실제 나의 소스에서 발취한 것 )


그리고 AndroidManifest.xml는, (그외 다른 소스부분은 뺏음)


<activity android:name="com.snowberry01.blockbind.MainActivity" android:label="@string/app_name" android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="true" /> </activity> <activity android:name="com.facebook.unity.FBUnityPlayerActivity" android:label="@string/app_name" android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen"> </activity>


보면 FBUnityPlayerActivity를 메인으로 두질 않아도 잘 된다.



이거 해결하느라 정말 죽는 줄 알았다......



ps - 도움이 되셨으면 제가 만든 게임좀 받아주시고.... (아래에 링크)

(구걸.. 전체다운수 40개도안됨;;) 리뷰 한줄 부탁드립니다!!^^


구글플레이 링크

https://play.google.com/store/apps/details?id=com.snowberry01.blockbind



출처 : http://snowberrydev.tistory.com/2

반응형

'Unity3D > Tips' 카테고리의 다른 글

[펌] Find references in scene  (0) 2016.02.26
Texture, Resource.... and Memory!!  (0) 2016.01.07
유니티 admob 클릭이 안되는 경우  (0) 2016.01.04
Animation(Legacy) 최적화  (0) 2015.11.16
코루틴(Coroutine)++  (0) 2015.10.19
Posted by blueasa
, |

#유니티에 넣은 admob 이 클릭이 안되는 경우


1. 방법1


- AndroidManifest.xml 파일을 보면 아래와 같은 태그가 있다. value 값이 false 로 되어 있다면 true 로 바꾼다.


<meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="true" />


 


2. 방법2


-위의 방법으로 해결이 되지 않을 경우 해당 태그의 위치를 아래와 같은 곳으로 이동 시킨다.


        <activity android:name="com.unity3d.player.UnityPlayerProxyActivity"

                  android:label="@string/app_name"

                  android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen">

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

            <meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="true" />

        </activity>






반응형
Posted by blueasa
, |
안녕하세요. 오리진 스튜디오의 넷드론 엔진 개발자 입니다.
저는 과거 PC 온라인 게임을 몇번정도... 초기부터 상용화(MMORPG, TPS)를 시켜봤었습니다.

이러한 경험들을 바탕으로 모바일 환경(Unity Editor)을 위한 Real-Time Interaction을 구현 하였고, 완벽한 처리를 할수있는 구조의 네트워크 엔진을 개발하여 지난주 에셋스토어 검수를 통과하였습니다.

클라이언트: Unity Editor (Only C#)
서버: Linux + Eclipse (CentOS, Ubuntu, Gentoo ... , C/C++)

저희 포럼에 오시면 언제든지 넷드론 엔진에 대한 질문 및 토론이 가능합니다.
아직 위키에 올릴 기술문서들은 정리중이지만...
에셋스토어 패키지 안의 영문/한글 메뉴얼을 참고하시면 테스트 및 개발이 가능합니다.

저희 포럼의 다운로드 메뉴를 클릭하시어 무료 데모 버전 테스터를 실행해보세요.

채널/룸 에 대한 다중 처리, 주고 받는 최적화된 패킷 크기(NDP), Ping/Pong 속도 측정, 예외상황 처리, 모바일 테스트, 기타 등등... 많은 테스트를 진행할수 있으며 에셋스토어(NetDrone For Unity) 패키지 안 셈플들과 동일한 소스를 사용하였습니다.

* C#으로 제작된 클라이언트용 네트워크 엔진은 Poll을 사용하고 있으며 매우 빠른 반응 속도를 보여줍니다.
* C/C++로 제작된 서버용 네트워크 엔진은 Epoll을 사용하고 있으며 매우 안정적인 작동을 하게됩니다.
* 그외 게임 개발에 대한 고급 설계법 및 예제들을 포함하고 있어 많은 도움이 되실것이라 생각합니다.

에셋스토어: http://u3d.as/mzz



출처 : http://goo.gl/Xw3ZoH

반응형
Posted by blueasa
, |


[참조]

http://lab.gamecodi.com/board/zboard.php?id=GAMECODILAB_QnA_etc&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=3216



[링크]

 https://www.assetstore.unity3d.com/kr/#!/content/41707

반응형
Posted by blueasa
, |

[링크]


Unity3D :: Live2D 적용 및 튜토리얼 #1


Unity3D :: Live2D 적용 및 튜토리얼 #2


Unity3D :: Live2D 성능 이슈

반응형

'Unity3D > Plugins' 카테고리의 다른 글

[에셋] 유니티용 네트워크 엔진(넷드론)  (0) 2016.01.04
[에셋] Android Keyboard (with NGUI)  (0) 2015.12.23
Unity3D Debug console with color  (0) 2015.09.24
SVG Importer  (0) 2015.09.10
WebView 플러그인 Awesomium(HTML UI Engine)  (3) 2015.08.05
Posted by blueasa
, |

[원본 링크]

http://kheldon.tistory.com/2



올려진 파일은 공유해주신 위 원본링크의 소스를 개조해서 사용중입니다.(공유 감사합니다.)


[개조파일]

CUIListView.cs




[추가사항]

- SetFocusOnCenter 추가.

- WidgetBound 대신 BoxCollier를 ItemSize로 사용.

- Vertical에서 아이템이 아래로 붙는 문제 수정(위로 붙게..)


[추가사항] 2018-07-27

- ScrollBar 터치 로직 추가


반응형
Posted by blueasa
, |





출처 : http://www.slideshare.net/ndoors/2014-33402528

반응형
Posted by blueasa
, |
using System;

// 1200초(20분) 받아서 시간:분:초 표시하기
TimeSpan ts = new TimeSpan(0, 0, 1200);
string strTemp = string.Format("{0:HH:mm:ss}", ts);

Debug.Log(strTemp);


[날짜/시간 출력 참조]

http://www.csharp-examples.net/string-format-datetime/


반응형
Posted by blueasa
, |

프로젝트를 진행하다보면 NGUI의 label만으로는 표현이 뭔가 아쉬운 경우가 있다. 특히 게임 캐릭터나 유닛이 데미지를 받는다거나, 스코어를 보여준다거나 하는 상황에서 사이즈가 큰 폰트를 써야 할 경우가 많은데, 이럴 경우 기본 폰트의 크기가 작아 폰트가 지저분하게 보인다거나 게임 자체가 뭔가 허접(?)하게 보일 확률이 높다.

"0부터 9까지의 숫자 부분만 따로 떼어 특별한 이미지로 만든 후에 이것을 label로 쓸 수 있다면..?"

이런 생각으로, 데미지 폰트를 만드는 방법을 검색해 보았으나... BMFont를 이용한 폰트를 만드는 방법은 여기저기 블로그 등에 널려(...) 있는데 비해, 이미지로 구성된 숫자 폰트를 만드는 방법은 의외로 찾아보기 어려웠다. 약간의 삽질 끝에 숫자 폰트를 만드는 방법을 확실히 알게 되어 공유해 보겠다. 

준비물
Unity, NGUI, BMFont, 폰트로 만들 0부터 9까지의 이미지

참고로 여기서 사용한 각 툴의 버전은 다음과 같다.
Unity3D: 4.1.5
NGUI: 2.6.3
BMFont: 1.13

1. BMFont를 띄우고 0부터 9까지 폰트로 만들 숫자를 선택한다.


일반적인 BMFont를 만드는 과정과 거의 비슷한데, 폰트 중에 숫자 부분만을 선택(클릭)한다는 점이 다르다. (보통 인터넷에 돌아다니는 KS1001.txt 파일을 import하는 과정...)
숫자를 클릭하면 어두운 회색 박스가 약간 밝은 회색 박스로 변한다. 이런 식으로 0부터 9까지 선택을 한다.

2. Image Manager를 띄운다.


일반 폰트를 만들 때는 존재조차 있는지 몰랐던, Image Manager를 띄운다.

3. Import Image


Image Manager를 띄우면 달랑 메뉴 하나에 빈 창만 보이는데, 메뉴의 Image => Import image를 클릭한다.

4. Id 입력


파일을 선택하는 창이 뜨는데, 준비해둔 숫자 폰트 중 0번 이미지를 선택하자. 그러면 위와 같은 Icon Image 창이 뜬다.
여기서 주의할 점은 Id 부분인데, 0번 이미지의 Id를 48로 변경하고 Ok를 눌러주자.
나머지 1번부터 9번까지는 0번 이미지부터 순서대로 Id값을 1씩 늘려나가면 된다. 이렇게 하면 9번 이미지는 Id가 57번이 된다.


5. 설정 확인


0번부터 9번 이미지를 모두 Import했다면 위와 같은 화면을 볼 수 있을 것이다.
0부터 9까지의 문자 박스에 하늘색 점이 표시되어 있고, 밝은 회색 박스로 변해 있다는 것을 알 수 있다. 만약 자신이 작업한 결과물이 위의 스샷과 다르다면 지금까지의 작업 과정을 다시 한 번 차근차근 확인해 보자.


6. Export Options


이제 Export Options를 설정해야 한다. BMFont의 Options => Export Options를 클릭하여 옵션 창을 띄우자.
확인할 사항은 두 가지이다. 첫 번째는 Bit depth인데 32비트로 바꾸면 된다. 만약 8비트 상태 그대로 둔다면 원래의 색상이 아니라 희멀건 폰트를 보게 될 것이다. 두 번째는 Textures인데, 유니티 프로젝트에서는 대부분 png 이미지를 사용하므로, png로 바꾸면 된다.
Save bitmap font as...를 누르면 저장할 이름을 결정하는 창이 뜬다.
여기서는 DamageFont라고 정해보았다.


[참고] 이후의 과정은 일반적인 BMFont를 만드는 과정과 같다.

7. fnt를 txt로 변경


저장하면 fnt와 png 파일이 생긴다. 이 중 fnt 파일의 확장자를 fnt에서 txt로 바꾼다.


8. txt와 png를 유니티의 프로젝트로 드래그&드롭


앞의 과정에서 만든 txt와 png를 유니티의 프로젝트에 드래그&드롭한다.
이제 NGUI의 Font Maker를 열어 폰트를 만들면 되는데, 유니티 메뉴 => NGUI => Open the Font Maker를 클릭한다.


9. Font 아틀라스 만들기


지금까지의 과정을 정상적으로 진행했다면 위와 같은 모습을 볼 수 있다. 앞의 과정에서 프로젝트에 포함시켰던 txt 파일을 Font Data로 드래그하고, png 파일은 Texture로 드래그한다.
Font Name을 입력하고 Create 버튼을 누르면 프로젝트 폴더에 아틀라스와 마테리얼이 생성된다.


10. 최종 테스트


NGUI의 Widget Tool을 띄운 후, 조금 전 만든 DamageFont 아틀라스를 Font로 선택한다. Label을 만든 후 정상적으로 폰트가 출력되는지 확인하자. 지금까지의 과정을 차근차근 따라했다면 위의 스샷처럼 Scene 화면에서 데미지 폰트로 된 Label을 확인할 수 있을 것이다.


출처 : http://lianes.tistory.com/49

반응형
Posted by blueasa
, |