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

카테고리

분류 전체보기 (2738)
Unity3D (817)
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 (53)
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
04-30 00:00


[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
, |

[참조 글 및 참조파일]

Link :http://forum.unity3d.com/threads/165254-Unity-4-dynamic-font-support-for-NGUI 

File : 

NGUI_277c_DynamicFonts_and_Readme.zip


※ 파일명과 readme에는 NGUI 2.7.7이라고 돼 있지만 정황상 NGUI 2.2.7을 오표기 한 것 같다.


[NGUI 2.3.4 대응되는 수정 파일]

File : 

NGUI 2.3.4_DynamicFont_Source.zip



[사용기]

※ 현재 사용하려니 NGUI 2.3.4 버전이다. 위의 파일과 UIFont.cs가 좀 달라서 직접 수정해야 했다.


1) NGUI 2.3.4 버전에 맞춘다.


2) 위의 파일(NGUI 2.3.4_DynamicFont_Source.zip)을 받아서 풀어보면, UIFont.cs, UIFontInspector.cs 두 파일이 있다.

    각각 해당위치에 덮어씌우자.

   (주의: 덮어씌우면 기존 폰트 프리팹의 UIFont 스크립트가 missing이 될 수 있다. 바뀐 UIFont를 다시 넣어주면 정상 작동한다.)


3) 원하는 TTF 폰트 파일을 프로젝트에 올린다.(테스트용으로 Windows\Fonts\에 있는 '맑은고딕'을 사용했음.)

    올리면 아래와같이 자동으로 다이나믹 폰트로 생성되면서 Material과 텍스쳐가 생성된다.

    인스펙터 창에서는 폰트 사이즈 등을 조절할 수 있다.



3) Empty GameObject를 하나 생성한다.



4) 이름을 원하는대로 바꾼다.(임의로 MyDynamicFont로 바꿈)



5) UIFont 스크립트를 추가한다.



6) Font Type을 Dynamic으로 바꾸고,

    6-1) Font : 원하는 폰트(임의로 MALGUN 넣음)를 넣는다.

    6-2) Material : MALGUN 아래 있는 Material(스샷에서는 Font Material)을 드래그해서 넣는다.

          ※ 위 참조 데이터의 readme에서는 Material을 새로 만드는 데, 폰트 아래 있는걸 사용해도 별 차이가 없어서 그냥 쓰는걸로 설명함.. 왜 새로 만드는 지 모르겠음. 차후 문제가 생긴다면 수정해야 될 듯.

    6-3) Size : 3)에서 본 Size(스샷에서는 16)를 넣어준다.(이 부분은 좀 더 확인을 해 봐야겠다)

          ※ 여기서의 사이즈는 폰트 사이즈와 매칭이 돼야 Height가 제대로 맞는 것 같다. 폰트 사이즈를 키우려면 3)의 사이즈부터 수정 후 다시 매칭 시키자.



7) 만든 MyDynamicFont를 Prefab으로 만들자.(폰트 만들기는 완료)



8) 'NGUI-Create a Widget'을 눌러서 Widget Tool을 열고, Font 란에 7)에서 만든 MyDynamicFont Prefab을 넣는다.



9) Label을 하나 만든다.(Add To)

    제대로 MyDynamicFont를 써서 'New Label'이 뜬 걸 볼 수 있다.



10) 테스트로 한글/영어/한자/숫자/특수문자 등을 맘대로 넣어봤다. 잘된다.



11) 추가로.. 이제껏 쓴 글이 텍스쳐에 찍혀있는 걸 볼 수 있다.

     글자수가 늘어나서 텍스쳐를 다 채울정도가 되면 텍스쳐 사이즈가 자동으로 늘어난다.




P.s. Dynamic Font가 BM Font보다 Draw Call이 높다고 들었는데..

       잠시 테스트 해봐서는 폰트 하나당 Draw Call이 1이다(BMF랑 같음).

       어떤 경우에 늘어나는 지 모르겠다.(아시는 분 가르쳐 주세요..=_=;)

반응형
Posted by blueasa
, |

링크 : http://hompy.info/664



CoverFlowScroll.unitypackage



요즘 제작중인 RPG 게임 GUI 에서 영웅 생성을 위해 캐릭터를 선택하는 UI 를 커버플로우(Cover Flow)로 구성하게 되어 NGUI 를 조금 응용해서 심플하게 구성해봤습니다. 아래 동영상과 유니티 데모를 보시면 대략 어떤 것인지 아실 수 있을 것이며 혹시나 구현 방법에 대해 관심 있는 분들은 첨부 파일을 받아서 패키지 임포트로 유니티에서 가져가 내용을 살펴 보시면 되겠습니다. NGUI 외에도 트위닝 모션을 위해 HOTween 플러그인을 사용하는 코드가 있으나 수정해서 쓰셔도 되겠습니다. 그리고 데모에 보이는 캐릭터 디자인 소스는 에셋 스토어에서 구입한 것이네요. NGUI 플러그인에 이런 기능도 포함되면 좋을 것 같은데 안된다면 아쉽지만 저처럼 이렇게 구현해야 되겠지요.^^ 여러분은 지금 어떤 기능들을 추가해보고 있나요?

[유니티 데모 링크] http://www.hompydesign.com/tmp/coverflow/

[패키지 첨부파일]  CoverFlowScroll.unitypackage

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using Holoville.HOTween;
using Holoville.HOTween.Plugins;

public class HeroTable : MonoBehaviour {
   UISprite[] heros;

   Transform mTrans;
   bool mIsDragging = false;
   Vector3 mPosition, mLocalPosition;
   Vector3 mDragStartPosition;
   Vector3 mDragPosition;
   Vector3 mStartPosition;
   
   public float cellWidth = 160f;
   public float downScale = 0.4f;
   public int cellTotal = 6;
   public int seq = 3;
   
   public UILabel titleLabel;
   
   // Use this for initialization
   void Start () {
       StartCoroutine( DelayStart(1f) );
   }
   void Awake(){
       mTrans = transform;
       mPosition = mTrans.position;
       mLocalPosition = mTrans.localPosition;
   }
   
   IEnumerator DelayStart(float delayTime) {
       yield return new WaitForSeconds(delayTime);
       heros = gameObject.GetComponentsInChildren<UISprite>();
       SetPosition(false);
   }
   
   void SetSequence(bool isRight){
       Vector3 dist = mLocalPosition - mTrans.localPosition;
       float distX = Mathf.Round(dist.x/cellWidth);
       seq = (int)distX;
       if (seq >= cellTotal) seq = cellTotal - 1;
       if (seq <= 0) seq = 0;
   }
   
   void SetPosition(bool isMotion){
       Vector3 pos = mLocalPosition;
       pos -= new Vector3(seq * cellWidth, 0f0f);
       if (isMotion) {
           TweenParms parms = new TweenParms();
           parms.Prop("localPosition", pos);
           parms.Ease(EaseType.Linear);
           HOTween.To(mTrans, 0.1f, parms);
           HOTween.Play();
       else {
           mTrans.localPosition = pos;
       }
       titleLabel.text = heros[seq].spriteName;
   }

   void Drop () {
       Vector3 dist = mDragPosition - mDragStartPosition;
       if (dist.x>0f) SetSequence(true);
       else SetSequence(false);
       SetPosition(true);
   }

   void OnDrag (Vector2 delta) {
       Ray ray = UICamera.currentCamera.ScreenPointToRay(UICamera.lastTouchPosition);
       float dist = 0f;
       Vector3 currentPos = ray.GetPoint(dist);

       if (UICamera.currentTouchID == -|| UICamera.currentTouchID == 0) {
           if (!mIsDragging) {
               mIsDragging = true;
               mDragPosition = currentPos;
           else {
               Vector3 pos = mStartPosition - (mDragStartPosition - currentPos);
               Vector3 cpos = new Vector3(pos.x, mTrans.position.y, mTrans.position.z);
               mTrans.position = cpos;
           }
       }
   }

   void OnPress (bool isPressed) {
       mIsDragging = false;
       Collider col = collider;
       if (col != null) {
           Ray ray = UICamera.currentCamera.ScreenPointToRay(UICamera.lastTouchPosition);
           float dist = 0f;
           mDragStartPosition = ray.GetPoint(dist);
           mStartPosition = mTrans.position;
           col.enabled = !isPressed;
       }
       if (!isPressed) Drop();
   }
}

using UnityEngine;
using System.Collections;

public class HeroItem : MonoBehaviour {
   Transform mTrans, mParent;
   Vector3 scale;
   float cellWidth;
   float downScale;
   HeroTable hTable;

   void Start () {
       mTrans = transform;
       scale = mTrans.localScale;
       mParent = mTrans.parent;
       hTable = mParent.GetComponent<HeroTable>();
       cellWidth = hTable.cellWidth;
       downScale = hTable.downScale;
   }
   
   void Update () {
       Vector3 pos = mTrans.localPosition + mParent.localPosition;
       float dist = Mathf.Clamp(Mathf.Abs(pos.x), 0f, cellWidth);
       mTrans.localScale = ((cellWidth - dist*downScale) / cellWidth) * scale;
   }
}

반응형
Posted by blueasa
, |

유니티 NGUI 에서 라벨에 한글 적용하기(1)


유니티 NGUI 에서 라벨에 한글 적용하기(2)


반응형

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

NGUI Virtual Joystick  (1) 2012.12.05
스크롤/드래그 이벤트를 받는 방법  (0) 2012.11.13
NGUI - Sticky Floating Text  (0) 2012.10.28
NGUI: HUD Text  (0) 2012.10.26
NGUI와 NGUI: HUD Text 패키지 임포트 시 에러 문제..  (0) 2012.10.25
Posted by blueasa
, |
반응형
Posted by blueasa
, |

NGUI: HUD Text 버전 : 1.3

새로 받은 NGUI 버전 2.2.3


NGUI는 이미 프로젝트에서 쓰고 있는 상태에서 HUD Text를 쓰기 위해 에셋 스토어에서 구입을 하고, 임포트 시켰더니


클래스 간 충돌(동일한 클래스가 2개이상 있어서 모호하다고 함) 에러가 났다.


아래는 같은 경험을 한 분의 글이다.

링크 : http://smilejsu.tistory.com/397


그래서 NGUI: HUD Text의 ReadMe.txt 파일을 열어보니 아래와 같은 임포팅 방법이 써있었다.

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

Importing the full (or free) version of NGUI

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

The steps are the same as upgrading NGUI:


1. Start a new scene.

2. Delete the NGUI folder.

3. Import the new NGUI package.

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


설명대로 따라 해봤다.

1. 씬하나 만들고,

2. HUD 임포트 하고,

3. NGUI(산 거)를 삭제했다.

4. NGUI 새 버전을 새로 받아서 임포트 했다.

5. 에러 -_-


그래서 이리저리 구글링을 해보니 같은 문제로 난리 치는 사람들이 참 많았다.

참조 링크 : http://www.tasharen.com/forum/index.php?topic=1013.0


근데 위 링크에서도 제작자는 readme에 있는 설명밖에 안하고 있었다.


그래서 새로 프로젝트를 생성해서 HUD만 넣고 실행해보니 잘되는걸 봤는데..


HUD만 있을 때 NGUI의 워터마크가 화면에 나왔다. 프리버전인가보다..


난 상용 NGUI를 써야되는데.. 라고 생각해보니 저 프리버전이 없어져야 되겠다고 생각..


그렇게 생각하고 readme에 있는 임포팅 방법을 보니 테스트 해봐야 될 게 생각났다.

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

1. Start a new scene.

2. Delete the NGUI folder. <- 이 NGUI가 HUD Text-NGUI 를 가리키는 것 같아서 테스트..

3. Import the new NGUI package.

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



1. 씬하나 만들고,

2. NGUI 넣고

2. HUD 임포트 하고,(충돌 에러)

3. HUD Text 하위 NGUI 삭제(또다른 에러)

4. NGUI 새 버전을 그대로(덮어서) 임포트

5. 잘된다!!!!



결론 : 서양인이라 그런지..지극히 주관적인 생각으로 메뉴얼을 쓰는 건가.. 라는 생각을 했다. 제작자는 NGUI를 지우라고 하면 자신의 HUD 아래 NGUI를 생각하면서 쓴걸까.. 타인이 보면 그냥 원 프로젝트인 NGUI로 착각하는데..나처럼..

반응형

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

NGUI - Sticky Floating Text  (0) 2012.10.28
NGUI: HUD Text  (0) 2012.10.26
NGUI health bar, vital bar  (0) 2012.10.25
Button Cooldown effect  (0) 2012.10.16
NGUI 링크 모음  (0) 2012.10.16
Posted by blueasa
, |

http://www.youtube.com/watch?v=h0x5196mWlk


using UnityEngine;

using System.Collections;


public class VitalBar : MonoBehaviour {

private UISlider _slider;

private float _maxWidth;

public float health = 1f;

void Awake() {

_slider = GetComponent<UISlider>();

if(_slider==null)

{

Debug.LogError("Could not find the UISlider Component!");

return;

}

_maxWidth = _slider.foreground.localScale.x;

Debug.Log(_maxWidth);

}

void Update(){

UpdateDisplay(health);

}

public void UpdateDisplay(float x){

_slider.foreground.localScale = new Vector3(_maxWidth*x,_slider.foreground.localScale.y, _slider.foreground.localScale.z);

}

}




출처 : http://smilejsu.tistory.com/394

반응형

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

NGUI - Sticky Floating Text  (0) 2012.10.28
NGUI: HUD Text  (0) 2012.10.26
NGUI와 NGUI: HUD Text 패키지 임포트 시 에러 문제..  (0) 2012.10.25
Button Cooldown effect  (0) 2012.10.16
NGUI 링크 모음  (0) 2012.10.16
Posted by blueasa
, |

Button Cooldown effect

Unity3D/NGUI / 2012. 10. 16. 22:20

It's really simple. Create one UISprite. Give it a grey tint. Now create a UIFilledSpriteusing the same sprite texture, right on top of the original. Set it to radial 360. That's it, really. Drag the filled sprite's slider to see it change.



참조 : http://www.tasharen.com/forum/index.php?topic=539.msg2724#msg2724


출처 : http://www.tasharen.com/forum/index.php?topic=1205.msg6124#msg6124

반응형

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

NGUI - Sticky Floating Text  (0) 2012.10.28
NGUI: HUD Text  (0) 2012.10.26
NGUI와 NGUI: HUD Text 패키지 임포트 시 에러 문제..  (0) 2012.10.25
NGUI health bar, vital bar  (0) 2012.10.25
NGUI 링크 모음  (0) 2012.10.16
Posted by blueasa
, |

NGUI 링크 모음

Unity3D/NGUI / 2012. 10. 16. 19:52

개발사

http://www.tasharen.com/?page_id=140


레퍼런스

http://www.tasharen.com/ngui/docs/index.html


http://www.looah.com/myevannet


http://forum.unity3d.com/threads/114833-NGUI-(Next-Gen-UI)-demo-amp-final-feedback-request




[출처] NGUI 링크 모음|작성자 crazylulu

반응형

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

NGUI - Sticky Floating Text  (0) 2012.10.28
NGUI: HUD Text  (0) 2012.10.26
NGUI와 NGUI: HUD Text 패키지 임포트 시 에러 문제..  (0) 2012.10.25
NGUI health bar, vital bar  (0) 2012.10.25
Button Cooldown effect  (0) 2012.10.16
Posted by blueasa
, |