GSI

코드는 아래와 같이 구성하면 됩니다.

0.3f로 되어 있는 부분의 수치는 적당히 조절하면 됩니다.

빠르게 누르지 않으면 계속해서 exitCountValue가 0으로 변경되는걸로 이해 하시면 됩니다.


uint exitCountValue = 0;

void Update(){

    if(Input.GetKeyUp(KeyCode.ESCAPE)){

        exitCountValue++;

            if(!isInvoking("disable_DoubleClick"))

                invoke("disable_DoubleClick", 0.3f);

    }

    if(exitCountValue == 2){

        CancelInvoke("disable_DoubleClick");

        Application.Quit();

    }

}

 

void disable_DoubleClick(){

    exitCountValue = 0;

}

Posted by gsi
:

"Android virtual keyboard has white characters on white background "


Unity 5.4.0f3 (32-bit)

이 툴을 이용해서 작업하다가

안드로이드에서 Input Field의 글자가 아래 이미지 처럼 안보이는 현상이 나올때가 있습니다.

이때는 아래와 같이 저 구문을 넣으니 해결되는걸로 보이네요.


[이렇게 되어 있다면]

android:icon="@drawable/app_icon"

android:label="@string/app_name"


[이렇게 해보세요.!!]

android:icon="@drawable/app_icon"

android:label="@string/app_name"

android:theme="@style/UnityThemeSelector"


[관련 이미지]



Posted by gsi
:

NGUI를 처음 접하면서 화면 구성을 하고 나서 핸드폰에 적용하면

틀어 지는 현상이 나온다.


내가 기존에 2D를 작업 하던 사이즈는

800 X 1280 이다. (세로)


여기서 NGUI를 적용할려고 자료를 찾아 보니 결국

스크립트 수정을 해줘야 하는것으로 보여 진다.

아래와 같이 수정하니 문제 없이 된다.


1. NGUI 의 UI 스크립트 UIRoot.cs 열기


2. Inspector Window 에서 설정

   Scaling Style - constrained On Mobiles

   Content Width - 800 Fit Check

   Content Height - 1280 Fit Check


3. UIRoot.cs 스크립트의 Update() 함수에서 아레 부분을 수정한다.

   mTrans.localScale = new Vector3(size, size, size);


   >>>


   float fX = (NGUITools.screenSize.x / 800f);

   float fTemp = (1280f * fX);

   float fY = NGUITools.screenSize.y / fTemp;

   mTrans.localScale = new Vector3(size, size * fY, size);


이상입니다.

Posted by gsi
:

Button을 Prefab로 등록한후 게임상에서 환경에 따라서 Button을 여러개 생성해야할 경우가 생긴다.

부모가 되는 GameObject의 Transform 객체 하부로 연결하면 된다.


> GameController 는 Main Camera 에 스크립트로 등록한다.

> uiRoot는 UI의 최상의 Canvas 객체이다.

> tileButton는 Prefab로 등록되어 있는 버튼 객체이다.


Start() 함수에서

Instantiate (tileButton); 이 코드만 실행하면 Root의 자식으로 생기기 때문에 

원래 의도한 Canvas의 자식으로 생성되지 않는다.

아래와 같은 코드로 하게 되면 자식으로 등록이 된다.


-- 코드 --

using UnityEngine;

using UnityEngine.UI;

using System.Collections;


public class GameController : MonoBehaviour {


public GameObject uiRoot;

public Button tileButton;


// Use this for initialization

void Start () {

Button child = Instantiate (tileButton);

child.transform.parent = uiRoot.transform;

}

// Update is called once per frame

void Update () {

}

}


하지만 위와 같이 하면 동작은 되지만 아래와 같은 메시지가 뜨게 된다.

Parent of RectTransform is being set with parent property. Consider using the SetParent method instead, with the worldPositionStays argument set to false. This will retain local orientation and scale rather than world orientation and scale, which can prevent common UI scaling issues.


이 경우 SetParent()를 사용하면 된다.


child.transform.parent = uiRoot.transform;

child.transform.SetParent (uiRoot.transform);

Posted by gsi
:

안드로이드에서 Back 버튼에 대한 이벤트는 아래와 같이 처리 하면된다.


if( Input.GetKeyDown( KeyCode.Escape ) )

{

   // 처리할 로직을 여기에 넣으면 된다.

}


Update()에서 값을 체크 해서 사용하면 된다.

Posted by gsi
:


Unity3D 해상도 1:1 매칭을 위한 카메라값 설정


1:1 픽셀을 유지 하기 위해서는 가로 해상도 보다는 세로 해상도에 대해서 절반값을 카메라로 정해주면 된다.

Main Camera을 선택하고

Projection을 Orthographic로 설정후

Size의 값을 해당 해상도의 높이/2로 설정하면 된다.


저는 보통 800X1280을 사용하기 때문에

1280/2 해서 640으로 설정하면 된다.




이후 UI를 구성할때 Canvas의 구성은 아래와 같이 진행 한다.


Canvas의 Render Mode는 Screen Space - Camera 로 설정한다.

Plane Distance는 적당히 잡아 주면 된다.


Canvas Scaler의 UI Scale Mode는 Scale With Screen Size 로 설정한다.

Reference Resolution은 X:800, Y:1280 으로 설정한다.

Screen Match Mode는 Match Width Or Height로 설정한다.

Reference Pixels Per Unit는 1로 설정한다.



Posted by gsi
:

UI Image 객체의 Width를 코드상에서 줄이는 방버은 아래와 같습니다.


using UnityEngine.UI;

네임 스페이스 지정합니다.


public Image ScoreBar;

객체를 연결하기 위해서 선언을 합니다.

에디터 상에서 Image 객체를 연결합니다.


ScoreBar.rectTransform.sizeDelta = new Vector2 (120, 14);


이렇게 하면 Width의 값이 120으로 Height의 값이 14로 변경됩니다.


--이상--

Posted by gsi
:

Scene 전환하기

Unity 2016. 2. 21. 23:20 |

Unity를 처음 공부할때는 Scene라는 개념을 제대로 이해 못하고 무조건 구현하고 싶은 마음에

Canvas를 사용해서 화면 전환 처리를 수행했다.

그러다 보니 Canvas를 전환할려고 하면 CanvasGroup를 달아서 Show/Hide 처리를 하거나

Prefab에 전환할 Canvas를 등록하고 로드 언로드 처리를 하거나 하는 방법을 사용했다.

처음에는 그런 방법이 제일 맞는듯 했다.


공부한지 한달정도 지나서 Scene 라는 개념이 조금 이해가 되기 시작했다.

Title, Main, Option 등의 화면을 구분지어서 사용할때 Scene를 각 화면당 처리를 해주면 된다.


즉 Title에서 버튼을 클릭해서 Main으로 넘길때 Title.unity Scene 파일을 로드했다가 

Main.unity Scene 파일을 로드 하면 된다.


처음에는 Scene 파일을 로드해야 하는데 Title에서 Main으로 넘어 가질 않더라

그래서 확인해 보니 Build Setting 화면에서 Scene 를 등록하고 사용해야 한다.



위와 같이 Scenes In Build 항목에 순서대로 넣어 주고 해당 이름 또는 인덱스를 사용해서 처리 하면 된다.


아래 코드로 단순하게 처리가 가능하다.


네임 스페이스는

using UnityEngine.SceneManagement;

이 구문을 등록한다.


아래와 같이 해당 Scene을 번호 또는 이름으로 로드 하면 된다.

기존 Scene는 없어지고 현재 Scene가 로드 된다.

SceneManager.LoadScene (0);


현재 Scene 를 가져올때는 아래 코드를 사용한다.

int currentSceneIndex = SceneManager.GetActiveScene ().buildIndex;


-이상-



Posted by gsi
:

UICanvas 전환효과주기 소스


최근에 공부하면서 심플하게 처리하는 방법 정리한 자료 입니다.


유니티_Canvas전환_코드.pdf


UICanvasSwitch2.zip


Posted by gsi
: