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

카테고리

분류 전체보기 (2849)
Unity3D (893)
Programming (479)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (189)
협업 (64)
3DS Max (3)
Game (12)
Utility (141)
Etc (99)
Link (34)
Portfolio (19)
Subject (90)
iOS,OSX (52)
Android (16)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (3)
Memories (20)
Interest (38)
Thinking (38)
한글 (30)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (19)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total
Today
Yesterday

제목엔 2.7로 적었지만, 이번에 NGUI 2.6.4에서 3.0으로 업그레이드 하면서 수정해줘야 될 사항들 간단 정리..

아는데까지만 정리하는 거라 빠지는것도 있음.

새로 알게 되면 추가해야 될 듯..



[UICheckBox]

- UICheckBox -> UIToggle

- UICheckBox.isChecked -> UICheckBox.value

- Checkbox State == UIToggle.current.value

- 더이상 root(GameObject)를 설정안함 -> Group ID(Index)를 직접 셋팅하는 방식으로 변경. 


[UIButtonSound]

- UIButtonSound -> UIPlaySound


[UISprite]

- UISprite 통합(Filled/Sliced/Tiled 등은 내부 메뉴로 바꼈다)

   = UIFilledSprite -> UISprite

   = UISlicededSprite -> UISprite

   = UITiledSprite -> UISprite

- UISprite의 Scale 값이 텍스쳐 크기였던 것이 기본 Scale 1로 바뀌고, Dimensions가 생겨서 여기서 크기를 지정한다. 


[UILabel]

- UILabel의 Scale 값이 폰트 크기였던 것이 기본 Scale 1로 바뀌고, Dimensions가 생겨서 여기서 크기를 보여주지만, 폰트는 Dimensions 조절이 불가능..

- 넓이(width) 제한은 Dimensions의 width 값으로 조절.
- 라인제한은 UILabel-Max Lines 로 조절(0은 무제한,자동조절)
- Label 크기 조절은 Overflow : ShrinkContent 로 바꾼 후, Dimensions를 조절(Scene View에서 Label의 외곽 파란 동그라미를 잡아서 조절해도 됨)
- Label 크기 조절은 Overflow 종류에 따른 사용법을 좀 더 알아봐야 할 듯..
- 우선 Label 크기 조절은 Overflow : Resize Freely 로 선택한 후, Transform-Scale 조절로..

[UIPanel]

- UIPanel에 depth가 생겼다. Panel의 depth끼리 대분류가 되고, Widget의 depth가 소분류로 나뉜다.

  결과적으로 패널 단위로 분리가 되고, 한 패널 안에서만 위젯들의 depth를 관리해주면 되게 되어서 depth 관리가 편해졌다.(Good)

- Panel끼리는 동등한 위치이기 때문에, Tree Node 상 하위에 있는 Panel이라도 모두 맞게 셋팅해 줘야 된다.

- depth 관리가 되기 때문에 이제 Label을 보이기 위해 넣었던 Panel은 빼도 된다(-z값도 빼도 될듯하다. Collider사용을 위해서 넣었다면 유지..)


[Atlas]

- Atlas를 NGUI에서 통합관리 하게 바꼈다. 결과적으로 아틀라스가 다름으로 인해서 생기는 depth 관리문제가 사라졌다.(Font Atlas 포함)(Good)


[Common]

- checkbox.onStateChange += OnCheckboxState -> EventDelegate.Add(checkbox.onStateChange, OnCheckboxState);

- 여러 번 실행되는 곳에서도 한 번만 등록하려면..

  = checkbox.onStateChange += OnCheckboxState -> EventDelegate.Add(checkbox.onStateChange, OnCheckboxState, true);

- checkbox.onStateChange = OnCheckboxState -> EventDelegate.Set(checkbox.onStateChange, OnCheckboxState);

- checkbox.onStateChange -= OnCheckboxState -> EventDelegate.Remove(checkbox.onStateChange, OnCheckboxState);

- 'Make Pixel Perfect' 버튼 -> Widget Component의 'Correct' 버튼으로 대체.

- widget의 크기를 transform.scale로 표현하던 것을 widget.width/widget.height로 대체.

- Prefab도 새로 체크해줘야 함.

- Widget들이 바뀌면서 Atlas도 새로 저장해줘야 된다. Widget 정리하면서 저장할 때 Atlas 저장할지 물으면 저장하고 업데이트 시키자.


[참조]

http://www.tasharen.com/forum/index.php?topic=11.msg27296#msg27296


3.0.0 has been released. Upgrade-centric video:
http://www.youtube.com/watch?v=uNSZsMnhS1o&list=UUQGZdUwzE8gmvgjomZSNFJg

Beginner / overview video:
http://www.youtube.com/watch?v=OT0hTxjjkY4&list=UUQGZdUwzE8gmvgjomZSNFJg

Scroll view example (because it was requested):
http://www.youtube.com/watch?v=OiA4o8KqBFI&list=UUQGZdUwzE8gmvgjomZSNFJg

반응형
Posted by blueasa
, |


[Active/InActive HotKey for NGUI]

Alt + Shift + A



[출처] http://www.youtube.com/watch?v=uNSZsMnhS1o



[추가1]

https://answers.unity.com/questions/566114/is-there-a-keyboard-shortcut-for-setting-an-object.html



[추가2]

Unity2018에서 해당 키가 안먹힘

원래 NGUI 부가기능인데 유니티가 좋아보였는지 내장시켰다고 함.

그래서 양쪽에서 같은 Hotkey를 셋팅했기 때문에 충돌나서 키가 안먹힌다고 함.

유니티에 내장됐기 때문에 NGUI의 Hotkey 소스를 주석처리 하자.


NGUISelectionTools.cs

에 보면 

[MenuItem("GameObject/Selection/Toggle 'Active' #&a")]

부분이 있는데

해당 MenuItem 부분만 주석처리하면 됨.


[출처] 게임코디 선후님

반응형
Posted by blueasa
, |
Unity3D와 NGUI로 게임을 개발하면서 가끔 게임 로직상으로 NGUI를 활성/비활성 등을 해야 될 때..

제대로 셋팅이 적용되지 않는 경우를 가끔 보게 된다.
(분명 비활성화 시켰는데 활성상태 그대로라던지..사라져야 할 UI 이미지가 그대로 남아있다던지..)

어디서 봤는지 기억은 가물가물하지만..

NGUI Update가 Unity에 비해 한 프레임(one frame)이 늦다고 한다.

그래서 뭔가를 셋팅(Set) 할 때, 한 프레임을 늦게 적용해줘야 제대로 적용된다.

아래는 그 방식의 간단한 한 예이다.


[Ex]

GameObject m_goSPrite;    // 스프라이트의 게임오브젝트

void Start()
{
StartCoRoutine(InActivateUI());    // 스프라이트 게임오브젝트 비활성화 코루틴으로 실행
}

IEnumerator InActivateUI()
{
     yield return null;        // 한 프레임 넘기기 위해..

    m_goSPrite.SetActive(false);
}


반응형
Posted by blueasa
, |

IronPython

Unity3D/Plugins / 2013. 10. 6. 21:02

Link : http://ironpython.net/

반응형

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

Mobile Movie Texture  (0) 2013.12.03
원격 로그 플러그인  (0) 2013.11.20
UniPython  (0) 2013.10.06
iOS 플러그인 제작  (0) 2013.09.15
Prefactory: Free PoolManager / PoolObject System  (0) 2013.08.28
Posted by blueasa
, |

UniPython

Unity3D/Plugins / 2013. 10. 6. 20:25


Link : http://forum.unity3d.com/threads/190418-UniPython-Python-Scripting-in-Unity3D-based-games

반응형

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

Mobile Movie Texture  (0) 2013.12.03
원격 로그 플러그인  (0) 2013.11.20
IronPython  (0) 2013.10.06
iOS 플러그인 제작  (0) 2013.09.15
Prefactory: Free PoolManager / PoolObject System  (0) 2013.08.28
Posted by blueasa
, |


링크 : http://unitystudy.net/bbs/board.php?bo_table=dustin&wr_id=402&page=0&sca=&sfl=&stx=&spt=0&page=0&cwin=#c_406

반응형

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

Mobile Movie Texture  (0) 2013.12.03
원격 로그 플러그인  (0) 2013.11.20
IronPython  (0) 2013.10.06
UniPython  (0) 2013.10.06
Prefactory: Free PoolManager / PoolObject System  (0) 2013.08.28
Posted by blueasa
, |

링크 : http://devkorea.co.kr/bbs/board.php?bo_table=m03_site&wr_id=100&currentId=47

반응형

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

Photon Cloud 강좌  (0) 2013.07.16
Posted by blueasa
, |


링크 : http://myevan.cpascal.net/articles/2013/unity_ngui_pixel_perfect.html

반응형
Posted by blueasa
, |



링크 : http://www.booncotter.com/unity-prefactory-a-better-pool-manager/


참조 : http://forum.unity3d.com/threads/127997-Prefactory-Free-PoolManager-PoolObject-System

반응형

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

Mobile Movie Texture  (0) 2013.12.03
원격 로그 플러그인  (0) 2013.11.20
IronPython  (0) 2013.10.06
UniPython  (0) 2013.10.06
iOS 플러그인 제작  (0) 2013.09.15
Posted by blueasa
, |

출처 - http://docs.unity3d.com/Documentation/Manual/iphone-playerSizeOptimization.html -


iOS 플레이어 빌드 사이즈 최적화 하기.

빌드 사이즈를 줄이는 방법은 크게 두 가지가 있습니다. Xcode에서 Active Build Configuration을 조절하는 방법과 Unity에서 Stripping Level을 조절하는 방법입니다.

 

Relese Mode로 빌드 하기.

Xcode에서 빌드 할 때Active Build Configuration 드롭다운 메뉴에서 Debug 와 Release 옵션을 선택할 수 있습니다. Debug Mode 대신 Release Mode로 빌드를 하면 게임에 따라서 2-3MB 정도의 빌드 크기가 줄어듭니다.

1.jpg

The Active Build Configuration drop-down -

Release Mode로 빌드를 하게 되면 Debug 정보 없이 빌드를 하기 때문에게임이 크래쉬가 발생하거나 다른 문제가 생겼을 때 Stack Trace 등의 정보를Output으로 확인할 수가 없습니다

제작이 완료돼서 배포를 하는 게임의 경우에는 문제가 되지 않겠지만개발 중에는 Debug Mode가 유용합니다.


iOS Stripping Level (Advanced License feature)

Stripping Level 을 조절해서 빌드 크기를 최적화 하는 방법은 아래와 같은 방법으로 진행이 됩니다.

1. Strip assemblies level: 스크립트의 Bytecode를 분석해서해당 클래스와 메소드가 참조가 되는지 여부를 확인하고참조되지 않는 부분은 DLL에서 제거되고, AOT 컴파일 단계에서 제외 됩니다이 최적화 방법은 Main binary의 크기와 수반되는 DLL을 줄이는 방법으로리플렉션을 사용하지 않는 한 안전한 방법입니다.

2. Strip ByteCode level: (Data 폴더에 저장되는)모든 .Net DLLmetadata strip되어 크기가 줄어듭니다모든 코드가 AOT 단계에서 미리 전처리(precompiled)가 되고, main binary에 링크가 되기 때문에 이 방법이 가능하게 됩니다.

3. Use micro mscorlib: 특별한 경우로, mscorlib smaller 버전을 사용하는 방법입니다.

이 라이브러리에서는 일부 컴포넌트가 제외된 버전입니다.

예를 들어, Security, Reflection.Emit, Remoting, non Gregorian calendars 등이 제외됩니다.

또한 내부 컴포넌트간의 상호의존성이 줄어들게 됩니다이 방법은 main binary mscorlib.dll의 크기를 줄이는 방법이지만 일부 System 및 System.Xml 어셈블리 클래스에서는 호환이 되지 않으니 주의를 해야 합니다.

 Level들은 축적이 됩니다다시 말해서, Level 3 최적화 방법은 Level 2  Level 1을 내포하고, Level 2 최적화 방법은 Level 1을 포함합니다.

주의: Micro mscorlib  core 라이브러리의 크기를 많이 줄인 버전입니다. micro mscorlib 를 사용할 때 가장 좋은 방법은 제작중인 어플리케이션에서 사용하지 않는 .Net 클래스와 기능들을 사용하지 않는 것입니다제외할 예로 GUID가 가장 좋은 예시가 될 것 같습니다. GUID를 직접 만들어서 대체 사용이 쉽고직접 제작해서 사용하는 경우 성능 면에서 앱 사이즈를 줄이는 면에서도 모두 좋은 결과를 낼 수 있습니다.


Tips

리플렉션을 사용할 때 Stripping 조절하는 방법

Stripping static code analysis에 많이 의존하는 방법이기 때문에효율적으로 진행이 되지 않는 경우가 종종 발생합니다.

한 예로 리플렉션과 같은 dynamic 기능이 사용되는 경우입니다이런 경우사용하거나 참조해야 하지 않는 클래스 등을 명시 하는 것이 필수적입니다.

유니티는 프로젝트 별로 따로 custom stripping blacklist를 지원합니다. blacklist를 사용하면 link.xml 파일을 생성하고 Assets 폴더에 두어야 합니다. link.xml 파일의 예제를 아래에서 확인할 수 있습니다보존(preservation)되어야 한다고 명시된 클래스들은 stripping에 영향을 받지 않게 됩니다.

<linker>

       <assembly fullname="System.Web.Services">

               <type fullname="System.Web.Services.Protocols.SoapTypeStubInfo" preserve="all"/>

               <type fullname="System.Web.Services.Configuration.WebServicesConfigurationSectionHandler" preserve="all"/>

       </assembly>

 

       <assembly fullname="System">

               <type fullname="System.Net.Configuration.WebRequestModuleHandler" preserve="all"/>

               <type fullname="System.Net.HttpRequestCreator" preserve="all"/>

               <type fullname="System.Net.FileWebRequestCreator" preserve="all"/>

       </assembly>

 </linker>

주의하지만 어떤 클래스가stripping 되어야 하고 어떤 클래스가 사용이 되어야 하는지를 판별하는 방법이 어려울 수 있기 때문에, Xcode 콘솔의 에러 메시지를 확인하고시뮬레이터에서 앱을 실행시켜서 그런 정보들을 확인하는 것이 필요할 수 있습니다.

최적화된 크기의 앱 배포를 위한 체크리스트

1. 에셋 줄이기텍스처에 PVRTC 압축 옵션을 활성화 하고 가능한 범위 내에서 해상도를 줄입니다또한압축되지 않은 사운드 에셋의 수를 줄입니다이 방법에 대한 추가 팁을 아래 링크에서 확인할 수 있습니다. (링크 - http://docs.unity3d.com/Documentation/Manual/ReducingFilesize.html)

2. iOS Stripping Level Use Micro mscorlib로 설정합니다.

3. 스크립트 호출 최적화Level Fast but no exceptions로 설정합니다.

(Script call optimization level)

4. System.dll System.Xml.dll 에 있는 기능들은 사용하지 않습니다

이 라이브러리들은 micro mscorlib에 호환되지 않는 것 들입니다.

5. 불필요한 code dependencies를 제거합니다.

6. API Compatibility Level .Net 2.0 subset으로 설정합니다.

하지만 .Net 2.0 subset은 다른 라이브러리들과의 호화성에 제한적인 부분이 있다는 점을 주의해야 합니다

7. Target platformarm6로 설정합니다. (OpenGL ES 1.1)

8. JS Arrays를 사용하지 않습니다.

9. 구조체를 포함해서 Value 타입과 조합해서 generic container를 사용 하는 것을 자제합니다.



반응형
Posted by blueasa
, |