うえすと開発メモ

カテゴリ: iOS

iPhoneXではアプリを開いている間、画面の下部にスワイプでホーム画面へと戻るバーが常時表示されます。
home_button_iphonex1
Unityのアプリでこれを非表示にするには、
メニューから [Edit] → [Project Settings] → [Player] で PlayerSettings を開いて、iOSタブの Other Settings 内で [Hide home button on iPhone X] にチェックを入れるだけです。
hide_home_button_iphonex

この設定が追加されたUnityのバージョン一覧は、以下リンク先に記載があります。
ちなみに、この設定を有効にした場合でも、
アプリ起動時は表示されて、しばらくすると消えるのですが、
画面のどこかをタッチすると再度表示されてしまうので、残念ながら完全に消す方法は無いようです。
このエントリーをはてなブックマークに追加

Unityで作ったiOSアプリでiPadか否かを判別するにはSystemInfo.deviceModelを使用して端末名を取得して判定します。

public static bool isIPad {
    get {
        return SystemInfo.deviceModel.Contains ("iPad");
    }
}

このエントリーをはてなブックマークに追加

iOS向けにUnityで作成したプロジェクトをXcode5でビルドすると以下の様なリンカエラーが出て失敗することがあるので、その対処メモ。

・エラーメッセージ
Directory not found for option '-L"/Users/Shared/Unity/[~~~]/[~~~]/Libraries"'


・対処法
①Xcode上でプロジェクトルートを選択

Build Settings内のSerch Paths内のLibrary Search Pathsをダブルクリック。

\"$(SRCROOT)/Libraries\"という項目を$(SRCROOT)/Librariesに変更する。

④再ビルド

このエントリーをはてなブックマークに追加

ロジクール G550という、iOS7からサポートされているゲームコントローラーを入手したので、Unityアプリで対応してみました。

特別な設定はしなくても、Unity4.2.2以降でiOS向けに出力したプロジェクトをXcode5でビルドすると、対応OSの場合(iOS7以降)ゲームコントローラを使用するためのフレームワークが自動的にロードされます。

UnityからはInputクラスでキーボード等と同じように入力情報を取得出来ます。
if (Input.GetKeyUp(KeyCode.JoystickButton14)) {
    // Aボタンを押した時の処理
}

// 十字キーやアナログスティックの入力値を取得(-1f~1f)
float axisV = Input.GetAxis ("Vertical");
float axisH = Input.GetAxis ("Horizontal");

各ボタンとKeyCodeの値の紐付け一覧は以下のページ下部にまとまっています。
参考:Unity 4.2.2 brings iOS Game Controller support

ゲームコントローラーの接続状態を検知して画面上のバーチャルパッドの表示/非表示を切り替えたい場合には、上記ページサンプルに少し手を加えた、以下の様なスクリプトを貼っつけたGameObjectを配置します。
[SerializeField]
GameObject[] onlyTouchObj;

public bool connected {
    get;
    private set;
}

void Start ()
{
    StartCoroutine (CheckForControllers ());
}

IEnumerator CheckForControllers ()
{
    while (true) {
        var controllers = Input.GetJoystickNames ();
        
        if (!connected && controllers.Length > 0) {
            Debug.Log ("Connected");
            connected = true;
            Screen.sleepTimeout = SleepTimeout.NeverSleep;
            
        } else if (connected && controllers.Length == 0) {
            Debug.Log ("Disconnected");
            connected = false;
            Screen.sleepTimeout = SleepTimeout.SystemSetting;
        }
        
        foreach (GameObject obj in onlyTouchObj) {
            if (obj != null) obj.SetActive (!connected);
        }
        
        yield return new WaitForSeconds (1f);
    }
}
インスペクタ上からOnlyTouchObjに設定したGameObjectが、コントローラ接続時には非アクティブになります。

更にゲームコントローラーでプレイ中は画面をタッチしなくなると思うので、自動的にスリープしないようにしています。
game_controller_01

このエントリーをはてなブックマークに追加

iOS7がリリースされて大きく変わった事もあり、
OSのバージョンを判別して挙動を分けたい場合があると思います。

Unityで作ったiOSアプリでOSのバージョンを取得するにはSystemInfo.operatingSystemを使用します。

public static float GetiOSVersion()
{
#if UNITY_IPHONE && !UNITY_EDITOR
	string versionString = SystemInfo.operatingSystem.Replace( "iPhone OS ", "" );
	
	float version = -1f;
	
	float.TryParse( versionString.Substring(0, 1), out version );
	
	return version;
#else
	return -1f;
#endif
}

iOS上でSystemInfo.operatingSystemを呼ぶと「iPhone OS 6.1.1 」の様な形式で取得できるので、5, 6, 7等のメジャーバージョンだけ返すように整形しています。

このエントリーをはてなブックマークに追加

このページのトップヘ