Unity3D의 신묘한 기능중에 하나는 안드로이드 SDK를 C#으로 불러서 쓸수 있다는 점.
그걸 이용해서 Soft Navigation bar를 없애보았다.

* 게임할때  겁나 걸리적 거리는 요녀석!
사용자 삽입 이미지

* 원문은 여기
아래 "2"가 왜 "2"인지에 대한 자료는 여기
 
 
#if UNITY_ANDROID
 // 안드로이드 자바오브젝트를 3개 선언한다.
 static AndroidJavaObject activityInstance;
 static AndroidJavaObject windowInstance;
 static AndroidJavaObject viewInstance;
 //중요한건 바로 여기 "2"로 설정된 "SYSTEM_UI_FLAG_HIDE_NAVIGATION"값이 중요

 const int SYSTEM_UI_FLAG_HIDE_NAVIGATION = 2;
 const int SYSTEM_UI_FLAG_LAYOUT_STABLE = 256;
 const int SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION = 512;
 const int SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN = 1024;
 const int SYSTEM_UI_FLAG_IMMERSIVE = 2048;
 const int SYSTEM_UI_FLAG_IMMERSIVE_STICKY = 4096;
 const int SYSTEM_UI_FLAG_FULLSCREEN = 4;
 
 public delegate void RunPtr();
 
 public static void Run()
 {
 if (viewInstance != null)
 {
 viewInstance.Call("setSystemUiVisibility",
 SYSTEM_UI_FLAG_LAYOUT_STABLE
 | SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
 | SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
 | SYSTEM_UI_FLAG_HIDE_NAVIGATION
 | SYSTEM_UI_FLAG_FULLSCREEN
 | SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
 }
 
 }
 #endif
 


일단 이렇게 선언이 끝났으면 다음의 코드를 추가한다.

 public static void DisableNavUI()
 {
 if (Application.platform != RuntimePlatform.Android)
 return;
 using (AndroidJavaClass unityPlayerClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
 {
 activityInstance = unityPlayerClass.GetStatic<AndroidJavaObject>("currentActivity");
 windowInstance = activityInstance.Call<AndroidJavaObject>("getWindow");
 viewInstance = windowInstance.Call<AndroidJavaObject>("getDecorView");
 
 AndroidJavaRunnable RunThis;
 RunThis = new AndroidJavaRunnable(new RunPtr(Run));
 activityInstance.Call("runOnUiThread", RunThis);
 }
 }
 


이제 이녀석을 호출할 녀석을 추가한다.
 void Start()
 {
 DisableNavUI();
 }
 

이제 상단 실행시켜보면 상단 또는 하단 엣지 부분을 가운데 방향으로 드레그 하기전에는 메뉴가 보이지 않는다.
물론 단점도 존재한다.

- 화면해상도 새로 잡아야 한다. T_T 
- 지금까지 알려진 해상도가 아니라는 점...
2014/09/02 10:46 2014/09/02 10:46

트랙백 주소 :: 이 글에는 트랙백을 보낼 수 없습니다