読者です 読者をやめる 読者になる 読者になる

いんでぃーづ

個人でゲーム開発してる上で吸収したモノたち紹介。UnityからGIMPまでなんでも。デザインとかゲーム論まで語っちゃうよ的なアレ。

MENU
{スポンサーリンク}

Unity : モバイル画面の方向を固定、あるいは変化を検出

Unity C# Android iOS

Android, iPhoneなどで動かす場合には、端末の方向を考慮してGUIなどを構成する必要があります。

その場合、あらかじめ向きを固定してしまうか、画面の回転を検出して補正を行いましょう。

画面の向きを固定する

メニューの Build Settings > Player Settings と選択し、インスペクターでOrientationの項目を見ます。

f:id:sugar_affordance:20160815142221p:plain

  • Portrait : 縦向き
  • Portrait Upside Down:縦向き(上下逆)
  • Landscape Right:横向き(左側面が下)
  • Landscape Left:横向き(右側面が上)
  • Auto Rotation:端末の向きに合わせて自動回転

Auto Rotation以外のどれかを選択すれば、表示方向を固定にできます。

画面の向きの変更を検出する

縦横両対応のゲームを作りたいなら、画面の向きの変更を検出しなければなりません。 Unityには検出用のイベントなどは無いようなので、スクリプトで検出しましょう。

deviceOrientationを使う

InputクラスのdeviceOrientationを参照すれば、現在の端末の向きが分かります。

http://docs.unity3d.com/ja/current/ScriptReference/Input-deviceOrientation.html http://docs.unity3d.com/ja/current/ScriptReference/DeviceOrientation.html

Screen.width, Screen.heightを使う

deviceOrientationでUNKNOWNやFace UPが返ってくる場合、ディスプレイのサイズで判定しましょう。

width > height なら横向き、逆なら縦向きで。

以下、deviceOrientaionも含めて判定する際のサンプルコードです。

public class DeviceOrientationDetector: MonoBehaviour {

    // 直前のディスプレイ向き
    DeviceOrientation PrevOrientation;


    // 端末の向きを取得するメソッド
    DeviceOrientation getOrientation() {

        DeviceOrientation result = Input.deviceOrientation;

              // Unkownならピクセル数から判断
        if (result == DeviceOrientation.Unknown)
        {
            if (Screen.width < Screen.height)
            {
                result = DeviceOrientation.Portrait;
            }
            else
            {
                result = DeviceOrientation.LandscapeLeft;
            }
        }

        return result;
    }

    void Start () {
        PrevOrientation = getOrientation();
    }
     
    void Update () {

    
        DeviceOrientation currentOrientation = getOrientation();
        if (PrevOrientation != currentOrientation)
        {
            // 画面の向きが変わった場合の処理


            PrevOrientation = currentOrientation;
        }
    } 

Amazon.co.jpアソシエイト