Unity

【Unity×iOS】画面の縦横固定の正しい方法|Player Settings・Info.plist・動的切替まで完全解説

使用環境

・Unity Editor:2021.3.18f1

この記事でわかること

  • Unity EditorでのPlayer Settings設定手順
  • Xcode 側での Info.plist のチェックポイント
  • スクリプトで動的に向きを切り替える サンプルコード
  • ビルド後に向きが変わってしまう “あるある” エラーの原因と対策
  • App Store 審査でNGにならないための注意点

iOSの縦画面・横画面を固定するとは?

ピッグダディ

今日は「Unityで作ったiOSアプリの画面の向きを固定する方法」について解説しますね。
向きがブレると、UIが崩れたりメニューが逆さまになったりします。

ピッグボーイ

あります!
iPhoneをちょっと傾けただけで画面が回転して、
ボタンが押せなくなったことがあって地味に困りますよね。

ピッグガール

私はゲーム中は横向き、メニューだけ縦向きにしたくて…
でも、設定してもなんか勝手に戻っちゃうことがあって…

ピッグダディ

うんうん、それぞれ大事なケースですね。
このあと、Player Settingsでの基本設定、Info.plistの確認ポイント、動的に向きを切り替える方法、さらにApp Storeの審査で気をつけるべき点まで、わかりやすく解説していきますね。

Unity Editorでの設定

File › Build Settings → “Player Settings…” をクリック。
Playerを選択 → 右側のiOSを選択 →“Resolution and Presentationが対象です。

項目推奨値(縦固定)推奨値(横固定)
Default OrientationPortraitLandscape Left (または Right)
Allowed Orientations for Auto-Rotation(Unity6以降?)Portrait のみ ONLandscape Left / Right のみ ON

Xcode (Info.plist)での確認

ビルドが終わったらInfo.plist をチェックします。
以下のキーが Unity の設定と一致しているか確認しましょう。

スクリプトで動的に向きを制御する方法

一部のシーンだけ横向きにしたい。そんなときは ScreenOrientation API が便利です。

using UnityEngine;

public class OrientationLocker : MonoBehaviour
{
    // 例:Awake 時に縦固定
    void Awake()
    {
        LockPortrait();
    }

    public void LockPortrait()
    {
        Screen.orientation = ScreenOrientation.Portrait;
        Screen.autorotateToLandscapeLeft  = false;
        Screen.autorotateToLandscapeRight = false;
        Screen.autorotateToPortrait       = true;
        Screen.autorotateToPortraitUpsideDown = false;
    }

    public void LockLandscape()
    {
        Screen.orientation = ScreenOrientation.LandscapeLeft;
        Screen.autorotateToLandscapeLeft  = true;
        Screen.autorotateToLandscapeRight = true;
        Screen.autorotateToPortrait       = false;
        Screen.autorotateToPortraitUpsideDown = false;
    }
}

よくある落とし穴とデバッグTips

症状原因対策
iPad で勝手に横になるUISupportedInterfaceOrientations~ipad が縦横両方不要な向きを削除
起動画面 (Launch Screen.storyboard) だけ横になるLaunch Screen の View が横固定Storyboard の View 属性を “Inferred” に
特定シーンだけ UI が伸びるCanvas Scaler が “Match Width Or Height” のまま縦横別 Canvas を用意 or スクリプトで切替
App Store Connect で “システム回転不可” 警告Info.plist と実装が矛盾設定・コード両方を統一

まとめ

  • 最優先は Player Settings:ここで正しく設定すれば 8 割は解決。
  • Info.plist を必ず確認:Unity からの自動生成を鵜呑みにしない。
  • 動的制御は Screen.orientation:ただし Info.plist に同じ向きを許可する。
  • 審査リジェクト防止のため “宣言外のオリエンテーション” をゼロに。

これで 縦固定/横固定 のトラブルに悩まされることなく、安心して iOS 向け Unity アプリをリリースできます。
ぜひプロジェクトに取り入れてみてください!